When I went to OOPSLA last year, I missed AlanKay
'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 ChryslerComprehensiveCompensation
project, and those doing ExtremeProgramming
in particular. Listen to your program. DoTheSimplestThingThatCouldPossiblyWork
. 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 KentBeck
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 KnowledgeRepresentations
, 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 EgolessProgramming, 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. -- RonJeffries
That seems like EgoProgramming?
to me - if you're not your program, who are you? What's the difference between the accountant and the accounting? -- PeterMerel
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 ConstructiveInterference)
- 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. PartToWholeAsWholeIsToPart
might then be exemplified by things like the netscape site, or maybe the CPAN archive. -- PeterMerel
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 RichardDawkins for a discussion of memes. -- MichaelFeathers
One of the weird pieces of language that we used on C3 is sort of the GaiaHypothesis?
writ small - talking as if the system were alive (see HealthyCodeIsHappyCode
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?
That takes us onto the turf of DramaticIdentity
It reminds me of PeterCoad
'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 ExtremeProgramming
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? -- MichaelFeathers
Perhaps a garden is a better metaphor. [CategoryGardeningMetaphor]
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 ...
Interesting metaphor. However, to be coincident with SystemsAsLivingThings we would have to consider the gardener part of the garden. There is benefit in this. The gardener who assumes too much control of a garden may make something that is beautiful, but it may not be alive. Zen gardens are wonderful, but the rocks and raked stone will never surprise us. They will never change by themselves. A well manicured garden is more alive, but it still reflects the intentions of a single gardener. A garden with no gardener assumes a natural regulation. It will surprise us. We have to choose our garden. -- MichaelFeathers
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. -- DildarMarhas
Randomness is the foundation of novelty.
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. -- RalphJohnson
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 ;-) --EivindEklund
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 TupleSpace
within which you happen to conduct a good chunk of your life.
Switching horses, SteveGrand?
argues in CreationLifeAndHowToMakeIt?
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 SimCity
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. -- RobRix
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 SelfReplicatingSoftware, does it really make a difference if the software is coded in DNA or in electrical potentials? -- Project2501
See Also: EvolvingSystem