I have a confession to make. I, (and most of us) have been stuck on fad diets for CS. It’s so nice to read easy books, like learn C++ in 21 days, or doing some leetcode problems. You learn a bit, feel that warm glow of getting smarter, and trick yourself into feeling productive.

You’re not really getting any better, without learning the fundamentals.

Teach Yourself CS has a detailed list of good resources for the more practical aspects of CS, whereas Steve Yegge’s recommendations focus more on the mathematical side – the first four courses he recommends are: discrete math, linear algebra, statistics, and theory of computation.

Steve Yegge’s list omits Computer Architecture, which is a glaring omission – an Operating Systems course doesn’t have enough time to cover all the interesting parts of concurrency, parallelism, and optimization that a computer architecture course would.

Teach Yourself CS doesn’t mention Theory of Computation, and is lighter on the math background, giving one resource for math. Theory of Computation is a bit more dated (swallowed up by all the other fields), but is still useful for its applications.

To that end, I’ve fused them both, and skimmed some resources to put on this list.

This list is incomplete and changing all the time, but hey, isn’t that what agile development is all about?