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 |
| How to Design Programs, Second Edition | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi |
| Name | Author(s) |
|---|---|
| Calculus Made Easy | Silvanus P. Thompson |
| Ximera: Interactive Calculus Textbooks | Ximera team |
| Discrete Mathematics with Applications (4th Edition) | Susanna S. Epp |
| Discrete Mathematics: An Open Introduction | Oscar Levin |
| Applied Discrete Structures | Alan Doerr, Ken Levasseur |
| Grinstead and Snell’s Introduction to Probability | Charles M. Grinstead, J. Laurie Snell |
| Linear Algebra for Everyone | Gilbert Strang |
| The Art of Linear Algebra | Kenji Hiranabe, Gilbert Strang |
| Name | Author(s) |
|---|---|
| But How Do It Know? | J. Clark Scott |
| Computer Systems: A Programmer's Perspective (3rd Edition) | Randal E. Bryant, David R. O'Hallaron |
| Modern Operating Systems (4th Edition) | Andrew S. Tanenbaum, Herbert Bos |
| Computer Organization and Design: The Hardware/Software Interface (6th Edition) | David Patternson, John Hennessy |
| Computer Networks (5th Edition) | Andrew S. Tanenbaum, David J. Wetherall |
| Computer Networking: A Top-Down Approach (8th Edition) | James F Kurose, Keith W Ross |
| Distributed Systems: Principles and Paradigms | Andrew Tanenbaum |
| Operating Systems Design and Implementation | Andrew S. Tanenbaum, Albert S. Woodhull |
| Crafting Interpreters | Robert Nystrom |
| Principles of Compiler Design | Alfred Aho, Jeffrey Ullman |
| 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 the Theory of Computation (3rd Edition) | Michael Sipser |
| Introduction to Algorithms (3rd Edition) | Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein |
| The Algorithm Design Manual (3rd Edition) | Steven Skiena |
| Algorithms (4th Edition) | Robert Sedgewick |
| Category Theory: A Gentle Introduction | Peter Smith |
| Category Theory for Programmers: The Preface | Bartosz Milewski |
| An Introduction to Information Retrieval | Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze |
| Computer Science: An interdisciplinary approach | Robert Sedgewick, Kevin Wayne |
| DSA CS3: Data Structures & Algorithms (Coursenotes - Slides) | The OpenDSA Project (supported by National Science Foundation) |
| Name | Author(s) |
|---|---|
| The Linux Command Line | by William Shotts |