Anki - Learning with Spaced Repetition Apps

Anki - Learning with Spaced Repetition Apps

Intelligence-based Superpower you can actually have

Published on Sunday, July 11, 2021

Spaced repetition is a learning technique often performed with (digital) flashcards. New and more complex cards are shown more frequently, while better known are shown less.

Why does this work so well?

Learning is more effective when study sessions are spaced out. More information is "stored" into long-term memory by spaced study sessions than by more extensive/longer study sessions. This is known as the spacing effect.

For more formal research into this subject, start with Piotr Woźniak, creator of the SuperMemo.

Why does digital work so much better than analog?

You can also use analog flashcards in spaced repetition style, which works well. However (in my opinion), the "true power" of modern spaced repetition apps comes from the fact that you can use them anywhere, anytime. Just take your phone and have a short study session! You don't need any preparation - it can be just like a short level on most mobile games (e.g., Angry Birds).

Also, card preparation and management are more straightforward. You can use more than text, images, sounds, 3d models, and even more specialized knowledge like analysis of chess boards! Copy/paste helps too.

Modern-spaced repetition apps have a mobile, tablet, desktop, and web versions with syncing capabilities, often for all major platforms (Windows, macOS, iOS, Android, Linux, etc.).

Algorithms for Digital Spaced Repetition

SuperMemo was one of the first learning software that used spaced repetition. Since the first version, in 1987, there have been many algorithms. But the original SM-2 algorithm is still the most popular, used in various other popular flashcards applications like Anki and Mnemosyne.

For details on how the SM-2 algorithm works, check out the Wikipedia article for SuperMemo.

How does this work in practice?

  • Prepare the flashcards and the deck.
    • Set a question - like "Singleton Pattern."
      • Set an answer - it can be UML, brief description, etc.
    • Do the same for other classic GoF patterns.
  • Start the Learning Session (Can be very short - only a few minutes!)
    • Get the Question
    • Answer the Question best you can (to yourself)
    • Show the Answer
    • Do the Self Evaluation - Grade yourself.
      • Depending on the grade, the card will be shown more often if the grade was bad or less if the grade was good.
    • Jump to the next question
  • Repeat Learning Sessions as often as you want
    • Algorithms usually work daily
      • If you grade the same grads with good grades several times in a row, you will not see these cards for some time (weeks, months)
      • e.g., the singleton is easy, and you will not get this question for a few weeks, but the bridge pattern is much harder, and you will get this question much more often
    • You can usually have as many decks and flashcards as you want

Anki App

Anki is probably the most popular flashcards app. It's an open-source, free program (the iOS app is commercial) with an extensive library of plugins and many free predefined decks (of flashcards). The name "Anki" comes from the Japanese word for memorization. Anki is based on an older (but still great) SuperMemo algorithm - SM-2.

Anki Droid
Android version of Anki

Dowload Anki from official site: desktop Win/Mac/Linux, Android, iOS

Check out very active Anki Reddit Forum!


AnkiApp ( is not Anki! Ankiapp is not bad per se, but they could have used other names and not try to confuse users.

Other Spaced Repetition apps

Mnemosyne - is an older spaced repetition flashcard app. I had used it long ago before I moved to Anki.

There are many other space repetition flashcards programs. Some of them are more specialized, like for medical studies (Firecracker) and learning languages (DuoLingo).

Flashcards for Developers?

Some ideas for decks:

  • Quotes
    • "It is often easier to ask for forgiveness than to ask for permission."
      • Grace Hopper
  • Faces/People
    • Konrad Zuse
  • Design Patterns
    • Question does not have to be "What is the Singleton Pattern?". Other ideas:
      • Pros & Cons
      • Applicability
      • Relations (with other Patterns)
      • Synonyms
  • Data Structures
    • How often do you use Data Trees?
      • Probably, not that much, but it's nice to have an option for a quick reminder
  • Logic Problems
  • System Design Examples
  • Interview Questions
  • Technology Specific
    • Flashcard for .NET/C#
    • Code Snippets
  • Keyboard Shortcuts and Snippets
  • Preparations for Certificates
    • Study Lessons
    • Questions
    • Notes
  • Book Notes
    • I often copy notes to Anki from more interesting books
      • You don't even have to put an answer!
  • Cmd Commands
    • You can use "reverse card" type of flashcard
    • e.g. - Two cards for one set of Questions/Answers:
      • cd - change directory
      • change directory - cd
  • Stackoverflow answers
      • And since there are about 7×1022 stars in the universe, and just under 2128 GUIDs, then there are approximately 4.86×10^15—almost five quadrillion—GUIDs for every single star. If every one of those stars had a world with a thriving population like ours, then around each and every star, every human or alien who had ever lived would be entitled to over forty-five thousand GUIDs. For every person in history at every star in the universe. The GUID space is at the same level of hugeness as the size of the entire universe.
      • When I am having a big heated discussion at work, I use a rubber chicken which I keep in my desk for just such occasions. The person holding the chicken is the only person who is allowed to talk. If you don't hold the chicken you cannot speak. You can only indicate that you want the chicken and wait until you get it before you speak. Once you have finished speaking, you can hand the chicken back to the moderator who will hand it to the next person to speak. This ensures that people do not speak over each other, and also have their own space to talk.
        Replace Chicken with Mutex and person with thread and you basically have the concept of a mutex.
        Of course, there is no such thing as a rubber mutex. Only rubber chicken. My cats once had a rubber mouse, but they ate it.
        Of course, before you use the rubber chicken, you need to ask yourself whether you actually need 5 people in one room and would it not just be easier with one person in the room on their own doing all the work. Actually, this is just extending the analogy, but you get the idea.
    • ...

Check out Dr. Piotr Wozniak's Effective learning: Twenty rules of formulating knowledge for flashcard creation recommendations.

Shared Decks

Many Apps have a large number of shared decks, where you can download already prepared decks. However, with few exceptions (like maybe languages), I don't think this is the right approach. Deck maintenance and flashcard creation are essential parts of learning.

For example, I like comic-style pictures from for design patterns. When I'm using some of the patterns, I often think of those pictures. Is that the best approach for everybody? Of course not! But, do not underestimate alternative and personalized approaches for learning.

There is a reason why Design Patterns: Elements of Reusable Object-Oriented Software is still Amazon's bestseller, but there is a reason why Head First Design Patterns is on the bestseller list too.

How to start creating Flashcards/Decks?

Just create a few and review some of the old cards, but do it (almost) every day!

In my opinion, there is no need to create a large number of cards at once or even to review many cards in a single session. Just 3 cards a day is more than 1.000 flashcards a year! Knowing 1.000 flashcards from a single subject is a lot! The goal should be long-term learning, not a quick hack.


In my opinion, creating and maintaining decks daily is not a big sacrifice because you are not just gaining deep knowledge about the subject you are interested in, but also an easy way to quickly and efficiently refresh memory and re-learn.