Links decorated with a 💰 may require a purchase. I have done my best to exclude resources that require a subscription.

Computer Science

Contents

  1. The basics
  2. Algorithms
  3. Web programming
  4. Cryptology
  5. AI and machine learning
  6. Compilers and language implementation
  7. Operating systems
  8. Language specific

The basics

These courses give you a solid grounding in the basic ideas of computer science and programming. You write small programs in a variety of languages and in different styles. You get used to some standard tools. You also get a good idea of how computers work from the ground up.

  1. CS50
  2. Nand to Tetris or NandGame for the first part
  3. The missing semester of your CS education
  4. Learn Git Branching
  5. Programming languages part A, part B, and part C

Algorithms

I think advanced knowledge of algorithms is somehow out of vogue with employers but it's fun to learn. I haven't done any of these courses all the way through but I've done bits and pieces and they were fun.

  1. Algorithms part 1 and part 2
  2. Analysis of Algorithms
  3. Randomised algorithms and probabilistic analysis
  4. Toolkit for Modern Algorithms

Web programming

The web is a funny thing, web apps have the best distribution network out of any technology by a long way and yet a lot of the technology it is built on is in my opinion completely unsuited for the task. I also find that the best resources are mostly kind of expensive. The paid courses in this list have a modest price tag and I think are quite well made.

  1. The HTML hobbyist
  2. Javascript.info

Cryptology

This includes some of the more fun courses and challenges. I have left out CryptoPals because I think cryptohack is just better. The paid entries are books that are very expensive but you might be able to find pdfs around the web somewhere.

  1. Cryptohack
  2. Mystery twister
  3. id0
  4. Symmetric cryptanalysis
  5. Implement RSA securely This is a bit of a weird site and I haven't worked my way through the project yet but from what I have read it is quite a thoughtful implementation.
  6. Foundations of blockchains

AI and machine learning

  1. Neural networks: zero to hero
  2. Autodidax: Jax core from scratch
  3. Alice in differentiable wonderland
  4. Elements of differentiable programming
  5. Efficient deep learning
  6. Programming massively parallel processors book, lecture series part 1 and part 2
  7. How to scale your model

Compilers and language implementation

  1. Automata theory This course follows the excellent book by Hopcraft, Motwani, and Ullman titled "Introduction to automata theory, languages, and computation".
  2. Software foundations
  3. Crafting interpreters
  4. Advanced Compilers
  5. The little typer
  6. Typechecker zoo
  7. A tutorial implementation of a dependently typed lambda calculus
  8. How to implement dependent type theory
  9. Homotopy Type Theory game
  10. Counterexamples in type theory

Operating systems

  1. Design operating systems
  2. Three easy pieces
  3. Linux from scratch
  4. The linux kernel module programming guide

Language specific

Languages I don't like

  • Greg's bash guide Bash is probably my least favourite language. This guide makes it slightly more bearable.
  • Efficient Linux at the command line Probably better to start with this one than the previous one actually.
  • Driving compilers given its ubiquity, it's kind of surprising how terrible the documentation for the C compiler toolchain is. This is the only concise source I've found that goes into the whole compilation process.

Languages I think are neat