Does the Darwin Theory Match Computer Programming? (Introduction)
Interesting exerpt from a philosopher of computer theory: A Diagnosis of the Failure of Darwinism: - Repeatedly, we have seen that even if gene duplication can make all the parts of a complex system simultaneously available, Darwinism cannot provide credible solutions to the problems of coordinating these parts and ensuring their interface compatibility. - From my perspective as a teacher of computer programming, this limitation of Darwinism as a problem-solving strategy is surprising. First, consider the analogous problem of coordinating a program's instructions. As programs become more complex, it becomes virtually impossible to get them to work if they are written from the bottom-up, one instruction at a time. With so many details, it is highly likely that some critical task is specified incompletely or in the wrong order. To avoid such errors, programmers find it essential to use top-down design. Top-down design is a problem-solving strategy that begins with an abstract specification of the program task and then breaks it down into several main sub-problems, each of which is refined further into its subproblems. This strategy is epitomized by such things as recipes, where the task is broken down into ingredients and utensils (initialization), and the mixing and cooking of the ingredients (processing), and a specification of what to do when the dish is ready (finalization). The same approach is clear in the instructions to build "partially assembled" furniture, such as a bookcase. First, the assembly of the bookcase is reduced to its major tasks, constructing the frame, back, and shelves. Then each of these tasks is specified in detail. At every level, the order of the tasks is important; for example, the back and the shelves cannot be installed until the frame is complete. A quality top-down design is sensitive to the proper placement of tasks, ensuring that given task is not omitted, redundantly repeated, or performed out of sequence. In this way, top-down design facilitates the proper coordination of problem-solving modules. Unfortunately, natural selection cannot implement top-down design. Natural selection is a bottom-up atomistic process. Tasks must be solved gradually, independent from one another. There is no awareness of the future function of the assembled system to coordinate these tasks. If even intelligent agents (experienced programmers) require top-down design to solve complex problems, it is tendentious to suppose that unintelligent selection can solve problems at least as complex without the aid of top-down design. In fact, even with top-down design, programmers find that it is necessary top do two levels of testing to produce a functional program. One level, unit testing, tests the function of a module in isolation from the whole program. The other level, integration testing, ensures that when all the modules are assembled, they interact in such a way as to solve the overall problem .Both kinds of testing are needed: it is a fallacy of composition to argue that since all the part of a system work, the assembled system will also work. (Taken from Angus Menuge, "Agents Under Fire".)