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

  1. Structure and Interpretation of Computer Programs

Courses

Papers

Projects

Discrete Math

Textbooks

  1. Discrete Mathematics, an open introduction

Linear Algebra

Textbooks

  1. No bullshit guide to linear Algebra, Savov

Statistics

Textbooks

  1. Statistics fourth ed, Friedman et. al
  2. Think stats, Downey
  3. Think Bayes, Downey

Theory of Computation

Textbooks

  1. Theory of Computation, Hefferon
  2. Computational Complexity, Arora and Barak

Computer Architecture

Textbooks

  1. Computer Architecture, a Programmers Perspective
  2. Computer Architecture, Patterson and Hennessey

Resources

  1. Some Assembly Required

Algorithms and Data Structures

Textbooks

  1. The Algorithm Design Manual, Skiena
  2. The Art of Multiprocessor programming

Operating Systems

Textbooks

  1. Operating Systems, Three Easy Pieces

Networking

Textbooks

  1. Computer Networks, a Systems approach

Projects

  1. Chitcp

Databases

Textbooks

  1. Database Internals

Projects

  1. Chidb

Compilers

Textbooks

  1. Crafting Interpreters

Resources

  1. Chibicc

Distributed Systems

Textbooks

  1. Designing Data Intensive Applications