Abstracts - 2007
Building Robust Systems
Gerald Jay Sussman & Chris Hanson
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?
We have been designing our software to do particular jobs very well, as an extension of our past engineering practice. Each piece of software is designed to do a relatively narrow job. As the problem to be solved changes, the software must be changed. But small changes to the problem to be solved do not entail only small changes to the software. Software is designed too tightly for there to be much flexibility. As a consequence, systems do not evolve gracefully. They are brittle and must be replaced with entirely new designs as the problem domain evolves. This is slow and expensive.
Our engineered systems do not have to be brittle. The Internet has adapted from a small system to one of global scale. Our cities evolve organically, to accommodate new business models, life styles, and means of transportation and communication. Indeed, from observation of biological systems we see that it is possible to build systems that can adapt to changes in the environment, both individually and as an evolutionary ensemble. Why is this not the way we design and build most software? There are historical reasons, but the main reason is that we don't know how to do this generally. At this moment it is an accident if a system turns out to be robust to changes in requirements.
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, common practice of computer science and engineering actively discourages the construction of robust systems.
The goal of this work is the development of strategies for the design of robust systems, and linguistic and systemic support for these strategies. The key is the development of linguistic tools that encourage the designer to flexibly intermix strategies in the design of a program or system, without prematurely imposing an ontological commitment to a particular strategy or organizational structure.
 Harold Abelson, Don Allen, Daniel Coore, Chris Hanson, George Homsy, Thomas F. Knight, Jr., Radhika Nagpal, Erik Rauch, Gerald Jay Sussman, and Ron Weiss. "Amorphous Computing." In Communications of the ACM , 43 , 5, May 2000.
 Harold Abelson and Gerald Jay Sussman with Julie Sussman. Structure and Interpretation of Computer Programs. 2nd edition, MIT Press, ISBN 0-262-01553-0, (1996).
 Jacob Beal. Generating Communications Systems Through Shared Context. M.I.T. S.M. Thesis, also AI Technical Report 2002-002, January 2002.
 Richard Matthew Stallman. EMACS: The Extensible, Customizable, Self-Documenting Display Editor. M.I.T. Artificial Intelligence Laboratory Memo, AIM-519A (March 1981).
 Guy L. Steele Jr. The Definition and Implementation of a Computer Programming Language Based on Constraints. M.I.T. PhD Thesis, MIT Artificial Intelligence Laboratory Technical Report 595, (August 1980).
 Gerald Jay Sussman. "The Legacy of Computer Science." In Computer Science, Reflections on the Field, Reflections from the Field, pp.180--183, The National Academies Press, 2004.
 Ron Weiss, Thomas F. Knight, and Gerald Jay Sussman. "Genetic Process Engineering." In Cellular Computing, Martyn Amos editor, pp.43--73, Oxford University Press, 2004.