Photo by Priscilla Du Preez on Unsplash

I’m very interested in improving my ability to learn technical concepts efficiently. In this article, I’ll go over the heuristics I’ve found that work well for me: Read actively, use multiple sources/formats, work at memorizing, apply the concepts, and finally teach.

It all started with the observation (one I’m sure many of you are familiar with) that I have an interest in learning many things, but only some of those things stick after trying to learning them. I’d read a book, or watch a video lecture, only to then run into roadblocks. Some of the content I would be able to pick up easily, only to forget it later. Other content would be too opaque for me to make much progress with. The worst was content I thought I had learned, but would then struggle with when it came time to write down my thoughts on the subject or to talk about it with others. This is all extremely discouraging: what’s the point of learning in the face of all these issues?

Before getting into it, a couple of notes:

The following heuristics represent my current personal strategy, and I have no idea if they’ll work for you. I think they’re all pretty useful, but I’m sure they’ll continue to change as I learn more.

Where applicable I’ll link to the resources that have inspired these points or that I’ve found useful.

Most of the content I’ve been trying to learn recently has been technical/programming concepts, including the Rust programming language and fundamental computer principles.

And with that, my heuristics for learning effectively:

Read with intent

Most of the learning you’ll end up doing will probably be via reading. This is because most content is written, especially the niche or advanced stuff. Even so, this guideline also applies to things like video lectures. The problem that lot’s of people fall into, or at least that I’ve fallen into, is that there are two distinct modes for reading: active and passive. Passive reading is the easy kind of reading, and it’s the default mode. This is the way I’ve found myself reading most novels and shallow content like blog posts and social media. You can’t read to learn like this. You have to instead read actively. You have to focus on the main ideas, pause on topics you don’t understand until you can find a way to understand them, and also give your brain time to digest new material (don’t cram). These are all parts of what it means to read actively.

Active reading is something that has been in sort of the periphery of understanding for me. In other words, it’s something that I knew was there but didn’t know how to do the right way. I probably still don’t know how to do it the right way, but reading the book How to Read a Book really changed the way I practice actively reading. There’s a good tldr; of the book made by the University of Michigan that expands on the principles above.

The tldr; of the tldr; (just read it, it's 11 pages with lots of pictures) that you should read the same material multiple times. The first read to skim and understand the main concepts, another to deeply understand the specifics of the material, and a third to synthesize that material with other related material. It also goes into some specific techniques for how to outline and extract important content from a written resource. I've found these techniques super useful, especially when combined with tools for memorization, the next learning heuristic I'll outline in this article.

Commit your learning to memory

The basic prerequisite for any learning is that you have to have a baseline understanding of whatever the topic or content is. Once you have that, you then have to remember it. Accomplishing this part might seem a bit opaque, and it is — without the right tools. The right tool definitely seems to be Spaced Repetition Learning. The details of that concept are very interesting, and you should definitely look it up if you’re inclined, but it boils down to the idea that if you review material right before you’re about to forget it, you can go longer and longer times between reviews without forgetting. Eventually, you’ll never have to review it again, you’ll just remember it forever.

Tools like Anki and Mochi help you do this pretty easily. My current workflow is to identify main points or vocabulary (via highlighting or written notes), then to distill those into Anki cards which I then review. I also constantly delete and update existing cards to keep the my decks free of stale information. This happens as my understanding on topics becomes more nuanced or I decide a particular concept isn’t worth remembering any more. An important part of using spaced repetition is that you have to be consistent: committing to reviewing cards regularly is a necessary part of the process.

Spaced repetition and Anki in particular have been written about by people more experienced than I. In particular I’ve learned a lot from The Janki Method by Jack Kinsella and Augmenting Long-term Memory by Michael Nielsen.

Vary your learning resources

This heuristic is pretty straight forward, but I think it adds a lot to the learning process. For very niche or advanced topics this might be harder, but ideally you should find multiple resources on the same topic, and consume them in parallel. I’ve found that having a written resource like a book or series of articles, along with a video-based resource like lectures or a MOOC class works very well. This guideline becomes especially helpful when I get stuck on a particular concept as it’s presented by one resource. For example, I had a hard time understanding referencing and dereferencing values in Rust as it’s presented by the Rust Book until I watched a YouTube lecture on that specific topic.

How you vary your learning resources is up to you. I’ve found that I learn really well by mixing textbooks and MOOC courses, but you could also explore audio books, in-person classes, or finding a mentor. For programming, I’ve also used interactive learning resources like Codeacademy and rustlings, to name just two.

Make something

The previous three points are roughly half of the battle (in my mind) when it comes to gaining a real understanding of a new topic. The other half is all about having context and purpose around your topic of choice. If you aren’t doing anything with what you’re learning, then what’s the point?

It can be helpful to have a project/goal in mind before you start learning at all, but that’s not always the case. I’ve definitely run into situations where I had an abstract interest in a topic, but didn’t really know enough about it yet to come up with a project. However, I think at some point you have to anchor the academic thought-stuff of whatever you’re learning in the messy reality of a project. For me, most of my recent learning has centered around programming, and so most of my projects have been programs.

For non-programming topics this applied portion of the learning process will obviously be different. Some possibilities are a physical creation, artwork, blog post, etcetera, etcetera. The important part is that you apply what you’re learning.

Teach

The real test for whether you really grok a subject: can you teach it to someone else? Even if you can’t that’s usually OK too. I’ve found that the process of trying to instruct someone else on a topic serves two purposes. It both reinforces my previous learning, and clearly highlights the gaps in my own understanding. The reinforcement is useful, but getting a better idea for what you don’t know is even better. It’s fine to take a shot at teaching something you’re still learning yourself. It’s part of the learning process, and you’ll be surprised by the number of insights you can provide for others even if you don’t have a perfect grasp yourself.

Teaching can take numerous forms, but it doesn’t all have to be the stand-in-front-of-the-class, draw-it-on-the-whiteboard variety. Most of the time, “teaching” can just consist of a conversation with a colleague or friend, or an article about the subject you’re learning.

Notes

Notably, these guidelines shouldn’t necessarily be done in the order I’ve presented here. There are constant feedback loops between comprehension, memorization, application, and instruction, and you should find yourself switching between them fairly regularly. Also note, it’s best to go without too much rigid structure (at least that’s how I’ve been doing it).

Everything I’ve written here has been written or said by someone else before me. There’s nothing groundbreaking about any one of these points, but it’s taken me a while to distill these ideas and make them applicable to how I learn. Hopefully some of you will find the distillation useful.

Thanks for reading.