See also PausefulProgramming
accounted for sparse speciation events in the fossil record with this hypothesis. It claims that when populations adapt to their niches, they don't evolve as much. But then, some geologic change isolates and subjects some of the population to selection pressure, spurring new adaptations. Thus the equilibrium and the punctuation.
I am not sure that captures Gould and Eldredge correctly - the discussions I have seen imply that they actually consider there to be times when the change rate increases in a species' variation, as opposed to PE being merely an artifact of the rapid spread of a new species across its predecessor's niche.
Programming, especially programming with refactoring, feels like that sometimes. There are times when memes furiously split and recombine, until you get a stable object structure that accommodates changes. Then you come across a change that just refuses to fit into the existing structure, and away we go, refactoring again.
Of course, the theory as it applies to evolution is controversial. Not all biologists agree, and in any case it is arguably a quantitative rather than qualitative insight.
As I understand it, the XP school believe in continuous refactoring rather than occasional massive reworkings. This would map more closely onto gradual theories of evolution.
It's an interesting metaphor, though. Presumably UnitTest
s play the role of the environment, which continually changes, and pass/fail acts as selection pressure. The code is tested against the UnitTest
s continually rather than waiting for the major upheaval of a beta test or release. Mass extinctions will occasionally occur in both models.
I think this emphasises the danger some see in XP, of local maxima and PathDependency?
. These often prevent evolution from reaching "ideal" solutions.
Unless the environment is static, there are no ideal solutions.
Should engineers be worried about ideal solutions in the first place? You only need to be GoodEnough
I believe, the biological "solution" to the problem of local maxima is to
- have lots of individuals, so they won't get all caught in the same local maximum and
- keep the system's parameters and requirements changing all the time, so local maxima tend to lose their value to the population.
The latter is certainly also true in software projects, XP or not. However, I don't quite see how the first mechanism relates to XP. -- HaskoHeinecke
Perhaps the first mechanism relates to different teams coming up with different solutions, even if both teams are using the same general process.
I see the first as an argument for patterns over component reuse. For example, in an ever-changing networking environment, it is better
to have everyone and their brother reimplement remote procedure calls. This keeps alive a broad population of ideas of how to do remote procedure calls.
In a static niche, however, reuse makes sense. For instance, within the niche of C++ variable-sized arrays, standardization on the StandardTemplateLibrary
vector class makes sense.
Taking the metaphor further, a pattern is a species. An implementation is an individual. Creating a population of cloned individuals is not healthy. Evolution occurs; programmers create individuals, influenced by individuals created earlier by themselves or by other programmers.
I am under the impression that StephenJayGould
was more concerned about describing the phenomena - periods of rapid change followed by periods of relative stability - than attempting to explain why it happened.
Holland also demonstrated PunctuatedEquilibrium
in his GeneticAlgorithm
experiments, in what could be a related mechanism. Holland showed that mutations that affected certain key "genes", as opposed to affecting "non-coding regions", would result in a period of rapid change as the gene modifications propagated through the system. As the "genes" rearranged themselves into a new configuration, the system would eventually come back into relative equilibrium.