This is a list I put together for my own studies.
So if you have any questions about the curricula, please direct them here.

At Least

Must study at least these two books.

  • Computer Systems: A Programmer’s Perspective
  • Designing Data-Intensive Applications

Programming

  • SICP (Structure and Interpretation of Computer Programs)
  • Course: Brian Harvey’s Berkeley CS 61A

Architecture

  • CS:APP (Computer Systems :A Programmer’s Perspective)
  • Course: Berkeley CS 61C

Algorithms

  • the Algorithm Design Manual
  • Course: Steven Skiena’s lectures
  • (also recommended) How to Solve It, Polya, Conway

Math

  • Mathematics for Computer Science
  • Course: Tom Leighton’s MIT 6.042J

Operating Systems

  • OS:TEP (Operating Systems: Three Easy Pieces)
  • Course: Berkeley CS 162

Network

  • CN:TDA (Computer Network: a Top Down Approach)
  • Course: Stanford CS 144

Database

  • Readings in Database Systems
  • Course: Joe Hellerstein’s Berkeley CS 186

Languages & Compilers

Distributed Systems

  • Designing Data-Intensive Applications by Martin Kleppmann
  • Course: MIT 6.824
  • (also recommended) Maarten van Steen and Andrew Tanenbaum’s Distributed Systems, 3rd Edition