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 3e | John V. Guttag |
| Think Python 2e | Allen B. Downey |
| How to Design Programs 2e | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi |
| Structure and Interpretation of Computer Programs 2e | Hal Abelson, Jerry Sussman, Julie Sussman |
| The Structure and Interpretation of Computer Programs (2021, JavaScript) | Harold Abelson, Gerald Jay Sussman, Julie Sussman, Martin Henz, Tobias Wrigstad and Samuel Fang |
| 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 2e | Steve McConnell |
| The Pragmatic Programmer 2e | Andrew Hunt, David Thomas |
| Programming Languages: Application and Interpretation | Shriram Krishnamurthi |
| Programming and Programming Languages | Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz |
| Competitive Programming | Steven Halim, Felix Halim |
| Introduction to computing in Java | Robert Sedgewick, Kevin Wayne |
| Name | Author(s) |
|---|
| Architecture of a Database System | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton |
| Readings in Database Systems (5th Edition) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors |
| Database Management Systems (3rd Edition) | 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 (3rd Edition) | William Kent |
| The Architecture of Open Source Applications | Michael DiBernardo (editor) |
| An Introduction to Statistical Learning | Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani |
| 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. |
| Physically Based Rendering: From Theory To Implementation | Matt Pharr, Wenzel Jakob, and Greg Humphreys |