Subject | Purpose | Best Books | Best Videos |
---|---|---|---|
Programming | No need to be a “genius” programmer who can see through everything - just understand core concepts | Structure and Interpretation of Computer Programs | Brian Harvey’s Berkeley CS 61A |
Computer Systems | Understanding how computers work without any mystification - everything is connected in a clear picture | Computer Systems: A Programmer’s Perspective (3rd Edition) | Berkeley CS 61C |
Algorithms and Data Structures | Understanding how to use stacks, queues, trees, graphs, and other common data structures, along with solving problems with some depth | The Algorithm Design Manual (2nd Ed.) | Steven Skiena’s lectures |
Mathematical Knowledge | Computer science fundamentally uses math as a division, so learning math will bring competitive advantages | Mathematics for Computer Science | Tom Leighton’s MIT 6.042J |
Operating Systems | Code basics all rely on operating system operations, so you should understand its principles | Operating Systems: Three Easy Pieces | Berkeley CS 162 |
Computer Networks | Understanding how the internet works to comprehend its full capabilities | Computer Networking: A Top-Down Approach | Stanford CS 144 |
Databases | Working with multi-user requirements and data is common, but few understand how database systems work | Readings in Database Systems | Joe Hellerstein’s Berkeley CS 186 |
Programming Languages and Compilers | Understanding how programming languages and compilers work to write better code and learn new languages more easily | Crafting Interpreters | Alex Aiken’s course on Lagunita |
Distributed Systems | Because most modern systems are distributed | Designing Data-Intensive Applications | MIT 6.824 |
Whether you’re an undergraduate looking to change majors or a self-taught programmer transitioning to coding, it’s essential to learn the fundamentals of computer science. Computer science students also need to reinforce their knowledge, especially if they plan to study abroad. So how can you access world-class educational resources and learn computer science on your own, without spending years and substantial money?
There are many such learning resources online, perhaps even too many. What you need isn’t a list of “200+ free online courses,” but rather answers to these questions:
- Which subjects should you study, and why?
- What are the best books or video courses for these subjects?
It’s recommended to use the textbooks or videos in Figure 1 (preferably both) to study nine core computer science courses. Spend 100-200 hours completing each course, then revisit their essence throughout your career.
If spending several years self-studying nine subjects seems too burdensome, then focus on just two books: “Computer Systems: A Programmer’s Perspective” and “Designing Data-Intensive Applications”. Time invested in these two books can yield extremely high returns, especially for self-taught engineers working in web application development.