How I Learn (For the Long Term)

I enjoy learning how other people learn. Their ideas are battle-tested, cohesive, and manageable — at least to them. Experimenting with their ideas helps me stick to practical advice and find what works with my own approaches. In fact, I’ve been using a few new habits over the summer that I think they are worth sharing and could be worth your time to try.

I’ve focused on developing habits that identify and close gaps in understanding while helping internalize knowledge for the long-term. These goals hit directly what I want out of learning: to understand topics the low-level details to the high-level abstractions and to retain it all for the long-term.


Studying Spaced Repetition Notecards

Creating and studying notecards under a spaced repetition schedule is a major cornerstone to how I study new topics. It is the most valuable habit I can recommend to you when committing an idea to long-term memory. Further, I’ve found that studying notecards gives me a growing bedrock of knowledge that helps me learn new ideas with greater ease and context.

Tools of the Trade. My favorite tool for studying notecards under a spaced repetition schedule is Anki, but let me explain the process first.

Spaced repetition takes advantage of the fact that each time we recall something, we are likely to remember it for a longer amount of time. When we don’t use that item of information, we exponentially lose our ability to remember it, a phenomenon researchers call the “forgetting curve.” Spaced repetition combats this decay of knowledge, with plenty of research supporting the notion, but Gwern Branwen put it best in his comprehensive literature review, explaining:

Spaced repetition is a technique for efficient memorization & practice of skills where instead of doing a lot of work quickly, each item’s practices are automatically spread out over time, with increasing durations as one learns the item.

In the context of studying notecards, this means when you answer a card correctly, the next review for that card will come after a longer break of time; if you answer a notecard incorrectly, you can expect to see it again sooner. This way the spaced repetition program is optimizing your studying, spending more time testing you on notecards you don’t get correct and only occasionally checking you on cards you do get correct.

If this idea does not make intuitive sense to you or you want to see the scientific evidence, I’d recommend reading the previously mentioned literature review by Gwern Branwen. Also, if you are wary that notecards are any good for software engineering, keep reading. I’ll address that concern soon.

The forgetting curve with spaced reminders.

Side Benefits

While spaced repetition can help you internalize anything you turn into a notecard, I’ve personally found additional benefits to using them.

  • Studying notecards keeps foundational knowledge strong. There is great comfort in knowing that once you put an idea on a notecard, the spaced repetition system will fight for you to remember it forever. I often add notecards for foundational concepts, such as commonly used ideas from math. This way, when I learn a new idea that builds off of base knowledge, I can go straight to what is new and interesting rather than spending time to remember the basics (or worse, relying on a fuzzy, ill-defined concept of the basics). To me, deep understanding is knowing both high and low-level knowledge, and notecards help me grow and maintain both.
  • When I review with a critical eye, I correct old misunderstandings. In my opinion, the proper way to review is with a critical eye; you should not mark a card as correct if you cannot explain why you are correct. Reviews often lead to catching misconceptions and oversimplifications on old cards, prompting me to update them and my understanding. Because reviews bring up old ideas, they can also help you draw connections between the old and the new.
  • Summarizing topics in small chunks helps find gaps in understanding. Taking a topic and breaking it down into small, testable notecards requires understanding what is most important about that topic. Additionally, you must convey in only a few words — notecards simply don’t have space for waste or long-windedness. Richard Feynman famously believed that “if you can’t explain something in simple terms, you don’t understand it,” and the same is true here.

Software

There are plenty of spaced repetition programs, but I’ve always loved Anki for being really powerful. It supports easy templating, cloze deletions, iOS & Android apps, and has a variety of well-supported extensions. In all, I recommend you use:

Making Good Notecards for Software Engineering

I study software engineering with notecards all the time, and it goes far beyond simply memorizing vocabulary, formulas, and APIs. While you may think of notecards as something for law students, aspiring polyglots, and anyone else requiring rote memorization — notecards are capable of so much more.

There are so many ways to write good questions. You can make notecards that challenge you to write small snippets of code, that require you to summarize a topic’s main takeaways, that test you on the steps in a process, that ask you to explain why something is true, or that test your ability to recall a critical function in an API. Notecards are all about building fluency, you just have to find a way to test your software fluency.

Tips for Making (and Studying) Notecards

