How to teach yourself hard things

Julia Evans:

Identifying what you do understand is IMO just as important as identifying what you don’t understand. For example, I don’t know everything about networking. One thing I do 100% know is that there are 65535 TCP ports. That is definitely true. The src/dest port fields in the TCP header are 16 bits (2^16=65536), so there is no room for more ports.

Having pieces of knowledge that I’m really confident about is really important when trying to figure out a tricky problem. For example, imagine a program printed out “port 1823832” in a log. That is not because there are secretly port numbers can be bigger than 65535 and I’ve just misunderstood! That’s because there’s a bug in the program, there’s no port 1823832. That’s kind of a silly example, but I need to debug complicated issues all the time and it would be a huge waste of time to second guess things that I do actually know.

Taking a bit of extra time to take a piece of knowledge that you’re pretty sure of (“there are 65535 ports, Wikipedia said so”) and make it totally ironclad (“that’s because the port field in the TCP header is only 16 bits”) is super useful because there is a big difference between “I’m 97% sure this is true” and “I am 100% sure about this and I never need to question it again”. Things I know are 100% true are way easier to rely on.