Computer Science
Contents
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.
- CS50
- Nand to Tetris or NandGame for the first part
- The missing semester of your CS education
- Learn Git Branching
- 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.
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.
- The HTML hobbyist
- Learn HTML CSS
- Javascript.info
- Learn Javascript
- Elm in action Elm is not a popular framework to make web apps but I think it is a good one for personal projects. The language has not received any updates since 2019 so I wouldn't use it in a professional project.
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.
- Cryptohack
- Mystery twister
- id0
- Symmetric cryptanalysis
- 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.
- The design of Rijndael
- The LLL algorithm: survey and applications
- Foundations of blockchains
AI and machine learning
- Neural networks: zero to hero
- Autodidax: Jax core from scratch
- Alice in differentiable wonderland
- Elements of differentiable programming
- Efficient deep learning
- Programming massively parallel processors book, lecture series part 1 and part 2
- How to scale your model
Compilers and language implementation
- Automata theory This course follows the excellent book by Hopcraft, Motwani, and Ullman titled "Introduction to automata theory, languages, and computation".
- Software foundations
- Crafting interpreters
- Advanced Compilers
- The little typer
- Typechecker zoo
- A tutorial implementation of a dependently typed lambda calculus
- How to implement dependent type theory
- Homotopy Type Theory game
- Counterexamples in type theory
Operating systems
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.