One of my favorite projects from the last year is a system for taking and digitizing notes that also helps me learn. It consists of a system for saving notes built on Jupyter notebook and a workflow for taking notes and adding them to the Jupyter notebooks. By digitizing my notes, I can automatically feed them into a search index and flashcard database. I’ve been using these notes for my machine learning masters’ courses this year and I’m happy with the results.

This post covers the goal of my digitized notes system and the weekly workflow for note-taking. Its sister post shows what I can do with my digitized notes.

Part 1: Goals

I came up with four goals for my note-taking system.

  • Learn the subject: “Learning the subject” is super broad, and a concrete goal makes the project easier to talk about. For this post, I’m going to skip my philosophy on learning and say my concrete goal for “learning the subject” is “learn the subject so I can do well on the exam.”

  • Create useful notes: Knowledge fades if I’m not using it. I want to learn a lot of things, so I probably won’t remember everything I’ll eventually want to know. I could skim textbooks or other people’s notes, but that usually feels like I’m relearning the subject again. I have a feeling it’s quicker to refresh my memories off of notes that I wrote and understood in the past.

  • Create searchable notes: It should be easy to find these notes when I need them in the future. A way to make the notes searchable is to put them on a computer (i.e. digitize them).

  • The note-taking system shouldn’t take time away from learning.

But I think some tedious things can also be part of learning. I think a cool part of this project is that it exploits the learning process to make useful notes.

For example, I could photograph my handwritten notes and use OCR to search them. This would make digitizing and searching my notes easy!

However, I wouldn’t learn more about the subject by doing that. Also, my first draft of notes are the least useful notes I write and my notes become more useful when I rewrite them after I learn more about the subject.

Part 2: Learning

I tried to design my system so it would help me learn. I think two good ways of learning are to practice retrieving knowledge, preferably spaced out over time so it’s more challenging to remember and to explain the topic to others.

A few ways these are included in the system are:

  • I add notes in a form that is easy to convert to flashcards. Flashcards are a way to practice retrieving knowledge.
  • My workflow has me update my notes at different times of the day. This helps me space out retrieving knowledge.
  • My workflow and system encourage me to write a few paragraphs explaining my understanding of the topic. This feels like explaining the topic to someone else (in this case future-me).

Part 3: Jupyter Notebook

After trying many methods of storing notes in undergrad (hi Evernote, Org-Mode, LaTeX, paper, and digital pens), I chose Jupyter Notebooks for this project. Jupyter notebook lets me store notes in Markdown, Python, and LaTeX, which is perfect for my machine learning courses. I can also write custom code to build my system around Jupyter notebook.

See the sister post for a tour of how I use Jupyter notebook.

Part 4: Weekly study workflow

Below is how I structured my note-taking workflow to learn and produce useful notes. (I followed it closer some weeks than others.)

Before the lecture: skim slides and write preview

If I have time to skim the slides before the lecture, I sometimes write a sentence or two as a preview of what I think I’m about to learn.

During the lecture: Take notes as questions

In lectures, I take notes by hand, written as questions. A few of these questions are things I’m actually confused about. But most are rephrasing lecture points as questions.

For example:

Why do we care about conditional independence?

I’ll type up the questions later (see “Type up questions and answers”)

The night of the lecture: a quick summary

I set a timer for 3-10 minutes (depending on how late it is), and write as much as I can. I write about new things I learned, important points the lecturer made, and how the lecture connects to the rest of the course. I use a lot of “TODOs” to mark things I didn’t follow.

For example:

Today we learned about logistic regression. This can be used for classification. This is different from Bayes classifier because logistic regression is discriminative and Bayes classifier is generative (TODO:p1 what does this mean?)…

I try to write this summary even if it is getting late. It forces me to try to remember things (a step in learning!), and to do it right before sleeping.

The delay between the lecture and writing the summary is also useful because it makes it more challenging to remember the class.

I try to improve these summaries at the end of the week, but if I don’t get to it, they can function as summaries for reviewing.

Maybe the night of the lecture: Type up questions and answers

I type up my hand-written questions from the lecture and try to answer them. Sometimes I know the answer, other times I use the slides and the internet, and other times leave the questions for later with a TODO and priority marking how important I think it is to know this.

For example, here are some of my notes on logistic regression:

Example of notes

My Jupyter notebook setup turns cells into flashcards (see the tour). This gives these notes two purposes: being flashcards and reference material. When studying, I can view them as flashcards. Or if I’m trying to skim things or look up an equation, I can skim the question text like headers.

If it’s getting too late in the evening, I might type up the questions without answers. Or I might wait a few days to type up the questions.

End of the week: summarize

Finally, I type up an overview of what I learned that week and how it relates to rest of the course.

These were also extra useful to read before exams!

Part 5: Notes

The product of my workflow is a Jupyter notebook per topic (I tried something between “per lecture” and “per section” depending on the course). Each notebook has a summary of the topic. This might include an overview of how the topic works, how the topic fits together with other topics in the course or other courses, and why the topic matters in general. The notebook then lists details about the topic. It has headers for subtopics, each with a few questions and answers. The question-answer pairs could be viewed as regular notes with the minor weirdness that they happen to use questions as headers. By having the notes in a digital form, I could turn notes into flashcards or search them.

And by having my notes digitized, I can do fun things with them using code.).

See Also

  • Reading about learning! Many of my ideas for how to learn came from this.
    • Spaced repetition
    • Make it Stick, Peter C. Brown, Henry L. Roediger, Mark A. Mcdaniel
    • Deep Work, Cal Newport
    • Mind for Numbers, Barbara Oakley (better as a first book on learning)