22 February 2008
Gerald Jay Sussman
Computer Science and Artificial Intelligence Laboratory
It is hard to build robust systems: systems that have acceptable behavior over a larger class of situations than was anticipated by their designers. The most robust systems are evolvable: they can be easily adapted to new situations with only minor modification. How can we design systems that are flexible in this way?
Observations of biological systems tell us a great deal about how to make robust and evolvable systems. Techniques originally developed in support of symbolic Artificial Intelligence can be viewed as ways of enhancing robustness and evolvability in programs and other engineered systems. By contrast, the common practice of computer science actively discourages the construction of robust systems.
Robust designs are built on an additive infrastructure: there are exposed interfaces for attaching new functionality without serious disruption of preexisting mechanisms. Indeed, the ability to harmlessly duplicate a mechanism and then modify the copy to supply useful new functionality is one of the principal ploys appearing in natural evolution. What are the preconditions that support such augmentation? Can we engineers arrange our systems to be extensible in this way? Are there exploitable analogies between the techniques that we have created to make extensible artifacts and the mechanisms that we find in biological systems?
I will try to address these and related issues.
current theory lunch schedule