Taking Notes

September 26, 2020 - 6 minute read

I admit it: I haven’t taken notes in a while. Back in university I was generally using OneNote and drawing quick illustrations on the touch screen of my Lenovo. But that was a while ago, and I just recently found a reason to take notes again.

I began the Coursera machine learning course and ended up looking into note-taking solutions, trying to figure out which would suit my style and the content of the course best. After bouncing between a few different tools, my final “stack” is:

  • Notion for taking notes (you can see the notes here)
  • Excalidraw for illustrations (I won’t discuss this further, but it is a great way to generate quick and easy graphics for notes without getting caught up on perfectionism — for an example see the graphics on this page)
  • Jupyter for running Python code (not actually required for the course, but I do it anyways so I can learn Python as I work through the course — you can view the notebooks here)

I chose these because they ended up working best for me personally, but they may not be the best fit for everyone. However, I’ll discuss more why I made the choices I did, and you can decide for yourself.

First, some requirements:

  1. The tool should allow me to take notes easily and quickly
  2. It should have good support for code snippets and math
  3. Notes should look good with minimal intervention

There have been an abundance of note-taking apps released recently (or not so recently), and many of them overlap in terms of functionality. I’m going to go through the ones I considered and explain why I ended up choosing Notion.

Tools that didn’t make the cut

Now for the options that I immediately ruled out:


Even though it served me well in university, I decided not to use OneNote for a few reasons:

  1. No native code snippet support (although it can be added with a plugin)
  2. I wasn’t really a fan of the infinite canvas approach, I like some more structure
  3. It feels pretty geared towards touch screens, and I’m not drawing my illustrations any more


The old reliable option. Definitely the most well-known out of all the options. Also probably the worst. I almost immediately ruled it out because:

  1. No syntax highlighting
  2. No latex support (necessary for a course like machine learning with lots of math)
  3. Limited formatting options (or at least obvious easy-to-use ones from my quick check)


The hyped new note-taking tool / early cult formation. People have been going wild for it on twitter, so I figured I’d look into it. At the end of the day I ruled it out for a few reasons:

  1. It costs money ($165 USD a year for “Professional”, or $500 USD for 5 years if you choose the “Believer” package… Hmmm)
  2. Notes taken with it don’t actually look that good (but that’s just personal preference, they don’t look terrible)
  3. It doesn’t offer me anything that other free options don’t have (or at least anything that I’d find useful for the kind of notes I’m taking)

Tools that I tried

And now the options that actually worked. One common pro for all of these options is they are free, or at least offer a free tier which I fall under.


I actually started taking notes with Obsidian, since it had backlinks which I thought would be useful, especially if I wanted to organize my notes by topic rather than by lecture. However, I ended up switching to Jupyter in order to be able to have the notes be public, and in order to run Python code.

Pros of Obsidian

  1. Super easy to link between pages using the [[Some other page]] syntax. Can also use that syntax for images which is nice
  2. Since Obsidian is just a file editor, you own the Markdown files it produces
  3. Full latex math support

Cons of Obsidian

  1. Limited by the fact it’s a Markdown editor in terms of formatting and syntax (also no way to format attached images so they aren’t full width)
  2. Since it is a local application that uses a unique syntax for Markdown, you can’t easily share the notes
  3. Even though I’m very proficient with Markdown (this blog is written in it!), it sucks to take bad Markdown-looking notes and have the actual nice notes in a different view


I switched to Jupyter to share the notes publicly and to run Python algorithms in-line. However, it suffered from the same Markdown weaknesses as Obsidian, and was an even worse tool for actual note-taking. I ended up switching to Notion, but continue to use Jupyter for supplementary Python examples related to my notes. All in all this isn’t really Jupyter’s fault, since it was never really designed for heavy-duty multi-notebook note-taking. However in my dreams there will one day be a tool with the features of Notion but with the ability for running in-line code.

Pros of Jupyter

  1. Being able to run Python code in-line is by far the largest benefit of using Jupyter
  2. You own the files
  3. Full latex math support

Cons of Jupyter

  1. Absolutely terrible for linking between files. Have to basically do [Other page](./other_page.ipynd) each time, and obviously that’s even worse if the path isn’t that simple. Jupyter definitely wasn’t made for that kind of note-taking. Same for images
  2. Same cons as Obsidian with relation to being a Markdown editor, although Jupyter has a edit mode for blocks rather than persistent Markdown, so the experience is a bit better. Nonetheless, I still found myself constantly editing then “running” blocks which was slightly inconvenient


Finally, I ended up trying out Notion and it stuck.

Pros of Notion

  1. Notes look immediately good, and there are more formatting options
  2. Decent latex support. Slightly worse than Obsidian and Jupyter since it only has Katex support, but still good enough for my use cases so far
  3. They just recently introduced backlinks which I’ve found to be quite nice

Cons of Notion

  1. Takes a while to index new pages so linking to them can be slow for the first bit
  2. A con that is specific to moving to Notion from Jupyter is I can no longer run in-line Python. However I still have Jupyter notebooks containing live Python code, and I link to them from the Notion notes so I still get the benefits of Notion and Jupyter
  3. No support for tables that aren’t databases. A bit of a bummer if you just want to make a simple Markdown table to display some information (like a training set which comes up a lot in the machine learning course)


I’m very happy with Notion so far. It allows me to take notes quickly, and hits all the requirement checkboxes. Additionally, it’s easy to share as a public site for my notes, which is an added benefit. To see the notes click here, and to visit the repository with code examples and Jupyter notebooks click here.