When I went to OOPSLA last year, I missed Alan Kay's talk. I heard that he had drawn some parallels between OO systems and biological systems. This line of thought has been floating around with me for a while now. Doubtless, some of what I'm about to write may duplicate other insights that people have made. I'd really appreciate it if anyone could tell me where to get additional information on such things.
I've been amazed at what I've heard written by the people who are involved in the Chrysler Comprehensive Compensation project, and those doing Extreme Programming in particular. Listen to your program. Do The Simplest Thing That Could Possibly Work. It seems that the system is supposed to adapt to its environment in much the same way that a biological organism would. The dedication that some people have to this point of view makes me think of them as parts of the system themselves. A bunch of people growing a system that they live in.
I had a chance to look at Kent Beck's Smalltalk Best Practice Patterns book the other day, and another biological metaphor struck me. When he says that he goes in and breaks large chunks into smaller chunks, it sounds very much like a process of digestion or assimilation.
If we consider OO programs to be Knowledge Representations, then programmers are means by which new knowledge is assimilated, and the "experience" of the system is reclassified. People tend to classify their experience, but we have the built in facility to tear down old structure and reclassify (build new structure). The systems that we build don't have that advantage yet. We are the agents of growth for them.
It's just a metaphor. You're really listening to your mind and body as it senses what is easy, and what is hard, as you program. The program isn't alive. It doesn't suffer when you delete bad code, or feel good when you make it better. In the spirit of Egoless Programming, it's good to keep yourself separate from the program in your mind, lest you think you're bad just because your program is bad. -- Ron Jeffries
That seems like Ego Programming to me - if you're not your program, who are you? What's the difference between the accountant and the accounting? -- Peter Merel
The difference is the accountant can conceive of improvement and move on to a better accounting, while the accounting is helpless all the while it's thinking "I suck; help me! help me!"
What characterizes living systems as opposed to "mere" mechanism? The traditional wisdom is that if it grows, metabolizes and reproduces then it's alive, but this isn't adequately discriminating when it comes to things like, say, fire [one word for you: membrane]. A lot of folk resort to things like genes too, but just a sequence of genes isn't alive, and neither should we rule out the possibility of life in creatures that are constituted and evolve by intentional design rather than by genetic cookery, since we're plainly heading that way. So how do we sort it out?
Perhaps we should start by observing that life is not a property of structures - organisms are a handy focus with which to identify living *processes* that link together multiple interdependent events. Take away the process and, intact or not, the structure does not live.
But if it's processes that live, then not just any old process is a living one. Let's pursue this:
an event describes the occurrence of a condition in some domain
a process is some potential transformation of that domain
a dependent process is a process whose occurrence depends upon an event
a living process is a cycle of dependent processes
one living process reinforces another if its occurrence increases the likelihood of the other's occurrence
living processes are in harmony if they mutually reinforce each other (cf Constructive Interference)
an organism is a harmonious group of living processes
an ecosystem is an organism dependent only on non-living processes
The advantage of this chain of definition is that it explains how a living process can be constituted from non-living processes - so that fire can be seen as non-living when it is not part of a self-replicating sequence, but living when, for example, it forms part of the life-cycle of eucalyptus plants.
Applying this to architecture we might identify as organic any pattern whose use gives rise to a market for itself. An example might be web browsers and servers, where the existence of the one gives rise to a demand for the other, and vice versa. Part To Whole As Whole Is To Part might then be exemplified by things like the netscape site, or maybe the CPAN archive. -- Peter Merel
So a software system may not be alive, but a symbiosis of developers and software may be because it can replicate? I like this definition. It seems that memes would be alive also. See Richard Dawkins for a discussion of memes. -- Michael Feathers
One of the weird pieces of language that we used on C3 is sort of the Gaia Hypothesis writ small - talking as if the system were alive (see Healthy Code Is Happy Code for disturbing evidence that it may be more than a hypothesis or trick of language). "This variable wants to go over here", "the system wants this object replaced", and so on. Have others also used this language in teams? Is there some correlation between project management style and whether it is a useful fiction to treat the program as if it were alive?
-- Kent Beck
That takes us onto the turf of Dramatic Identity
It reminds me of Peter Coad's old technique for object-think: "I am an Account, I know my balance." But, I haven't done that in years. I would suppose that treating the program as if it were alive might be useful at least for the sense of care that it may instill.
In all, I think that this page fell off the topic. I was not really getting into anthropomorphism in software, although Ron's C3 impersonation was funny (or was that the Ron-role of the C3 system?). I was trying to grapple with the fact that if organic growth is a good metaphor for OO systems development, it must be because some processes and methods truly follow that model of systemic organization: using careful growth to mitigate risk, etc. It is interesting just how far off something like Extreme Programming is from industrial manufacturing processes, waterfall, etc. I get the strong sense that organic strategies are the best ones in non-controlled environments where there is much uncertainty to face. And, that is life in general, isn't it? -- Michael Feathers
Perhaps a garden is a better metaphor. [Category Gardening Metaphor] A beautiful garden is subject to weeds when left alone, and it takes lots of careful work and not a little skill to make a beautiful garden.
British recipe for a really excellent lawn:
Start 300 years ago ...
-- Ron Jeffries
I don't think that any manufactured system can qualify as 'living' in the strict sense. Maybe we can model life using complexity theory but then you cannot live in the blueprint of a house. Just imagine the number of bytes needed to represent object id (forget about capturing all the attributes) if every grain of sand, every atom, every identifiable 'object' in this universe were to be uniquely identified. (simple combinatorics: less than 9E78 bytes)(no, the answer is 42)
Only dead systems can be rigorously described. Left to themselves, any programs, including OO programs, are descriptions of dead(cartesian) systems because they do not respond creatively to new situations. In other words, programs do not innovate. Please let me know if you come across a program that innovates. -- Dildar Marhas
Randomness is the foundation of novelty.
Christopher Alexander would disagree with you. Not about programs that innovate, but about man-made systems that are alive. He thought that some buildings and neighborhoods were alive in some sense. They made you feel alive. They seemed to him to be like living things in some mystical, but important, way.
Of course, "living" has no strict sense. Is a cold virus alive? Many people think it is, I think not. It is just a cleverly constructed poison, and no more alive than a Word virus. But that is a topic for another page. -- Ralph Johnson
Genetic Algorithms have come up with solutions that have previously been patented, and with patentable new solutions. If this is not a program that innovates, please come up with a human being that innovates ;-) --Eivind Eklund
He thought that some buildings and neighborhoods were alive in some sense.
Would that not be a result more of the people, though? Even if you don't know many of them, you see them, they impact on the environment, as do you, and you both get back something from it; it's a sort of a Tuple Space within which you happen to conduct a good chunk of your life.
Switching horses, Steve Grand argues in Creation Life And How To Make It that life is a pattern of self-perpetuation--or perhaps more evocatively, survival--and that intelligence is a furthering of that pattern. It's struck chords with me and I'm working on adaptive networks as a result of it, not really so I can claim to have made a living system but more so I can watch it when I'm done. I have a deep fondness for strategy games and Sim City because it's like a clockwork ant colony--and, to bring this back to the core point, this is a vibe I also get from systems design. -- Rob Rix
Having thought about this for a while, systems aren't really like living things because living things are based biology where as computer systems are not. In computers we do not have the idea of cells, tissues, organs, organ systems, templated replication via DNA, metabolocic pathways, etc. Of course things are always alike along some axis, but generally the job of biology is to create the structure for the brain which is the real adaptive organ. Our computer systems do not operate like the brain at all.
When studying Self Replicating Software, does it really make a difference if the software is coded in DNA or in electrical potentials? -- Project2501
See Also: Evolving System
See original on c2.com