SubjectWhy study?Best bookBest 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 Organization and DesignBerkeley 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 hard problems. The Algorithm Design ManualSteven 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 ScienceTom 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 PiecesBerkeley 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 SystemsJoe 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. Compilers: Principles, Techniques and Tools Alex Aiken’s course on Lagunita
🌦Distributed Systems These days, most systems are distributed systems. Distributed Systems, 3rd Edition by Maarten van Steen 🤷‍
🎨Computer Graphics