Skip to main content

Extra 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

NameAuthor(s)
Introduction to Computation and Programming Using Python 3eJohn V. Guttag
Think Python 2eAllen B. Downey
How to Design Programs 2eMatthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
Structure and Interpretation of Computer Programs 2eHal 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 ProgrammingPeter Van Roy, Seif Haridi
Design Patterns: Elements of Reusable Object-Oriented SoftwareErich Gamma, Richard Helm, Ralph Johnson, John Vlissides
RefactoringMartin Fowler
Clean CodeRobert Martin
Code Complete 2eSteve McConnell
The Pragmatic Programmer 2eAndrew Hunt, David Thomas
Programming Languages: Application and InterpretationShriram Krishnamurthi
Programming and Programming LanguagesShriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz
Competitive ProgrammingSteven Halim, Felix Halim
Introduction to computing in JavaRobert Sedgewick, Kevin Wayne

Math

NameAuthor(s)
Calculus Made EasySilvanus P. Thompson
Ximera: Interactive Calculus TextbooksXimera team
Discrete Mathematics with Applications (4th Edition)Susanna S. Epp
Discrete Mathematics: An Open IntroductionOscar Levin
Applied Discrete StructuresAlan Doerr, Ken Levasseur
Grinstead and Snell’s Introduction to ProbabilityCharles M. Grinstead, J. Laurie Snell
Linear Algebra for EveryoneGilbert Strang
The Art of Linear AlgebraKenji Hiranabe, Gilbert Strang

Systems

NameAuthor(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
Computer Networks: A Systems ApproachLarry Peterson and Bruce Davie
Distributed Systems: Principles and ParadigmsAndrew Tanenbaum
Operating Systems Design and ImplementationAndrew S. Tanenbaum, Albert S. Woodhull
Crafting InterpretersRobert Nystrom
Principles of Compiler DesignAlfred Aho, Jeffrey Ullman
Distributed Systems Reading GroupVarious
System Design: Design large-scale systemsVarious

Theory

NameAuthor(s)
Introduction to Computing: Explorations in Language, Logic, and MachinesDavid 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 IntroductionPeter Smith
Category Theory for Programmers: The PrefaceBartosz Milewski
An Introduction to Information RetrievalChristopher D. Manning, Prabhakar Raghavan, Hinrich Schütze
Computer Science: An interdisciplinary approachRobert Sedgewick, Kevin Wayne
DSA CS3: Data Structures & Algorithms (Coursenotes - Slides)The OpenDSA Project (supported by National Science Foundation)

Applications

NameAuthor(s)
Architecture of a Database SystemJoseph 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 TechniquesJim 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 ApplicationsMichael DiBernardo (editor)
An Introduction to Statistical LearningGareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani
Deep LearningIan Goodfellow, Yoshua Bengio and Aaron Courville
Bayesian Reasoning and Machine LearningDavid Barber
Language Implementation PatternsTerence Parr
Compilers: Principles, Techniques, and Tools (2nd Edition)Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
Compiler ConstructionNiklaus Wirth
The Mythical Man-MonthFred Brooks, Jr.
Physically Based Rendering: From Theory To ImplementationMatt Pharr, Wenzel Jakob, and Greg Humphreys

Tools

NameAuthor(s)
The Linux Command Lineby William Shotts