"In our study of program design, we have seen that expert programmers control the complexity
of their designs with the same general techniques used by designers of all complex systems.
They combine primitive elements to form compound objects, they abstract compound objects to
form higher-level building blocks, and they preserve modularity by adopting appropriate
large-scale views of system structure. In illustrating these techniques, we have used Lisp as
a language for describing processes and for constructing computational data objects and processes
to model complex phenomena in the real world.
However, as we confront increasingly complex problems, we will find that Lisp, or indeed
any fixed programming language, is not sufficient for our needs. *We must constantly turn