Twenty steps, nine junctions
Chapters from twelve books are interleaved so related ideas meet. Finish each step’s exercises before the next. At every junction, solve the LeetCode set, publish the blog post, and pass the gate. Tick each stop as you reach it.
The twelve books
- OSTEP: Operating Systems: Three Easy Pieces, Arpaci-Dusseau
- Compiler: Writing a C Compiler, Nora Sandler
- Adams: Calculus: A Complete Course, Adams and Essex
- Discrete Math: Discrete Mathematics for Computer Scientists
- Hefferon: Linear Algebra, 3rd ed., Jim Hefferon
- CS:APP: Computer Systems: A Programmer’s Perspective
- Probability: Probability and Statistics: The Science of Uncertainty
- DPV: Algorithms, Dasgupta, Papadimitriou, Vazirani
- Thareja: Data Structures Using C, 2nd ed., Reema Thareja
- Tour C++: A Tour of C++, 3rd ed., Bjarne Stroustrup
- Learn Go: Learn Go with Tests, Chris James
- Let’s Go: Let’s Go, Alex Edwards
Final project
- Compiler
- The C++ compiler from Writing a C Compiler, passing the full test suite.
- CLI
- A Go command-line tool that wraps the compiler: flags, project layout, calls the compiler with os/exec (Learn Go with Tests).
- Playground
- A Go web app (Let’s Go) where you paste C, it compiles server-side, and it shows assembly output and program results.
- Safety
- Running visitors’ code is risky. Run it in a sandbox (container or nsjail) with time, memory, and process limits, and keep the server timeouts from Let’s Go ch. 9.
Rules
- Solve LeetCode without solutions first; re-solve failures a few days later.
- Do at least 70% of the exercises in every chapter.
- Re-solve a few old problems at each junction.