Dave's Blogo-Musicical Hack Shack

A place to share my experiments in code, music, and digital marketing.

My Practice Regimen for Retaining Information About Programming

Spaced repetition, Anki, Derek Sivers and more

I like to listen to Tim Ferris' podcast (Author of The Four Hour Work Week/The Four Hour Body) and he happens to be a big fan of Derek Sivers.

Derek Sivers is an entrepreneur best known for being the founder and former president of CD Baby, an online CD store for independent musicians.

A professional musician (and circus clown) since 1987, Sivers started CD Baby by accident in 1997 when he was selling his own CD on his website, and friends asked if he could sell theirs, too. CD Baby went on to become the largest seller of independent music on the web, with over $100M in sales for over 150,000 musician clients.

This nugget of Derek Sivers wisdom below is what inspired me to apply to Flatiron:

Moving on. My cousin alerted me to an article Sivers had written entitled "Memorizing a programming language using spaced repetition software". This shot me over towards Jack Kinsella's blog for an article titled "Using spaced repetition systems to learn and retain technical knowledge."

I immediately drew a connection between the best practices in musical practice and their application to the world of programming. I gave it a shot and my understanding of concepts increased dramatically. Using spaced repetition to practice is said to be able to increase long-term retention from 20% to 80%.

Behold a an application called Anki.

Anki

Anki helps you build a series of digital flash card decks with a variety of different ways of hiding or obscuring info while you drill.

Anki is designed around the core concept of spaced repetition.

Spaced repetition is a learning technique that incorporates increasing intervals of time between subsequent review of previously learned material in order to exploit the psychological spacing effect.

Although the principle is useful in many contexts, spaced repetition is commonly applied in contexts in which a learner must acquire a large number of items and retain them indefinitely in memory.

It is, therefore, well suited for the problem of vocabulary acquisition in the course of second language learning, due to the size of the target language's inventory of open-class words.

So as you can see there's already been a ton of research into the best way to learn a spoken language. It took a musician like Derek Sivers to recognize that it could be used just as efficiently to practice the memorization of programming languages too.

We musicians are all too familiar with practicing.

The idea is that you show up to practice once a day and all the cards due are in a queue. As you review each card you mark it based on how well you knew the material. Anki will use your review to space the card sooner or further out.

Card Curation Criteria

  1. Each card must be useful
  2. I need to mostly understand the concept before I save the card.
  3. I try to spend as little time as I can creating and modifying the look of the cards because even though it satisfies my OCD it unfortunately takes way too much time.

In the best case scenario I want my card to be an individual nugget of knowledge. When I get lazy about making cards sometimes I put a long problem on a card. Sometimes that's fine, but I've found that if I end up getting too many time consuming hard level cards in a row it really wears my brain down fast. This is rapid fire drilling.

Techniques for making cards

  1. Screenshots, Screenshots, Screenshots - See my post on Keyboard shortcuts I can't live without. Screenshots are the easiest way to copy the formatting and look of the code from anywhere on the web. Some say that it improves your memory to see images from the original website you learned the concept on.
  2. Break hard problems up into individual steps per card. Put everything you might need to solve that individual step absent all the other steps on the front of the card. Screenshots are great for your memory, but you should also cut and paste the raw text into the card so that you can quickly cut and paste any template problem data into atom.
  3. Each time you do that card you can clarify your answers with screenshots from relevant ruby docs and you can make your problem setup more efficient by having tests ready to cut and paste. The faster you finish the better.
  4. Keep in mind each card is an excellent place to keep notes during class and there is a browser in Anki to view your decks and cards from a high level. I'm still working on a useful and adaptable enough tagging strategy to help search for cards quickly so if you come up with one let me know.
  5. It's best not to make too many decks and to keep your info as central as you can. One thing I have tried is adding each method as a tag so that I could find all the cards that used a certain method. I'm not sure if that's going to be helpful yet though.

Anki Plugins and Services

There’s an IOS and Android App. It also supports Mac OS and Windows 10 and there is a Anki Cloud Site that will sync your decks and review stats between devices. This is cool because then you can review on the go.

Anki add-ons let you display cards differently, add more options to Anki, and change the interface to be much nicer. I recommend you install the ‘Must Have Add-on.