Notes Information Apocalypse

Membrane Oriented Programming

When I first started playing with Erlang, I immediately noticed something, perhaps reflecting a more nuanced view of programming languages that I have slowly started to grasp over the past few months. It makes me feel slightly less stupid when someone much smarter comes to the same conclusion.

For many years, Object Oriented discourse has been far too constrained by language oriented thinking, leading to problems of understanding somewhat akin to the Sapir-Whorf hypothesis (in a slightly different sense to what Iverson suggested in Notation as a Tool of Thought). A lot of the problems arising from the questionable status of verbs in the Kingdom of Nouns can be traced to the restrictive coding of the subject.verb(object) form as the dominant notation in most modern programming languages. Despite the fluid and amorphous nature of natural language, most computer languages cannot evolve or reshape themselves based on usage. Too much of our understanding of programming is fixated on syntax (which is why language evolution still tends back towards LISP, which is now almost 50 years old). The idea of a noun being a node representing a real-world object is extraordinarily useful for designing and prototyping a software system, but imposes a drastic limitation on the combinatorial productivity of language. Transformation and flux are what define natural language, more so than anything allowable by strict SVO constraints. This effervescent flux of meaning is well documented but not widely disseminated in a Western world paradoxically obsessed with order, yet existing in a state of constant contradiction.

But Alan Kay never intended Object Oriented Programming to be that way. Even Smalltalk, he believed, couldn't live up to the standards of what he saw to be the right way forward (towards what Ralph Johnson describes as the 'Mystical' view of objects, which is really just a deep restating of the Actor-Message model of computation). Perhaps we have all collectively missed the point because of a top-down (abstract) vs bottom-up (concrete) distinction in computing that has never been fully resolved. Hence we have oddities like Java which is both a static and a dynamic language (depending on your definition), and tries to enforce a 'pure' object based program form but also squeezes 'primitive' non-object types into the core of the language. Object orientation is either a lot more shallow, or radically deeper than we have given it credit for. Either way, it seems that the dominant pedagogy in computer science is on the brink of a large scale shift in focus (I'm not going to call this a paradigm shift, for socio-scientific reasons that would probably take a whole separate essay to sufficiently explain). In program design, students of the present era have consistently been told to focus on the what, not the how, yet the how keeps bubbling up to interrupt and intersect the what, causing an unavoidable mess and a reputation for programming being a hard to learn vocation fraught with difficulties.

As outlined above, a key problem is that programming languages are incapable of metaphor. However, it is not necessarily the case that metaphor and ambiguity is of little help when designing software. In fact, metaphor is one of the greatest enablers of radical simplicity that we have at our disposal. The original point of the whole Actor-Message view of object orientation is that a language of objects is itself a metaphor. The familiar wisdom of capturing a bunch of domain specific nouns as a set of interacting object types is a much more restrictive definition of object oriented programming than you might think at first, more akin to transcription of an observed reality into a symbolic form than a true form of abstraction. Behind all of this, there are fundamental biological metaphors that form the basis of not just networked computing, but the very foundation of object oriented programming itself. A computer program could very well be seen as a network of communicating, interacting cellular components. Simply replace the term 'object' with 'membrane' and you'll have a much more clear idea of what is going on.