What about Computer and Software Design?
What is the state of exemplar-based design in the computer and software fields? I think a fair answer is that we are rather behind older design disciplines. We are coming along rather well in developing the art and the resources for exemplar-informed design. But many of our curricula do not yet emphasize it, and penetration into design practice is not yet high.
What Exemplars Do You Use?
Amateur designers and trained professionals in the older design disciplines differ substantially in their use of exemplars.
The amateur uses those exemplars he happens to have encountered in his own experience. The trained professional has been exposed to a far wider range: whole libraries of exemplars representing different eras, different styles, different schools of thought. At best, he has had expert-guided tours through these libraries, with his teachers highlighting the noteworthy characteristics and explicating differences.
Much design in the computer and software fields suggests the use of only exemplars encountered in personal experience; even our trained professionals are not studying the exemplars available.
Computers. Computer architectures reveal the profound influence of the machine on which the architect first had substantial programming experience. Thus the early DEC minicomputers have a strong flavor of the MIT Whirlwind; IBM’s System/360 is heavily flavored by the IBM 704 and 1401; the early microcomputers are clearly inspired by the DEC PDP-11.
One can also discern corporate memory—computers, unlike buildings, are designed by architects working within the implementing companies. They are more familiar, by explicit training and by informal culture, with their company’s predecessor machines than with those of competitors. The Intel microprocessors strongly reflect a particular corporate style.
Design by adaptation is common in this field. Successful computers breed families of compatible siblings and successors, usually designed by adding function to the earlier models.
Mass-Product Software. Products such as Microsoft Word have followed the design pattern of computers, with successive generations created by progressively modifying function and implementation. This has been well studied and documented by Lehman and Belady.3
Custom Application Software and Operating Systems. Historically, most custom application software and operating systems reflect chiefly the experience of their designers, rather than that of the whole discipline.
More recently, the documentation and teaching of patterns has provided cross-fertilization for the field. Gamma [1995], Design Patterns, is strong on data structures and component-level patterns; Buschmann [1996], Pattern-Oriented Software Architecture, deals with larger-scale, system-structure patterns. We need more descriptions of whole systems, explaining system concepts. By and large we have that for a few operating systems only.