Butler W. Lampson
Hints for Computer System Design
Ninth ACM Symposium on Operating Systems Principles
in Operating Systems Review 17,5 (October 1983) pages 33-48.
Later republished, but with less satisfactory copy editing,
in IEEE Software 1,1 (January 1984) pages 11-28.
(C) 1983 ACM 0-89791-115-6/83/010/0033 $00.75
[BibTeX versions at end of page.]
WHY? | Functionality Does it work? |
Speed Is it fast enough? |
Fault-tolerance Does it keep working? |
WHERE? | |||
Completeness | Separate normal and worst case | Safety first Shed load End-to-end |
End-to-end |
Interface | Do one thing well: Don't generalize Get it right Don't hide power Use procedure arguments Leave it to the client Keep basic interfaces stable Keep a place to stand |
Make it fast Split resources Static analysis Dynamic translation |
End-to-end Log updates Make actions atomic |
Implementation | Plan to throw one away Keep secrets Use a good idea again Divide and conquer |
Cache answers Use hints Use brute force Compute in background Batch processing |
Make actions atomic Use hints |
Experience with the design and implementation of a number of computer systems, and study of may other systems, has led to some general hints for system design which are described here. They are illustrated by a number of examples, ranging from hardware such as the Alto and the Dorado to applications programs such as Bravo and Star.
There probably isn't a best way to build the system, [...]
much more important is to avoid choosing a terrible way.
From this experience come some general hints for designing successful
systems.
I claim no originality for them; most are part of the folk
wisdom of experienced designers. Nonetheless, even the expert often
forgets [...].
These [...] are just hints. Some are quite general
and vague; others are specific techniques which are more widely applicable
than many people know. [...] oversimplified [...] controversial.
Perfection is reached, not when there is no longer anything to add, but when there is no longer anything to take away. (A. Saint-Exupery)An interface should capture the minimum essentials of an abstraction. Don't generalize; generalizations are generally wrong.
@ARTICLE{ LampsonHints83, author = "Lampson, Butler W.", title = "Hints for Computer System Design", journal = "Operating Systems Review", publisher = "ACM", year = 1983, month = October, volume = 17, number = 5, pages = 33-48, note = "{\em Ninth ACM Symposium on Operating Systems Principles}. Later republished, but with less satisfactory copy editing, in {\em IEEE Software} 1,1 (January 1984) pages 11-28." } @ARTICLE{ LampsonHints84, author = "Lampson, Butler W.", title = "Hints for Computer System Design", journal = "IEEE Software", year = 1984, month = January, volume = 1, number = 1, pages = 11-28, note = "This is republished, with less satisfactory copy editing, from {\em Ninth ACM Symposium on Operating Systems Principles} in {\em Operating Systems Review} 17,5 (October 1983) pages 33-48." }
History: 1999.Mar.03 Noticed Butler now has it online. 1997.Jan.02 Written.