Learning Recommendations

Added 2021-12-09, Modified 2022-04-08

Advice for learning faster, and specific advice for various topics


Being a fast learner is the ultimate skill to have. So you should invest significant effort into learning how to learn.

Read Strengthening the Student Toolbox (A short summary of dunlosky's paper reviewing 10 learning techniques).

Watch the lecture Study less study smart.

Check out spaced repetition, read ncase's remember and Augmenting Long-term Memory.

Once you're sold on spaced repetition, read 20 rules of knowledge formulation and follow it relgiously! I dug myself into a hole when I violated "keep questions simple" (math proofs as Anki cards)

For books on learning, I highly recommend Ultralearning and Peak.


Learning calculus consists of two things: building a strong intuition for the concepts and rules, and becoming good at the computations through lots of practice.

Intuition and knowing how to apply the math is the more important of the two, since computers can do the computing.

For intuition watch 3blue1brown's essence of calculus and read betterexplained.

For practice use

Try to match the problems to your skill level to learn the fastest.

Linear Algebra

(These are my recommendations for learning computational linear algebra for machine learning and adjacent fields. For proof based linear algebra look elsewhere.)

First watch 3blue1brown's series to get visual intuition, You can skip the videos on cross products as they aren't used in AI (but are in physics). The video on Cramer's rule can be skipped (though it is a useful review of previous topics).

Now read Linear algebra for everyone by Gilbert Strang. Do as many exercises as you can (I recommend doing all of them) and check your answers using the solution manual.

Something else you could do is write down your solutions in latex and publish them on GitHub, this forces you to be clear in your answers and explain them well. It can also help you review the material, since whenever you ever forget something you can check your notes and solutions (which is better than checking official ones, since it helps jog your memory).

Real Analysis

Real analysis (rigorous calculus) is calculus done rigorously (see this video).

Read Abbott's book, try and do all the exercises, when you skip an exercise come back to it later.

Avoid looking up solutions, this is a proof based class, so you should be able to check your own work. But as a last resort you can check against my solutions here (there aren't official solutions for the second edition)

Group Theory

I'm still learning group theory so take this with a little salt, but the Essence of Group Theory series is very good.

For books you can check out

For lectures check these out, they follow Artin's book and I've heard they're great.

I haven't gone through much of these, so you'll have to do your own research. It's a starting point at least.


Most important: You must understand, If you don't know why something got styled a certain way dig down! This is where you learn the most. Don't copy snippets you don't understand.

Reading Understanding Layout Algorithms is good to understand this.

I recommend you learn from MDN and do the exercises.

You'll learn better if you drill one part of web development at a time, i.e. copy html and images and only practice the styling. (This is a general and important learning principle)


I agree with all of luke smith's language learning advice. Start by reading Notes on Learning Languages then read the others.


Don't worry what programming language you pick, once you know one you'll be able to learn others extremely easily.

If you have to choose either choose based on what's easiest to learn, or choose based on what you want to do (i.e. for websites learn javascript, for AI learn python, etc.)

I've been teaching a programming class to some 10-14 year olds, but I still have no idea what I'm doing, I'll experiment and update this as I try different methods.

For beginners Khan Academy is okay. Getting a book is also a good idea. (I don't give more specific recommendations as I haven't found anything good yet)

This talk by Felienne Hermans on teaching programming is good. If you plan on teaching yourself this will help too I think.

For computer science see https://teachyourselfcs.com


Don't search "how to learn hacking" watch this instead. Hacking is mostly having a good understanding for how computers and apps work, then using that knowledge to exploit them.

I only know basic hacking which I learned from messing around. Writing silly viruses and infecting my friends computers, wifi hacking, shenanigans on library computers etc.

I think this is the best approach, my old advice was to watch lots of ippsec videos but honestly, getting good at solving hackthebox machines doesn't really transfer to real world hacking. Real world hacking is having good general knowledge combined with phishing and social engineering.

The Phineas Fisher papers are interesting. Listed chronologically