This is an old revision of the document!
Learn Computer Science
Study all nine subjects below, in roughly the presented order, using either the suggested textbook or video lecture series, but ideally both. Aim for 100-200 hours of study of each topic, then revisit favorites throughout your career 🚀.
Subject | Why study? | Book | Videos |
---|---|---|---|
Programming | Don’t be the person who “never quite understood” something like recursion. | Structure and Interpretation of Computer Programs | Brian Harvey’s Berkeley CS 61A |
Computer Architecture | If you don’t have a solid mental model of how a computer actually works, all of your higher-level abstractions will be brittle. | Computer Systems: A Programmer's Perspective | Berkeley CS 61C |
Algorithms and Data Structures | If you don’t know how to use ubiquitous data structures like stacks, queues, trees, and graphs, you won’t be able to solve challenging problems. | The Algorithm Design Manual | Steven Skiena’s lectures |
Math for CS | CS is basically a runaway branch of applied math, so learning math will give you a competitive advantage. | Mathematics for Computer Science | Tom Leighton’s MIT 6.042J |
Operating Systems | Most of the code you write is run by an operating system, so you should know how those interact. | Operating Systems: Three Easy Pieces | Berkeley CS 162 |
Computer Networking | The Internet turned out to be a big deal: understand how it works to unlock its full potential. | Computer Networking: A Top-Down Approach | Stanford CS 144 |
Databases | Data is at the heart of most significant programs, but few understand how database systems actually work. | Readings in Database Systems | Joe Hellerstein’s Berkeley CS 186 |
Languages and Compilers | If you understand how languages and compilers actually work, you’ll write better code and learn new languages more easily. | Crafting Interpreters | Alex Aiken’s course on edX |
Distributed Systems | These days, most systems are distributed systems. | Designing Data-Intensive Applications by Martin Kleppmann | MIT 6.824 |