Many people like making software engineering notecards by using Jack Kinsella’s Janki method. While he has good ideas, I strongly disagree with some of them, so instead, I’ll propose my own set of advice:

  1. Not everything should be made into a notecard. If you make too many notecards, you will end up spending a lot of time learning unimportant information, so it’s best to focus on making lean, efficient decks.
    • I don’t make a new card for everything new I learn — it would break the flow of my work and create too many cards. Instead, I like to keep a text document of notes that I can go back to back later and decide what is worth turning into notecards.
    • Make cards the first time you forget something you already learned. This ensures you focus on practicing ideas you actually need and skip any ideas that just stick with you.
  2. Make a notecard when you learn from a mistake.
    • This comes from the fifth rule of Janki “Every time you make a mistake carry out a post-mortem and try to figure out the lessons in the experience. Think about what you would need to know to prevent that mistake from occurring again, and turn this insight into new flashcards.”
  3. Make naturally worded notecards.
    • Make notecards sound like your own internal dialog. This way, when you ask yourself something like, “What’s so great about inception modules?” you already have an answer.
    • Coding questions are better if you put some context on the card. For example, state what coding language or library you are using, include a topic tag (“Sorting,” “Graphs,” “Computer Vision,” etc.), or state what variables already exist.
  4. Break down cards that are too big, but don’t make them too small.
    • Cards that test multiple items of information can be hard to remember. In addition, you may keep getting tested on all of it just because you forget one thing. When possible, it is good to break the question into smaller parts.
    • While it is good practice to break complicated cards into smaller ones, going too far can lead to cards that are so elemental they no longer make sense. In other cases, you may want to group information because you want to recall them as a group. So, be careful.
    • I lean towards making medium size cards (1-4 items to recall) and break them down as needed.
  5. Tend to your cards.
    • As you learn more, you may realize mistakes in your past notecards. Make sure to mark these for correction later.
    • The seventh rule of Janki. “Delete or modify any incorrect, outdated, difficult to remember, incomplete or unnecessary cards. Update existing cards as improved understanding dawns.”
  6. Avoid burnout by lowering study intensity.
    • Some people starting out with studying notecards get overwhelmed by having too many questions scheduled each day. In this case, you should reduce the number of reviews or increase the baseline gap between reviews. It is better to be consistent than give up.
    • Some people get bored from having too many easy reviews. If reviews are boring, it might be because they are not challenging enough or are appearing too soon. In this case, you should increase intervals between cards. For Anki, you can find this in Deck Options.
  7. Use Templates and develop your own consistent style.
    • Making your cards easy to read is extremely helpful. Ever since I started to use these Anki card themes with syntax highlighting I’ve been so much happier with studying and faster at making good cards. This template provides plenty of space for code blocks and specifying the context.


The “Things I Don’t Know” List

While reading, coding, or studying notecards, I occasionally run into new concepts I’d like to learn or ponder on a question I don’t know the full answer to. In these cases, I add the idea to a list of “Things I Don’t Know,” and come back later to figure it out.

For example, while studying Dijkstra’s algorithm I heard about the Fibonacci heap, which is often used to speed up the algorithm. Because I was interested in finding out how Fibonacci heaps work, I added it to the list. In another example, while working on a neural network for image classification, I realized I did not know why the softmax function is used to scale logits (rather than some other normalizing function). I added the question to the list to investigate later. In the coming days (or weeks) I’ll return to these questions and address them.


Optimizing for Comprehension (Not Time) While Reading

I’ll admit, this is probably the least fancy recommendation I can give you, but I find it important none the less. There are three things I like to do while reading:

  1. Don’t move on until you understand everything so far. In software engineering, topics compound on each other. To understand one topic, you need a strong grasp of all those before it. Accordingly, you shouldn’t skip things you don’t understand or else you won’t understand everything that builds on it. It’s more important to prioritize understanding than to prioritize time.
  2. Don’t make notecards while reading. To make a good notecard, you need to see the forest for the trees by making notecards after reading. With the context of the topic as a whole, you will be better at picking only the most important parts to turn into notecards and how to break the important parts into bite-size pieces.
  3. I love making notes in the margins. This is one of my favorite things to do to keep myself engaged with my readings, though I’m sure this one is especially different person to person. To do this, I use my iPad Pro with the Apple Pencil and absolutely love it. I add extra margin space (for writing) using a PDF editor (PDF Exchange) and then mark up textbooks in PDF Expert. It’s great.

 


Fin

That’s all I got for now. I hope you’ve found something interesting to try out yourself, and please leave a comment if you need extra help or found one of the ideas to be helpful. If there’s enough interest, I keep on sharing any new experiments in productivity.

Thanks for reading!

2 thoughts on “How I Learn (For the Long Term)

  1. Hi Peter:
    I am looking around embedded card that I can use to capturing images and measure the distance. Of course R Pi come to my mind (My son model kits) then Beagle Board….,to cut story short I end up reading Jetson from Nvidia (famous for gamer), with some googling , i landed on your blog. Please bear with me.
    I learned programming the hard way (buying tons of books), I can say from school of hard knock. I have experience in vb and c#, a little bit of python (my sons are learning it now, so i am the assistant) SO the Monster C++, how hard for me to use it with Jetsto TX II for Imaging and servo control (pan tilt (2 axis)), as I want the camera follow an object and by meant of LIDAR sensor providing the distance. The objective is to give that object to go to a specific location (like parking a car).

            It is my hobby. So Any suggestion for me to jump start ?
    
    1. I would look into getting a kit if you are interested in using motors, cameras, lidar, and more all at once. Lidar alone can be expensive, and the Jetson computers will need a extra motor controller board to drive motors.

      Two things come to mind.

      First is the Nvidia Jet robotics kit, which has everything you need to at least get a robot to identify objects and drive towards them. Unfortunate, they dont make them any more, but you might be able to copy the parts.

      A better idea might be the Turtle Bot, which comes with great motors, a Raspberry Pi, and lidar. You could even upgrade the Raspi to a Jetson device later if you wanted to do something more intense like neural networks.

Leave a Reply