Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

(OT) Evolutionary Design??

by Anonymous Monk
on Oct 30, 2003 at 17:17 UTC ( #303332=perlmeditation: print w/replies, xml ) Need Help??

"In the broadest sense, evolution is merely change, and so is all-pervasive; galaxies, languages, and political systems all evolve. Biological evolution ... is change in the properties of populations of organisms that transcend the lifetime of a single individual. The ontogeny of an individual is not considered evolution; individual organisms do not evolve. The changes in populations that are considered evolutionary are those that are inheritable via the genetic material from one generation to the next. Biological evolution may be slight or substantial; it embraces everything from slight changes in the proportion of different alleles within a population (such as those determining blood types) to the successive alterations that led from the earliest protoorganism to snails, bees, giraffes, and dandelions."
(Douglas J. Futuyma in Evolutionary Biology, Sinauer Associates 1986)
Evolutionary design is a term that is bandied about quite liberally in software development circles these days. Very often, but not always, reference is made to biology. The implication is that we are borrowing terms, concepts, and principles from evolutionary biology and somehow applying them to the software development process. If biological evolution can produce the rich, varied, and complex designs we see around us everyday in the natural world, it must be powerful and good. And the idea of harnessing some of this power in our design and development process sounds like a good idea. Right?

But the fact is that all these new "evolutionary" paradigms of development have nothing whatsoever to do with biological evolution. If we use the term evolution in its broadest and most trivial, all pervasive sense then sure, software evolves. But biological evolutionary theory is not just about descibing the patterns present in the history of life, it is also about the process that drives and creates those patterns.

The fundamental process in biological evolution is that of natural selection. It is very important to realize that biological evolution is not something that applies to an organism. Organisms do not evolve. A catepillar does not evolve into a butterfly --- this is a process of development (ontogeny) and the catepillar is already designed to develop (or metaporhose) into a butterfly. The complexity of the butterfly already exists within the simpler catepillar.

Populations of organisms evolve across generations provided that they have heritable variation in fitness. Two crucial elements are key here: populations and variation. These elements lie at the heart of biological evolution. Without them, there is no evolution (there may be change, but not evolution).

Yes, biological evolution is incremental and iterative, but that does not mean that any other incremental and iterative process is like biological evolution in any sense of the process of evolution.

Why am I bringing this up? Partially just as a rant, but don't stop reading just yet, it is more than that. I am not saying that current, so-called evolutionary methodologies don't work, or are bad in any way. But if these methods do work and do have benefits, we gain nothing by mislabelling them as evolutionary (except marketing hype).

To begin with, what would a more realistically evolutionary methodology look like? Well obviously we would want to have a hand in guiding the process to arrive at a particular goal. There is something in human-nature interaction which looks like this: artificial selection (selective breeding programs) in the agricultural industry.

In an evolutionary sense, a cow only needs to produce the minimal amount of milk required to rear its young to a certain age. Excess milk production is not something that is likely to evolve naturally as it doesn't contribute to the successful generation of new cows. In fact, in a natural setting, cows that overproduce milk will most likely be selected against over time.

But, farmers want cows to produce more milk and so step in with artificial selection. Cows will vary in their milk production, and farmers can use that as a selective criteria to determine which cows will produce offspring. Perhaps only the top 10% will be bred for the next generation. Over the course of several generations, we have herds with higher milk production. This is a man-made process that does mimic evolution in important ways.

Are our evolutionary strategies of software design anything like this? The answer is a resounding No. We do not work with populations of designs, or populations of prototypes, select the best (according to some criteria) and create a second generation of designs or prototypes based on these.

We may start out with an extremely small population of design ideas at the very outset, in the brainstorming sessions. But we rapidly settle on one or perhaps two early models. From here, we start building the simplest organism we can and slowly add bits and pieces, possibly changing earlier design decisions in the process, as we develop this organism to meet the requirements. We make small changes to one organism, stop often, retest, refactor, and redesign as we go (incremental, iterative). We do not create new populations of varying prototypes at each stage and select the best for further generations.

Once we look at how evolution really works, and then at how we really work, there is simply no basis for comparison. We do not work with populations of prototypes (organisms). There is no variation of fitness.

To put it simply, while all this talk of evolutionary design sounds impressive, I argue that not only is our process decidedly not like biological evolution, we wouldn't want it to be! Biological evolution takes time, and lots of it. Even artificial selective breeding programs generally take a lot of time for relatively small gains. The agricultural industry (which obviously works with biological creatures) is pouring vast amounts of money into research in genetic manipulation so it can produce new products without having to go through an evolutionary process.

Let's consider another aspect, where principles of evolution might be useful in describing software: The actual environment where software lives. We have populations of operating systems, text editors, graphics programs and the like. There is variation within and among these populations and this software interacts with its environment (hardware, other software, users). And, just like natural selection in the biological world, the selective processes in the software world do not guarantee anything about the quality of the designs found. In nature it is not the best designs that flourish, it is the designs that reproduce better than the competitors. Microsoft Word is not necessarily a superior word processor to WordPerfect or WriteNow, or a myriad of others, in any design or engineering sense. It may not even be any better at any of its designed word processing goals than its competitors. But it is probably the most successful reproducer. Evolutionary success does not imply superior design. Superior designs (by one measure or another) fail in the marketplace all the time.

So, why would we want our software development process to mimic evolution? Evolution is a slow process that does not lead to superior design, merely superior reproduction. The design process is not evolutionary, nor should we want it to be.

Remember, none of this says anything at all about whether incremental and iterative design and testing is good or bad (good I think). This has just been about disentangling what we do from the conceptual mess underlying what we think and say we do.

I'm sure some will disagree, I hope some disagree strongly. That will be a good thing. I am not interested in being right or wrong, I am interested in understanding what it is we do. It is my suggestion that the process, principles, and mechanisms of evolutionary biology are poorly applied to what it is we do as designers and programmers.

20031030 Edit by castaway: Changed title from 'Evolutionary Design??'

20031030 Edit by castaway: Changed title from 'Evolutionary Design??'

Replies are listed 'Best First'.
Re: (OT) Evolutionary Design??
by jZed (Prior) on Oct 30, 2003 at 18:28 UTC
    Some thoughts:

    * Evolution as a concept has been borrowed from biology into other fields with bad results before. The notion of "cultural evolution" in anthropology led to 800 tons of bullshit based on the idea that human history is a continuous evolution from "primitive" cultures to "advanced" cultures. Sure, we can say that Black and Decker makes better drill bits than Upper Paleolithic tool makers, but does McDonald's make better food? Does Pat Robertson make better religion? Does Smith and Wesson make better weapons (judged societally rather than techncally)? Does Brittany Spears make better poetry? And is a so-called "primitive" or "stone age" culture like the Australian Aboriginies the result of 40,000 years without cultural evolution or of 40,000 years of continuous change in areas that are not measurable by our current methods?

    * I think the distinction you make between individual and population is critical for the concept of evolution but I'm not sure what constitutes "an individual" and "a population" in the software world. Suppose an individual is a concrete instance of an abstract pattern. Individual change would be what happens when the instance is run, population change would be what happens over the course of changes to the software that produces the instance.

    * Or suppose "population" is the sum of all thoughts of all programmers and "individual" is one programmer's thoughts. The process by which an idea like object-oriented-programming enters the population is related to how it enters the code of individual programmers but is a bigger question. The fact that an individual godzilla can still use perl4 doesn't say much about how the rest or our code has changed since perl5. (Maybe we should abandon the notion of software evolution in favor of software creationism - the gods gave us perl5 and it was good. :-)

    * I like your analysis of Word as a better reproducer, but there are other ways of measuring the survival and reproduction of ideas. Word processors as a population adapted to the changing software ecosystem with the popularity of the web by including things like hypertext linking, so did Word as an individual.

    * Metaphors, are by definition metaphors. They highlight certain features of similarity between things and background others. When we say "that surgeon is a butcher", we don't mean he sells human body parts for food, we mean he has no fine-control in his cutting methods. To think that every feature of biological evolution will map onto every feature of software evolution is not helpful. What's helpful is pointing out the places they diverge and converge. In that sense, your posting is a necessary thing to make the use of the word helpful. So thanks!

Re: (OT) Evolutionary Design??
by hardburn (Abbot) on Oct 30, 2003 at 18:25 UTC

    Biological evolution takes time, and lots of it. Even artificial selective breeding programs generally take a lot of time for relatively small gains.

    Only because the time between generations could be lengthy. A selective breeding of insects could go relatively quickly, since each generation will only take a few months, weeks, or even days.

    Some of the genetic algorithms (a super search for that should bring some interesting nodes) could take a few milliseconds to go through a single generation. So in this case, the breeding program could take no more than a few minutes of CPU time.

    I do agree, though, that this "evolutionary" design isn't necessarily going to produce the best designs. In the example of genetic algorithms, it could have been that a combination which would have produced a great solution in a few more generations, but was reaped away because it didn't solve the problem very well right now. Not only that, but since this is all happening so fast that its difficult to analyze each generation by a human, it is likely the programmer will never see the potential that solution had. If anything like natural selection can be applied to software design, it must be a conscious effort on the part of the programmer.

    I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
    -- Schemer

    : () { :|:& };:

    Note: All code is untested, unless otherwise stated

Re: (OT) Evolutionary Design??
by tilly (Archbishop) on Oct 30, 2003 at 18:53 UTC
    I like your post, if for no other reason than the fact that you are one of the few people who throws around the term "evolution" and actually understand what biologists mean.

    That said, I agree that few small pieces of software "evolve" in any meaningful way. However large ones often do, for exactly the reasons that you describe near the end. As an example, read this description by Linus Torvalds of what Linux development looks like.

    And a design note. A large fraction of people's misunderstandings about evolution come down to their trying to say that evolution should be good or right. It isn't. It is about what actually happens and is effective. It doesn't matter whether we want to see evolution happen, evolution is what is going to happen, ideas that can reproduce themselves will become common. You can argue that it shouldn't, you can fight it, you can cry about it, you can accept it. Doesn't matter. It happens anyways.

    For a classic essay on this, read Lisp: Good News, Bad News, How to Win Big, which gave us the phrase, Worse is Bettter. (The words "worse" and "better" come from describing the same thing by two different sets of norms.)

      I like your post, if for no other reason than the fact that you are one of the few people who throws around the term "evolution" and actually understand what biologists mean.
      Well, I do actually have a background in both evolutionary theory as well as the philosphy of biology.
      That said, I agree that few small pieces of software "evolve" in any meaningful way. However large ones often do, for exactly the reasons that you describe near the end. As an example, read this description by Linus Torvalds of what Linux development looks like.
      Yes, and I guess what I am suggesting is that evolution is something that may be happening later in the life cycle of software, but it doesn't give us useful insights into the design and early development stages.
      For me the term evolution in the linked Linus Torvalds letter is used in the broader sense. That one that simonm has reminded us.
Re: (OT) Evolutionary Design??
by Roy Johnson (Monsignor) on Oct 30, 2003 at 18:16 UTC
    I used to be the kind who would disagree vociferously, but I've evolved since then.

    The sense in which program development is similar to evolution is somewhere between the level of detail you describe here and the very general "things change". The driving imperative in evolution is "adapt or perish". Of course, that's true of anything geared to a marketplace, and evolutionary design might just as well be termed "market-driven design".

    According to this article on the topic, "evolutionary design" is meaningful as a contrast to "planned design". In the latter, you design, then you code to spec. In the former, both are ongoing processes. If you object to the use of "evolutionary", you might prefer Just-In-Time programming for a similar concept: programs are written and changed in response to demand, rather than in far-sighted anticipation of it.

Re: (OT) Evolutionary Design??
by simonm (Vicar) on Oct 30, 2003 at 18:36 UTC
    While I understand the point the OP is trying to make, I think it's a tempest in a teapot, because the word "evolution" has a broader range of meanings than that indicated by the phrase "biological evolution."

    Sure, in the context of modern biology, evolution means something very specific: population dynamics based on genetic inheritance with mutation and selection. But step outside of the field and the rules start to blur. For example, you can look at changes in languages as a type of cultural evolution, with populations, inheritance, mutation, and selection -- even though there's no physical "genetic material" being exchanged.

    More generally, the word "evolution" still has a raft of meanings that predate modern biology. Miriam-Webster gives us a sense:

    1: one of a set of prescribed movements
    2 a: a process of change in a certain direction : UNFOLDING b: the action or an instance of forming and giving something off : EMISSION c (1) : a process of continuous change from a lower, simpler, or worse to a higher, more complex, or better state : GROWTH (2) : a process of gradual and relatively peaceful social, political, and economic advance d: something evolved
    3: the process of working out or developing
    4 a: the historical development of a biological group (as a race or species) : PHYLOGENY b: a theory that the various types of animals and plants have their origin in other preexisting types and that the distinguishable differences are due to modifications in successive generations
    5: the extraction of a mathematical root
    6: a process in which the whole universe is a progression of interrelated phenomena

    Given that we already have a term for software development that's specifically intended to echo biological evolution, "genetic programming" or "genetic algorithms," I don't see what we would gain from restricting the use of the word evolution in discussions of software development.

      While I understand the point the OP is trying to make, I think it's a tempest in a teapot, because the word "evolution" has a broader range of meanings than that indicated by the phrase "biological evolution."
      I realize "evolution" has many and varied meanings, the definition I gave as the lead in quote says as much. But, if we are just using "evolution" in the broader generic sense, why aren't these new methodologies labelled like: "The Changing Method of Software Design", or "The Working Out Approach to Software Design", or "The Unfolding Design Methodolgoy" or something similar?

      I'll tell you why, it is precisely because of the biological connotations of the term 'evolution', including both the apparent scientific legitimacy of the theory, and the seemingly successful designs seen all around us as a result of biological evolution. And, the wrong, but all too common, notion that biological evolution is progressive.

        ... why aren't these new methodologies labelled ... "The Working Out Approach to Software Design"...?

        Poor marketing; that sounds too much like a health and fitness book, perhaps featuring chapters on "interface calisthenics", "bench press your test suite", "debugging endurance", and so forth.

        ... "The Unfolding Design Methodology" ...

        That one at least sounds lyrical.

        Again, I understand the point you're making, but I think you're painting with an overly broad brush.

Re: (OT) Evolutionary Design??
by Elgon (Curate) on Oct 30, 2003 at 18:33 UTC


    A very interesting and impassioned post, much of which I agree with, however I gently take issue with a couple of points:

    • It is entirely possible to develop and 'grow' algorithms through a process which models evolution through natural selection. This has been demonstrated albeit at a simple level here in the monastery. A search should turn up the relevant threads. I know of no actual production code which has been developed using this method, so calling it a development methodology is a tad premature.
    • It could be argued that any development methodology where independent teams develop similar modules of code in parallel (population) and then compare their code (variation) against predetermined criteria before reworking the code in the light of the lessons learned (evolution) bears a likeness to the biological process, the major difference being that the fitness criteria are not determiined by the environment but by the observer.
    • I would disagree slightly with your point about evolution merely producing better reproducers: This is the generalised result of the types of evolutionary pressure found in nature, however if the criteria used to judge the fitness of an algorith or module are correctly chosen, this does not necessarily need to be the result. As a further point, I would add that Word is the dominant member of the population because of the pressures of the market, which have been manipulated, quite apart from the software development process.

    Though provoking, none the less and I wholeheartedly agree with your crusade against the marketroid crud which can be used to sell software.


    Please, if this node offends you, re-read it. Think for a bit. I am almost certainly not trying to offend you. Remember - Please never take anything I do or say seriously.

      It is entirely possible to develop and 'grow' algorithms through a process which models evolution through natural selection. This has been demonstrated albeit at a simple level here in the monastery. A search should turn up the relevant threads. I know of no actual production code which has been developed using this method, so calling it a development methodology is a tad premature.
      I totally neglected, though intended, to bring up evolutionary programming in the sense of genetic algorithms and the like. These do try to mimic important aspects of biological evolution and are, IMHO, quite properly associated with biological evolutionary concepts. Note, read some papers in genetic algorithms and methodology and the researchers nearly always discuss the particular mechanisms they are trying to model, and how their models differ from models in evolutionary biology.

      But no one in those fields is even suggesting that genetic algorithms could be usefully applied in the design and implementation of even a simple text editor. At least not at the present state of the field.

      I was only referring to the use of evolutionary principles in the larger software design and development methodologies. That is an important clarification, thanks!

Re: (OT) Evolutionary Design??
by pg (Canon) on Oct 30, 2003 at 23:50 UTC

    Not all the human plans make sense, but we will never stop thinking and trying. It is that 0.1% hope that attracts us, and actually allows us to be successful.

Re: (OT) Evolutionary Design??
by artist (Parson) on Oct 30, 2003 at 18:21 UTC
    Nice..but why Anonymous?
      I fail to see what my name has to do with the issue at hand. If this were posted by one of the monks on the Worst Nodes of all time, or conversely, on the Best Nodes of all time, would that have anything at all to do with the content of this post? More interestingly, would it make any difference in the way you form an opinion of this same content?
        If you have done work previously and shared with us, I can see the article in the light with your other work. I per say, dont' build opinion about the content on the merit of the user, but it helps me to see the perspective.

        It also helps me to track the node and build better association about the content. If you were to comment further about this over here or in some other thread, I can see continuation easily.

      Geesh, I'm pretty happy when other Anonymonks post good stuff. That way, you might confuse my cruft with their, well, good cruft.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlmeditation [id://303332]
Approved by HyperZonk
Front-paged by bart
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (1)
As of 2018-08-18 19:39 GMT
Find Nodes?
    Voting Booth?
    Asked to put a square peg in a round hole, I would:

    Results (186 votes). Check out past polls.