Butler W. Lampson. Hints for computer system design. ACM Ninth Symposium on Operating Systems Principles, in Operating Systems Review 17, 5 (October, 1983) pages 33-48.
by J. H. Saltzer, February 14, 1996, revised May 13, 1997 and May 18, 1999
This paper may be read either at the beginning or at the end of the term; it is actually a good idea to read it twice.
When read at the beginning of the term, this paper can be discussed only superficially, because the motivation for many of its suggestions is lacking. Nevertheless, even a beginning reader can sense that there is some substance to the paper.
This is a good paper on which to practice first nibbling around the edges...
This paper provides an introduction to "system thinking". What does that mean? (Relate to complexity lecture, methods of coping, and the general method of looking at the whole picture.)
Can you identify any of the hints as examples of the methods of coping with complexity discussed in lecture?
plan to throw one away --> finding the right modularity, design for iteration keep secrets --> abstraction Divide and conquer --> modularity Do one thing well --> functional modularity Use brute force --> use brute force
Most students will have absorbed the slogans without much comprehension of their subtleties; the thing to do now is to try to remember them for what is coming. One approach is to try to identify examples of the hints in designs that people are familiar with, or that were in the one or two case studies they have seen so far.
When read at the end of the semester, or for the second time, the best attack is to ask the class to help you compile a list of examples of Lampson's hints that appeared in the case studies during the term. There are a couple of ways to approach this:
1. Make it concrete. What is the {best, most obscure} example you can think of for slogan X that we have seen this term?
2. Look for connections. Where is Lampson restating things we have read (perhaps said quite differently) in other wisdom papers?
wisdom Lampson Do the right thing --> Get it right Worse is better --> Keep it simple Chocolate --> Safety first plan to throw one away --> plan to throw one away
Is there a debate between abstraction and >open design? The hint is "Keep secrets". But open design teaches us to expose everything. Start with examples of ebstraction:
From Frans Kaashoek: Another fun thing to do is to construct a list of failed computer systems, and figure out why they failed. In some cases the failed systems "violated" some of Butler's hints; in other cases, the reason of failure is more complicated. Nevertheless, making such a list is an interesting exercise.
From Dawson Engler: A possibly missing hint: use indirection. Go through an intermediary to an object. Examples:
Aside: Is this paper mistitled? Just what is a hint, anyway?
See Hints versus Caches.