This is a list of good books on computer science.
Most are accessible to anyone with programming experience equivalent to an introduction to computer science course. Of course, everyone in the field has his or her own favorite books. There isn't a universally accepted list of "best", but I think all would agree that these are at least pretty good in both writing quality and technical content, and that you would not go wrong by reading them.
If you read one book from each category within CORE, SYSTEMS, and THEORY, then, congratulations: you've just completed the equivalent of an undergraduate major in computer science! Pick up a few from APPLICATIONS and you're at the Masters level. In my ideal CS department, this would be the main thread of the majors curriculum, to be augmented with mathematics and more computing application electives.
I made this list in the process of researching acquisitions for the Williams College library. I reviewed the curriculum (for topics) and syllabi (for book recommendations) of many of the top CS programs and liberal arts colleges, including: MIT, Cal Tech, University of Washington, Princeton, Stanford, Berkeley, Brown, Rice, Williams, Amherst, Swarthmore, Harvey Mudd, and Wellesley. I gave special emphasis for each topic to the schools and professors that specialize in it, e.g., Rice for compilers and programming languages. I also looked at various recommendation lists on the web and the Amazon best-sellers in each category. I was familiar with many of the books already. For the others, I reviewed the table of contents, read sections, looked at reviews, and particularly examined code samples. I then selected the book in each topic that I would want to use if teaching the course. For some topics, there were a few choices that had very high quality but very different approaches, so I listed all of those. If teaching that course, I would try one a year to see which worked best with the students. I generally didn't choose the best graduate textbooks or reference books, but instead the ones that would be appropriate for first encountering a topic, e.g., in an undergraduate course.
I'm also often asked for recommendations for professional programmers without CS degrees or undergraduates who want to learn more CS without necessarily taking courses or majoring. This is a nice list for those groups as well. Because of the way that CS books are categorized, it is hard to browse them in a library. Some are filed under "engineering," others under "math,""programming,""computer science," or the application area, such as artificial intelligence books appearing in psychology, cognitive science, and biology. So, think of this as the book shelf that I wish you could find in a library, with all of the short-lived "Learning Ruby in 21 Days" and "Visual Fortran 2012 for Dummies"-type books that normally clutter such a section removed.
For convenience, I've linked the books to Amazon for everyone and the Williams College library for my students (some are not yet at Williams, but are coming soon.) If you're reading through these book-club style, just choose one book from each category--whichever your library has or appeals to you will be fine. To keep the list approachable, I didn't include all of the well-respected books in each category but tried to choose one or two. Rather than making this a catch-all, I'll let others maintain their own lists of best computer science books---but I do appreciate recommendations, especially for application areas farther from my specialization in computational graphics.
Programming & Specific Languages
In the long run, it doesn't matter what language you begin with, and any book in this group is sufficient to get started. Skip on to the CORE section after reading one.
Data Structures
Algorithms
History of Computer Science
Programming Language Theory
Advanced Algorithms & Data Structures
Cryptography
Operating Systems
Networks
Compilers
Parallel Programming
Databases
Distributed Computing
Software Engineering & Management
Artificial Intelligence
Computational Graphics
Computer Vision
Human-Computer Interaction
Computational Biology
Game Engine Programming
Morgan McGuire (@morgan3d) is a professor of Computer Science at Williams College, visiting professor at NVIDIA Research, and a professional game developer. His most recent games are Rocket Golfing and work on the Skylanders series. He is the author of the Graphics Codex, an essential reference for computer graphics now available in iOS and Web Editions.
Most are accessible to anyone with programming experience equivalent to an introduction to computer science course. Of course, everyone in the field has his or her own favorite books. There isn't a universally accepted list of "best", but I think all would agree that these are at least pretty good in both writing quality and technical content, and that you would not go wrong by reading them.
If you read one book from each category within CORE, SYSTEMS, and THEORY, then, congratulations: you've just completed the equivalent of an undergraduate major in computer science! Pick up a few from APPLICATIONS and you're at the Masters level. In my ideal CS department, this would be the main thread of the majors curriculum, to be augmented with mathematics and more computing application electives.
I made this list in the process of researching acquisitions for the Williams College library. I reviewed the curriculum (for topics) and syllabi (for book recommendations) of many of the top CS programs and liberal arts colleges, including: MIT, Cal Tech, University of Washington, Princeton, Stanford, Berkeley, Brown, Rice, Williams, Amherst, Swarthmore, Harvey Mudd, and Wellesley. I gave special emphasis for each topic to the schools and professors that specialize in it, e.g., Rice for compilers and programming languages. I also looked at various recommendation lists on the web and the Amazon best-sellers in each category. I was familiar with many of the books already. For the others, I reviewed the table of contents, read sections, looked at reviews, and particularly examined code samples. I then selected the book in each topic that I would want to use if teaching the course. For some topics, there were a few choices that had very high quality but very different approaches, so I listed all of those. If teaching that course, I would try one a year to see which worked best with the students. I generally didn't choose the best graduate textbooks or reference books, but instead the ones that would be appropriate for first encountering a topic, e.g., in an undergraduate course.
I'm also often asked for recommendations for professional programmers without CS degrees or undergraduates who want to learn more CS without necessarily taking courses or majoring. This is a nice list for those groups as well. Because of the way that CS books are categorized, it is hard to browse them in a library. Some are filed under "engineering," others under "math,""programming,""computer science," or the application area, such as artificial intelligence books appearing in psychology, cognitive science, and biology. So, think of this as the book shelf that I wish you could find in a library, with all of the short-lived "Learning Ruby in 21 Days" and "Visual Fortran 2012 for Dummies"-type books that normally clutter such a section removed.
For convenience, I've linked the books to Amazon for everyone and the Williams College library for my students (some are not yet at Williams, but are coming soon.) If you're reading through these book-club style, just choose one book from each category--whichever your library has or appeals to you will be fine. To keep the list approachable, I didn't include all of the well-respected books in each category but tried to choose one or two. Rather than making this a catch-all, I'll let others maintain their own lists of best computer science books---but I do appreciate recommendations, especially for application areas farther from my specialization in computational graphics.
Programming & Specific Languages
In the long run, it doesn't matter what language you begin with, and any book in this group is sufficient to get started. Skip on to the CORE section after reading one.
![]() | Introduction to Computer Science Using Python: A Computational Problem-Solving Focus Dierbach [Amazon] [Williams] |
![]() | A Byte of Python Swaroop [Free!] |
![]() | The Little Schemer Friedman et al. [Amazon] |
![]() | The C++ Programming Language Stroustrup [Amazon] [Williams] |
![]() | JavaScript: The Good Parts Crockford [Amazon] [Williams] |
![]() | The C Programming Language Kernighan and Ritchie [Amazon] [Williams] |
![]() | Java: An Eventful Approach Bruce et al. [Amazon] [Williams] |
CORE
Computer Organization![]() | Computer Organization and Design Patterson and Hennessy [Amazon] [Williams] |
Data Structures
![]() | Data Structures and Algorithms Aho et al. [Amazon] [Williams] |
![]() | Java Structures: Data Structures in Java for the Principled Programmer Bailey [Free!] |
![]() | Data Structures and Algorithms Wirth [Free!] |
Algorithms
![]() | Algorithms Dasgupta et al. [Amazon] |
![]() | Introduction to Algorithms Cormen et al. [Amazon] [Williams] |
![]() | Algorithms Sedgewick and Wayne [Amazon] [Williams] |
History of Computer Science
![]() | Alan Turing: The Enigma Hodges [Amazon] [Williams] |
![]() | Hackers: Heroes of the Computer Revolution Levy [Amazon] [Williams] |
![]() | The Universal History of Computing: From the Abacus to the Quantum Computer Ifrah [Amazon] [Williams] |
THEORY
Theory of Computation![]() | Introduction to the Theory of Computation Sipser [Amazon] [Williams] |
Programming Language Theory
![]() | Programming Languages: Application and Interpretation Krishnamurthi [Free!] |
![]() | Design Concepts in Programming Languages Turbak and Gifford [Amazon] |
Advanced Algorithms & Data Structures
![]() | Advanced Data Structures Brass [Amazon] [Williams] |
![]() | Probability and Computing: Randomized Algorithms and Probabilistic Analysis Mitzenmacher and Upfal [Amazon] |
![]() | Randomized Algorithms Motwani and Raghavan [Amazon] [Williams] |
Cryptography
![]() | Introduction to Modern Cryptography: Principles and Protocols Katz and Lindell [Amazon] |
SYSTEMS
Architecture![]() | Computer Architecture: A Quantitative Approach Hennessy and Patterson [Amazon] [Williams] |
Operating Systems
![]() | Operating Systems: Principles and Practice Anderson and Dahlin [Amazon] |
Networks
![]() | Computer Networks and Internets Comer [Amazon] |
Compilers
![]() | Engineering a Compiler Cooper and Torczon [Amazon] [Williams] |
Parallel Programming
![]() | Programming Massively Parallel Processors Kirk and Hwu [Amazon] [Williams] |
Numerical Methods
![]() | Numerical Recipes: The Art of Scientific Computing Press et al. [Amazon] [Williams] |
Databases
![]() | Database System Concepts Silberschatz et al. [Amazon] [Williams] |
![]() | Fundamentals of Database Systems Elmasri and Navathe [Amazon] |
Distributed Computing
![]() | Distributed Systems: Principles and Paradigms Tanenbaum and Van Steen [Amazon] |
Software Engineering & Management
![]() | The Mythical Man-Month: Essays on Software Engineering Brooks [Amazon] [Williams] |
APPLICATION AREAS
Machine Learning![]() | Learning From Data Abu-Mostafa et al. [Amazon] |
![]() | Understanding Machine Learning: From Theory to Algorithms Shalev-Shwartz and Ben-David [Amazon] |
Artificial Intelligence
![]() | Artificial Intelligence: A Modern Approach Russell and Norvig [Amazon] [Williams] |
Computational Graphics
![]() | Computer Graphics: Principles and Practice Hughes et al. [Amazon] [Williams] |
Computer Vision
![]() | Computer Vision: Models, Learning, and Inference Prince [Amazon] |
Human-Computer Interaction
![]() | Designing the User Interface: Strategies for Effective Human-Computer Interaction Shneiderman et al. [Amazon] |
Computational Biology
![]() | Algorithms in Structural Molecular Biology Donald [Amazon] [Williams] |
![]() | An Introduction to Bioinformatics Algorithms Jones and Pevzner [Amazon] |
Game Engine Programming
![]() | Game Engine Architecture Gregory [Amazon] |
