This document consists of great books or articles on computer science. Some are here because there is a course covering the same material; some are just great books that you should read at some point in your career.
Once you have made it through most of the curriculum, knowing whether a book is worth your time will become easier. Or, if you are struggling in one of the courses, perhaps reading a book on the subject will help.
Name | Author(s) |
---|---|
Introduction to Computation and Programming Using Python | John V. Guttag |
Think Python 2e | Allen B. Downey |
How to Design Programs | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi |
Structure and Interpretation of Computer Programs | Hal Abelson, Jerry Sussman, Julie Sussman |
Concepts, Techniques, and Models of Computer Programming | Peter Van Roy, Seif Haridi |
Design Patterns: Elements of Reusable Object-Oriented Software | Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides |
Refactoring | Martin Fowler |
Clean Code | Robert Martin |
Code Complete | Steve McConnell |
The Pragmatic Programmer | Andrew Hunt, David Thomas |
Name | Author(s) |
---|---|
Calculus Made Easy | Silvanus P. Thompson |
Discrete Mathematics with Applications (4th Edition) | Susanna S. Epp |
Applied Discrete Structures | Alan Doerr, Ken Levasseur |
Grinstead and Snell’s Introduction to Probability | Charles M. Grinstead, J. Laurie Snell |
Introduction to Linear Algebra | Gilbert Strang |
Name | Author(s) |
---|---|
Modern Operating Systems (4th Edition) | Andrew S. Tanenbaum, Herbert Bos |
Computer Organization and Design: The Hardware/Software Interface | David Patternson, John Hennessy |
Computer Networks (5th Edition) | Andrew S. Tanenbaum, David J. Wetherall |
Computer Networking: A Top-Down Approach (6th Edition) | James F Kurose, Keith W Ross |
Distributed Systems: Principles and Paradigms | Andrew Tanenbaum |
Distributed Systems Reading Group | Various |
System Design: Design large-scale systems | Various |
Name | Author(s) |
---|---|
Introduction to Computing: Explorations in Language, Logic, and Machines | David Evans |
Introduction to Algorithms (3rd Edition) | Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein |
The Algorithm Design Manual | Steven Skiena |
Category Theory: A Gentle Introduction | Peter Smith |
Name | Author(s) |
---|---|
Architecture of a Database System | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton |
Readings in Database Systems | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors |
Database Management Systems | Raghu Ramakrishnan, Johannes Gehrke |
Transaction Processing: Concepts and Techniques | Jim Gray, Andreas Reuter |
Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World | William Kent |
The Architecture of Open Source Applications | Michael DiBernardo (editor) |
Deep Learning | Ian Goodfellow, Yoshua Bengio and Aaron Courville |
Bayesian Reasoning and Machine Learning | David Barber |
Language Implementation Patterns | Terence Parr |
Compilers: Principles, Techniques, and Tools (2nd Edition) | Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman |
Compiler Construction | Niklaus Wirth |
The Mythical Man-Month | Fred Brooks, Jr. |