Computer Science - Great Readings
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.
Programming
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 |
How to Design Programs, Second Edition |
Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi |
Math
Systems
Theory
Applications
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 |