Computation as Interaction (or, Go Learn Erlang)
I just finished a fascinating paper "Challenging the Computational Metaphor" by Lynn Andrea Stein. The main focus is in trying to get us to move from a world of Computation as Calculation, to one of Computation as Interaction.
Quick definition time -
Computation as Calculation: Breaking a problem into a sequence of steps that need to be be logical, and sequentially calculated on a set of inputs, to get to a result.
Computation as Interaction: Representing an environment as a sequence of interacting entities, with the emergent property of the interaction as the result
Stein postulates that the Calculation approach is embedded into the very fabric of every thing we do, and everything we teach.
It has served us extremely well up till recently, with the enforced abstraction being vital to our ability to construct functioning systems. It has also bled into the rest of the world, with a continued focus on everybody's part to systematize and standardize processes to do "things". Witness the obsession in virtually any organization of size to come up with documentation on How To Put Paper In The Copier.
The problem is that this model is showing wear and tear - it is really not up to the task of dealing with interactions across multiple entities. This is partly because such interactions are, almost by definition, not definable as a single sequence of steps (the Calculation model). Co-ordination and concurrency are problems that are complex enough to require their own language and their own metaphor, ones that are just not amenable to squeezing into the Calculation paradigm. And this is the nub of the matter, with the number of computational agents/entities increasing not just within a given computer (witness the iPad, with multiple cores, accelerometer, camera, display, and other "things"), but across everything that we interact with on a daily basis (your car, phone, computer, iPad, elevator, security cameras, etc., etc.).
As Stein puts it
Erlang is a good segue here, since the Interaction model's sticking point has always been concurrency - in short, how one gets all these entities to interact - with the emergent properties of these interactions being the aim of the activity - without deadlocks, race-conditions, and in short, without crapping out.
Strangely enough, once a commitment to Computation as Interaction is made, teaching becomes significantly easier! Admittedly, this is largely because interacting entities are natural to the human condition - we get this without even having to think about it. Take UI development as a case in point. It is typically difficult to comprehend in a Computational world, where one is taught to look at problems as a sequence of steps to get to an end-point/result. Getting the User to fit into this sequence of steps is an instant deep dive into fun stuff like event models, and MVC frameworks, just to comprehend the concepts associated with getting the User involved. However, in an Interaction model, the User is simply another part of the community of interacting entities. Easy stuff - once you make the cognitive leap.
In closing
Quick definition time -
Computation as Calculation: Breaking a problem into a sequence of steps that need to be be logical, and sequentially calculated on a set of inputs, to get to a result.
Computation as Interaction: Representing an environment as a sequence of interacting entities, with the emergent property of the interaction as the result
Stein postulates that the Calculation approach is embedded into the very fabric of every thing we do, and everything we teach.
The problem is that this model is showing wear and tear - it is really not up to the task of dealing with interactions across multiple entities. This is partly because such interactions are, almost by definition, not definable as a single sequence of steps (the Calculation model). Co-ordination and concurrency are problems that are complex enough to require their own language and their own metaphor, ones that are just not amenable to squeezing into the Calculation paradigm. And this is the nub of the matter, with the number of computational agents/entities increasing not just within a given computer (witness the iPad, with multiple cores, accelerometer, camera, display, and other "things"), but across everything that we interact with on a daily basis (your car, phone, computer, iPad, elevator, security cameras, etc., etc.).
As Stein puts it
The prevailing paradigm today - the OO model, is also not really all that relevant [in the Interaction world] as it stands. OO encapsulates data with function, but this function is generally sequential (and this is important) contextually oblivious. […] Because objects are generally seen as passive, act-only-when-invoked kind of creatures they [have become mere extensions of sequential programming].Contrast that with the world of Erlang, where the OTP behaviors such as gen_server, gen_event, and gen_fsm, etc. are important at a much deeper level than most people realize, since they encompass Context. The State they maintain is vital to their awareness (i'm using 'awareness' to point out that they understanding about their place in their universe).
Erlang is a good segue here, since the Interaction model's sticking point has always been concurrency - in short, how one gets all these entities to interact - with the emergent properties of these interactions being the aim of the activity - without deadlocks, race-conditions, and in short, without crapping out.
Strangely enough, once a commitment to Computation as Interaction is made, teaching becomes significantly easier! Admittedly, this is largely because interacting entities are natural to the human condition - we get this without even having to think about it. Take UI development as a case in point. It is typically difficult to comprehend in a Computational world, where one is taught to look at problems as a sequence of steps to get to an end-point/result. Getting the User to fit into this sequence of steps is an instant deep dive into fun stuff like event models, and MVC frameworks, just to comprehend the concepts associated with getting the User involved. However, in an Interaction model, the User is simply another part of the community of interacting entities. Easy stuff - once you make the cognitive leap.
In closing
Many disciplines study systems of interaction. We have historically claimed a distinctOr, to put it in my words, Go Forth, and learn The Erlang Way...
role for computation. Now, as computational science itself shifts to embrace interaction,
our field can become reunited with its surrounding disciplines. The cognitive sciences
looks at how natural intelligence works. Organizational science analyzes the ways in
which corporations and other large administrative entities function. Engineering
provides vocabularies and techniques for coordinating complex systems. Each of these
fields has the potential to contribute to, and to benefit from, a computational science of
interaction
Comments
http://neuroelectrodynamics.blogspot.com/p/computing-by-interaction.html