Lewis Carroll’s Alice in Wonderland has been a source of inspiration for me and many others concerning a specific aspect of complex systems. This aspect is one that in my view is essential if we want to realise the quantum leap in complexity that we need: reflection.
Reflection is that property of systems that enable them to speak about themselves. An excellent introduction to reflection is the famous book by Douglas Hofstaedter: Gödel Escher Bach. The living brain of course being the foremost example of such a system.
Really complex adaptive systems are able to modify themselves instead of being dependent on human intervention to do so. People are not able to overview or control the complexity of relations in a system as a whole, the aspect I call Global Complexity (in contrast with the other aspect of complex systems, called Local Simplicity – more on this in another article). In fact, almost all of the effort we have put into computer systems has been in the vain attempt to control them, not in evolving them or making them better. The ecological properties of these systems make it only worse (see: Gregory Bateson: Steps to an Ecology of Mind). By harnessing the power of reflection these systems are able to do this on their own initiative, but of course this implies an almost total revolution in the way we treat these systems.
In programming languages Lisp and Smalltalk have taken the road to reflection further. Modern computer languages as a rule sadly neglect this property that is essential to create really complex systems, and in fact I am sad to see that this aspect is not dealt with in programming languages as a whole. Maybe because this is too complex to deal with?
The Smalltalk system is a reflective system with astounding properties many people do not realise, even Smalltalk programmers. Bootstrapped in October 1972, this system has evolved without dying, up until this very moment. Systems developed in Smalltalk were and are not created by writing code but by sending messages to objects in this original system, thereby modifying it, morphing it as it were to reflect the wishes of the developers. The many systems developed in Smalltalk are a testament to this ability to mutate in almost any possible direction, the creativity of the users the only restricting force. An “application” in Smalltalk is actually not something programmed, but “grown” from the development environment itself. Deploying an application in Smalltalk is done by cloning the development environment and removing all unnecessary tooling thereby shrinking the world of these objects. And then the application delivered to the customer is still a sibling of this originally in 1972 bootstrapped world!