Humans have been managing the evolution of other species for tens of thousands of years, through the domestication of plants and animals. It forms the basis of the agriculture which underpins our civilizations. We manage evolution through ``breeding'', the application of artificial selection to captive populations.
Similar approaches have been developed for working with evolution in the digital domain. It forms the basis of the fields of ``genetic algorithms'' and ``genetic programming''. However, because digital evolution has not yet passed through its version of the Cambrian explosion, there exists the possibility to use a radically different approach to ``managing'' digital evolution.
Some questions frequently asked about software evolution are: How can we guide evolution to produce useful application software? How can we validate the code produced by evolution to be sure that it performs the application correctly? These questions reveal a limited view of how software evolution can be used, and what it can be used for. I will articulate a fairly radical view here.
Computer magazines bemoan the search for the ``next killer application'', some category of software that everybody will want, but which nobody has thought of yet. The markets for the existing major applications (word processors, spread sheets, data bases, etc.) are already saturated. Growth of the software industry depends on inventing completely new applications. This implies that there are categories of software that everyone will want but which haven't been invented yet. We need not only attempt to use evolution to produce superior versions of existing applications. Rather we should allow evolution to find the new applications for us. To see this process more clearly, consider how we manage applications through organic evolution.
Some of the applications provided by organic evolution are: rice, corn, wheat, carrots, beef cattle, dairy cattle, pigs, chickens, dogs, cats, guppies, cotton, mahogany, tobacco, mink, sheep, silk moths, yeast, and penicillin mold. If we had never encountered any one of these organisms, we would never have thought of them either. We have made them into applications because we recognized the potential in some organism that was spontaneously generated within an ecosystem of organisms evolving freely by natural selection.
Many different kinds of things occur within evolution. Breeding relates to evolution within the species: producing new and different, possibly ``better'' forms of existing species. However, evolution is also capable of generating species. Even more significantly, evolution is capable of causing an explosive increase in the complexity of replicators, through many orders of magnitude of complexity. The Cambrian explosion may have generated a complexity increase of eight orders of magnitude in a span of three million years. Harnessing these enormously more creative properties of evolution requires a completely different approach.
We know how to apply artificial selection to convert poor quality wild corn into high-yield corn. However we do not know how to breed algae into corn. There are two bases to this inability: 1) if all we know is algae, we could not envision corn. 2) even if we know all about corn, we do not know how to guide the evolution of algae along the route to corn. Our experience with managing evolution consists of guiding evolution of species through variations on existing themes. It does not consist of managing the generation of the themes themselves.
As a thought experiment, imagine being present in the moments before the Cambrian explosion on Earth, and that your only experience with life was familiarity with bacteria, algae, protozoa and viruses. If you had no prior knowledge, you could not envision the mahogany trees and giraffes that were to come. We couldn't even imagine what the possibilities are, much less know how to reach those possibilities if we could conceive of them.
Imagine for a moment that a team of Earth biologists had arrived at a planet at the moment of the initiation of its Cambrian explosion of diversity. Suppose that these biologists came with a list of the useful organisms (rice, corn, pigs, etc.), and a complete description of each. Could those biologists intervene in the evolutionary process to hasten the production of any of those organisms from their single celled ancestors? Not only is that unlikely, but any attempts to intervene in the process are likely to inhibit the diversification and increase in complexity itself.
If the silk moth never existed, but we somehow came up with a complete description of silk, it would be futile to attempt the guide the evolution of any existing creature to produce silk. It is much more productive to survey the bounty of organisms already generated by evolution with an eye to spotting new applications for existing organisms.
Evolution would not be an appropriate technique for generating accounting software, or any software where precise and accurate computations are required. Evolution would be more appropriate for more fuzzy problems like pattern recognition. For example, if you get a puppy that you want to raise to be a guard dog, you can't verify the neural circuitry or the genetic code, but you can tell if it learns to bark at strangers and is friendly to your family and friends. This is the type of application that evolution can deliver. We don't need to verify the code, but verification of the performance should be straightforward.