Great Books

Software Careers Fall 1997 Dr. Dobb's Journal

by Gregory V. Wilson


Greg is the author of Practical Parallel Programming (MIT Press, 1995) and coeditor with Paul Lu of Parallel Programming Using C++ (MIT Press, 1996). Greg can be reached at gvwilson@interlog.com.
My programming style was largely shaped by Kernighan and Plauger's Software Tools in Pascal and Jon Bentley's Writing Efficient Programs. On the other hand, I have friends who swear by Abelson and Sussman's Structure and Interpretation of Computer Programs, Stevens' Unix Network Programming, or Petzold's Programming Windows. A few months ago, I began wondering what the authors of these books themselves read. I've enjoyed every book by Brian Kernighan that I've ever read, and would be willing to at least skim through anything he'd recommend. What about Stewart Brand, whose How Buildings Learn taught me more about how programs evolve and how to plan for their evolution than any software engineering text I'd ever read? What does he read, and why?

Consequently, I dredged up e-mail addresses for people whose work or writings I thought had influenced computer science. I put about 50 people on my list, including all Turing Award winners, as many of the industry movers and shakers as I could find addresses for, and a few random names suggested by friends. I sent e-mail asking them what computing-related books they had enjoyed most or had influenced them most. The 17 individuals listed in Figure 1 were kind enough to reply with specific titles (except for Alan Cooper, who pointed me to his online annotated bibliography); Douglas Hofstadter sent me a one-liner saying, "Too busy;" and Bill Gates' secretary's secretary sent me a message that began, "Dear Dr. Gregory V. Wilson, The Chairman is grateful for your input!" (okay, I'm exaggerating a bit, but that was its tone).

When the flurry of e-mail died down, I collated the lists I'd been sent (see Table 1). The first surprise was that of the 91 specific titles that were mentioned, only 11 received more than a single vote. Of those, only four (Knuth's Art of Programming, Hennessy and Patterson's Computer Architecture, Minsky's Computation, and Bentley's Programming Pearls) are "hard core" computing. Even more surprising, several people didn't include any computing books on their list at all.

My second mailing therefore asked people whether they thought there were fewer "Great Books" (a term I deliberately left undefined) in computer science than in other disciplines, and if so, why? The replies I received suggested several possibilities. Andrew Tanenbaum suggested that computer science actually isn't any different from other sciences; he felt that if I'd asked chemists for lists of their favorite books, they wouldn't have agreed much either. However, I used to work with computational physicists, and know that there are some "classic" texts in the sciences-the Feynman Lectures on Physics, for example, or Shannon's original monograph on information theory.

A second explanation, thanks to Steve McConnell, is that as computer science becomes more specialized, it's harder for any one book to command a large audience. When I commented on this to my brother, he asked whether it wouldn't have therefore been better to ask people about their favorite programs, rather than their favorite books. After all, people only read books once, or at most a few times, but use word processors, operating systems, and the like thousands upon thousands of times. If I'd mailed to 50 musicians, I would probably have asked for their favorite composers, pieces, or records, rather than for their favorite writers on music. He has a good point, but given how few good programs are out there, and how infrequently programmers read each other's source code, my guess is that the responses would have been pretty thin.

There is one other explanation for the apparent scarcity of "Great Books" in computing: Perhaps the fortune tellers actually got it right for once- computers have made books obsolete. Several respondents suggested that computing has been changing so rapidly that most books-even useful, well-written ones-become obsolete too quickly to acquire "Great Book" status. For example, UNIX owes much of its success to the crisp, clean prose of The C Programming Language, Software Tools, and The Unix Programming Environment. However, like political tracts from a century ago, these books seldom interest present-day readers, for whom many of the technical points are either obvious (in the mathematician's sense of a difficult problem that has been worked out for you) or irrelevant.

So what must a computing book be to be considered great? Timelessness is important: Neither the mathematics in The Art of Programming nor the observations on the (mis)management of software projects in The Mythical Man-Month show any rust. Economy of effort seems to matter as well: The Elements of Style, A Pattern Language, Hennessy and Patterson's Computer Architecture, and Bentley's books (all of them, not just the Programming Pearls series) are all about getting things right the first time.

Finally, a sense of wonder is also an asset, as evidenced by Godel, Escher, Bach: An Eternal Golden Braid and Through the Looking Glass. Maybe what we're all really looking for is something that gives us the feeling that I used to get reading Isaac Asimov's science essays-the feeling that the universe is wonderful and actually makes sense to someone.

Books Mentioned

Abelson, Harold, Gerald Jay Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs, Second Edition. MIT Press, 1996. ISBN 0262011530.

Victor Basili
Gordon Bell Tim Berners-Lee Stweart Brand Fred Brooks Nolan Bushnell Alan Cooper A.K. Dewdney Jim Gosling Brian Kerninghan Steve McConell Burton Smith William Stallings Guy Steele Andrew Tanenbaum Edward Tutfe Gerald Weinberg
Figure 1: Individuals who replied to my informal survey.
Alexander, Christopher, Sara Ishikawa, and Murray Silverstein. A Pattern Language: Towns, Buildings, Construction. Oxford University Press, 1977. ISBN 0195019199.

Bentley, Jon Louis. More Programming Pearls: Confessions of a Coder. Addison-Wesley, 1988. ISBN 021118890.

---. Programming Pearls. Association for Computing Machinery, 1986. ISBN 0201500191.

---. Writing Efficient Programs. Prentice Hall, 1982. ISBN 013970251.

Boehm, Barry W. Software Engineering Economics. Prentice Hall, 1981. ISBN 0138221227.

Brand, Stewart. How Buildings Learn: What Happens After They're Built. Penguin USA, 1995. ISBN 0140139966.

Brooks, Frederick P., Jr. The Mythical Man-Month: Essays on Software Engineering. Addison-Wesley, 1995. ISBN 0201835959.

Carroll, Lewis. Alice in Wonderland/Through the Looking Glass. Smithmark Publishing, 1996. ISBN 0831766948.

Author Title Votes
Donald Knuth The Art of Programming 5
Fred Brooks The Mythical Man-Month 4
Christopher Alexander A Pattern Language 3
Douglas Hofstadter Godel, Escher, Bach: An Eternal Goldern Braid 3
Jon Bentley Programming Pearls 2
Barry Boehm Software Engineering Economics 2
Tom DeMarco Peopleware 2
Hennessy and Patterson Computer Architecture 2
Marvin Minsky Computation: Finite and Infinite Machines 2
Strunk and White The Elements of Style 2
Lewis Carrol Through the Looking Glass 2
Figure 2: Favorite Books.
Demarco, Tom and Timothy Lister. Peopleware: Productive Projects and Teams. Dorset House, 1987. ISBN 0932633056.

Hofstadter, Douglas R. Godel, Escher, Bach: An Eternal Golden Braid. Vintage Books, 1989. ISBN 0394756827.

Kernighan, Brian W. and P.J. Plauger. Software Tools in Pascal. Addison-Wesley, 1981. ISBN 0201036681.

Knuth, Donald E. Selected Papers on Computer Science. Cambridge University Press, 1995. ISBN 1881526925.

---. The Art of Computer Programming: Fundamental Algorithms, Volume 1, Third Edition. Addison-Wesley, 1974. ISBN 0201896834.

---. The Art of Computer Programming: Seminumerical Algorithms, Volume 2, Third Edition. Addison-Wesley, 1981. ISBN 0201896842.

---. The Art of Computer Programming: Sorting and Searching, Volume 3, Second Edition. Addison-Wesley, 1997. ISBN 0201896850.

Minsky, Marvin Lee. Computation: Finite and Infinite Machines. Prentice Hall, 1967. ISBN 0131655639.

Patterson, David A., John L. Hennessy, and David Goldberg. Computer Architecture: A Quantitative Approach, Second Edition. Morgan Kaufman Publishers, 1996. ISBN 1558603298.

Petzold, Charles. Programming Windows 3.1, Third Edition. Microsoft Press, 1992. ISBN 1556153953.

Stevens, W. Richard. Unix Network Programming. Prentice Hall, 1990. ISBN 0139498761.

Strunk, William and E.B. White. Elements of Style, Third Edition. Allyn & Bacon, 1979. ISBN 0024181900.

DDJ