I’ve seen other lists of favorite books over the last few months, so I thought I’d jump into the fray. If I were stuck on an island (or in my room during a pandemic), here are the ten computer science books that I would want by my side. These ten books also provide a great overview of the entire field of computer science.
I was fortunate enough to take the course for which this book was developed when I was an undergraduate at MIT. Since then this book has become a classic. If you can invest the time, the text has the potential to expand your mind and make you a better programmer.
Artificial Intelligence: A Modern Approach
When I was at MIT, the textbook for the Artificial Intelligence class was written by Professor Winston. While that was a great book, since then the above textbook by Russell and Norvig has become the bible for AI, and for good reason. Not only is the text comprehensive, but it is extremely clear and easy to read.
The Language of Machines
I met Professor Floyd while working toward a Master’s degree at Stanford. He taught an advanced class on automata and computability that later led to the above textbook. The text is unique in that it introduces a unified model of computation that ties together seemingly disparate concepts. The class was also memorable in that Professor Floyd was one of the kindest, gentlest teachers I have ever known. Unfortunately he passed away in 2001.
Abstraction and Specification in Program Development
Professor Liskov is famous for the Liskov Substitution Principle, as well as being a Turing Award winner. Professor Guttag was my undergraduate advisor, and later became head of the Electrical Engineering and Computer Science department at MIT. While this is probably the least known book on my list, its influence is greater than is recognized. Although the book uses the CLU programming language to convey its ideas, the ideas were carried over to a subsequent textbook, Program Development in Java. The above textbook also influenced Introduction to Computation and Programming in Python, which is the foundational text for today’s MIT undergraduate program in computer science.
Compilers: Principles, Techniques, and Tools
The above book is often simply referred to as the Dragon Book. It remains the bible for compiler theory. Professor Lam taught an advanced compiler course that I took at Stanford.
The Design and Implementation of the FreeBSD OS
The above textbook is not only comprehensive, but easy to read. It gives an in-depth view of an influential operating system that continues to be relevant today.
Introduction to Algorithms
When I was at MIT, the authors were just starting to develop this text. From the chapter notes that were provided during class, I could already tell that a great textbook was taking shape. Of course, this book is now considered the bible of its field.
TCP/IP Illustrated, Volume 1
This is probably the best book from which to learn about modern day networking. The level of depth is unmatched and the text continues to reward those who return to it again and again. W. Richard Stevens passed away in 1999, but fortunately his books continue to be revised for today’s readers.
Transaction Processing: Concepts and Techniques
The authors introduced the ACID (atomicity, consistency, isolation, durability) properties of database transactions, and this book is a comprehensive summary of their work. The database community lost a true giant when Jim Gray was lost at sea in 2007, while on a short trip to scatter his mother’s ashes near San Francisco.
Concrete Mathematics: A Foundation for Computer Science
This text started as an expanded treatment of the “Mathematical Preliminaries” chapter of The Art of Computer Programming. While I have not yet read The Art of Computer Programming, I was fortunate enough to take the Stanford course that used the above book, taught by Professor Knuth. The book provides a more leisurely introduction to the mathematical analysis of algorithms, in a manner that is both challenging and fun.