Learn Computer Science
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.
I decided to cobble up a set of resources to go through, as a fusion of Teach Yourself Computer Science and Steve Yegge’s recommendations.
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?
Programming
Textbooks
- Structure and Interpretation of Computer Programs
Courses
Papers
Projects
Discrete Math
Textbooks
- Discrete Mathematics, an open introduction
Linear Algebra
Textbooks
- No bullshit guide to linear Algebra, Savov
Statistics
Textbooks
- Statistics fourth ed, Friedman et. al
- Think stats, Downey
- Think Bayes, Downey
Theory of Computation
Textbooks
- Theory of Computation, Hefferon
- Computational Complexity, Arora and Barak
Computer Architecture
Textbooks
- Computer Architecture, a Programmers Perspective
- Computer Architecture, Patterson and Hennessey
Resources
- Some Assembly Required
Algorithms and Data Structures
Textbooks
- The Algorithm Design Manual, Skiena
- The Art of Multiprocessor programming
Operating Systems
Textbooks
- Operating Systems, Three Easy Pieces
Networking
Textbooks
- Computer Networks, a Systems approach
Projects
- Chitcp
Databases
Textbooks
- Database Internals
Projects
- Chidb
Compilers
Textbooks
- Crafting Interpreters
Resources
Distributed Systems
Textbooks
- Designing Data Intensive Applications