I was watching a BBC2 programme last night on the subject of Darwin's theory of evolution and how there are groups who propose that it is totally inadequate. These groups are motivated by religious belief. However, they have used scientific methods (whether they've used them correctly is not necessarily relevant) to debunk the idea that evolution is a theory which actually explains the development of life on our planet. Darwin himself pointed out the hole in his theory. If it can be shown that some complex entity could not possibly have developed piecemeal, then it can't have evolved via a series of small mutations. Evolution totally relies on these things:
- Random mutation
- The ability of a mutated creature to survive
- The natural selection of this mutated version, therefore...
- The increased fitness of this mutation such that it becomes the dominant form (or at least a part of the ancestry of the dominant form).
- No big changes
The arguments that the creationists - sorry, "Intelligent Design"ists put forward is that the criteria for evolution are simply not all met in nature. One argument they suggest is that random mutation is not possible - mathematically. This is probably nonsense, especially since there are clear examples in nature of species with common ancestry where some mutations are more advanced than others. The creationists point out that it's perfectly reasonable that some adaptation occurs, but not at the scale of an entire organism having evolved from something much much simpler. The second argument is the interesting one. It uses Darwin's own theoretical hole - can we find something so complex that it cannot have evolved in small stages? The creationists claim to have found a creature whose motor mechanism is reliant on 50 individual parts, which are so inter-reliant that they would have been useless had they evolved from 49 parts, or whatever. This idea is called irreducable complexity.
While the pro-evolution creationist-debunkers (i.e. the people with the counter-arguments to the counter-arguments) have been able to prove the flawed maths behind the probability argument, and have been able to demonstrate that there are subsets of the 50-element motor function "machine" of the supposedly irreducably complex creature that can work together, this debate over creation in total vs small incremental, fully viable, steps is still of great interest. I don't think it has been entirely resolved. One of the hardest things to explain, for me, is the fact that very different creatures, from supposedly very different families, seem to agree on things like "where an eye goes" or how a joint works. Or even the existence of joints. However, I can't believe in an intelligent designer or creator, so I'll have to believe in evolution. Ultimately, I think that the absence of an empirically discovered map of all the mutations that occurred means that there will always have to be a degree of belief.
That wasn't geeky? was it
We didn't get to the geeky part. I've been contributing posts on the blog of a friend recently. This friend is trying to use Agile software development to make some software. He keeps finding problems. Agile is a process of developing a piece of software by starting with a fully working program that does nothing and then adding, in small increments, things which surface as improvements as far as the user is concerned. Each increment should be only the work of a few hours and should result in a fully working piece of software. This is, in my head, akin to evolution. A small change occurs and then natural selection decides if it is to stay in the species (i.e. does it improve the species - if so, then it's more likely to survive and thus get propagating between generations and then become the dominant version of the species and so on). So, in software, the natural selection analog is whether the software still works and seems, to a user, to be any better than the software without the change.
It's not necessarily that dogmatic in Agile, as some changes may yield little or no user-oriented improvement, or may provide a feature that neither works, nor doesn't work. However, the Agile approach is very much based around evolution.
Yet, the natural instinct of a computer programmer is to act as a creator. I know that my programatic creature needs a heart. So I'll build a heart. Then I'll drop the heart into the creature and see if it works. This is akin to the intelligent design model. Something is so complex that it cannot be viably be created in a series of small tweaks. So, it should be designed and dropped in complete. Of course, the heart is a complex entity in its own right and would have a series of non-trivial connections to the rest of the entity, so building it would take a while and connecting it would take a while too. So to the "creationist" programmer, there will be long delays between different forms of the creature. These long delays could create costs and risks, and may also allow more room for confusion about how much is really needed of the entity when it is complete. This is why Agile programmers prefer to evolve.
So, is there a question?
I think there is. While for evolution, the idea of irreducable complexity may well be nothing more than a counter-argument, rather than a proof of the fallibility of Darwin's theory, or a proof of any alternative explanation, for software, there is a genuine issue. Are some things (albeit small things) of such a natural level of complexity that evolving them will only ever produce incoherent mid-way-products? If that's the case, then we cannot always make software in small increments. Alternatively, any small increments we make will be nothing more than waypoints on a way to a complex model that we've already designed. The mid-points serve no purpose then, except to prove that we're still busy and adding to the solution.
There's probably a lot of room for discussion on this. I have no answers of my own yet. I do know that a huge amount of design decision up front can be exceedingly wasteful, as things often look different in real life than they do on paper. I also know that a series of artificial mid-points, just to feign evolution, is probably not a good thing. Maybe the middle ground is the right place to go, but it can be hard to achieve.
Perhaps we all should pray to the Flying Spaghetti Monster for guidance.