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.
| |
| Figure 1: Individuals who replied to my informal survey. |
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.
| ||||||||||||||||||||||||||||||||||||
| Figure 2: Favorite Books. |
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