Following the curriculum from https://teachyourselfcs.com/
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 Design //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 hard 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. //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 //🤷