Every programmer and engineer I know has a small cluster of books always near their work area. I think it’s that set of books—the ones you can’t, or shouldn’t, live without—that you’re after. The problem with book lists is that they’re highly subjective and in a space as diverse as IT and computer science, where there is a new fad every… well, there goes one now! Uh, what was I saying? Oh, right, the lists are always subjective and pompous, but then so am I, so, I guess I can give you my list.
I would like to point out that not only are these books useful, but they are also well written and easy to read, which is very important when you have 400 or more pages of complex ideas. There is never any reason to read a book, no matter how important someone says it is, if it is not a well-crafted piece of writing.
The Art of Computer Programming by Donald Knuth (Addison-Wesley Professional). Perhaps the best-known masterworks on computer science, these books are both for reference and relaxation. I received my first set as a Christmas present my freshman year of college, and yes, I requested them, as Santa rarely peruses the computer science section of bookstores. When you have a question about an algorithm or you’re even thinking of optimizing some piece of code, these are the books to spend the day with. You will find out either that Dr. Knuth already knows the answer or that no one does and you’re on your own. The books have been being written for almost 40 years now and are worth having near at hand.
The Art of Computer Systems Performance Analysis by Raj Jain (Wiley, 1991). This is a book that seems to be much less well known than it should be. First published in 1991, it reads a bit dated now; the hardware used in its examples will either bring a nostalgic tear to your eye or just make you ask, “Who is DEC?” Dr. Jain is heavily involved in the networking side of computing, which shows in this book, but it is much more than a book about networking: It’s a great book on applying the scientific method to solving problems in computer science. The book covers such useful topics as proper experiment design, workload selection, and all the other things you need to approach performance problems in your systems.
Anything written by W. Richard Stevens including, but not limited to, TCP/IP Illustrated, Volumes 1 and 2 (Addison-Wesley Professional). Stevens loved to write, and that’s obvious when you read his books. Most were about networking, and TCP/IP in particular, but some were broader, covering subjects such as programming in the Unix environment. Each book is interesting to read, has plenty of relevant examples, and teaches you something on every page.
The Practice of Programming by Brian W. Kernighan and Rob Pike (Addison-Wesley Professional, 1999). This great book runs fewer than 300 pages, yet is filled with interesting stories about programming and with practical advice. It is one of those must-reads, and must-read-agains.
And, finally, a noncomputer book, The Elements of Style by William Strunk and E. B. White (fourth edition, Allyn and Bacon, 1999). No, it’s not a book on how to dress for those of us who can’t figure out if orange and green really do clash, but a very short book on the proper use of written English. Why would I suggest such a book? Science is, after all, the pursuit of knowledge via the scientific method, and one of the important components of the scientific method is that you are able to tell other people what you did and how you did it, so that they can verify your work. I don’t care how clever your code is—if you can’t explain it to someone else, it’s useless. (I’m sure my editors wish I referred to this little book more often.)