John Keith

Hi, I'm a developer that loves Ruby, Rails, Angular, and iOS.

Spaced Repetition and the Novice Programmer

Nothing compares with that moment when an idea hits you over the head like a ton of bricks labeled “Duh!” I experienced one of those today after coming across this great Medium piece by Mattan Griffel about using spaced repetition for improving recall, then following that to an article by Derek Sivers about studying programming languages using the same technique. At the end of Sivers’ article (and after reading that this idea has been around for over a century!), I was left wondering why spaced repetition is not a foundational part of any and all learning we do.

It is hardly a complex concept: spaced repetition is the reviewing of learned information at specifically defined intervals, with those intervals being determined by your comfort with the information. You commonly run across this technique in flashcard apps – the Brainscape suite of apps is a good example, along with the more DIY example of Anki that Griffel explores. The difference from the 3 x 5 colored notecards you made in middle school is that Anki and Brainscape are both powered by algorithms that decide when you should view each flashcard. This allows for a much more focused reviewing – the cards with basic information only show up sporadically, while the cards containing more involved ideas or information that you find yourself struggling with appear more frequently.

Brainscape web version (The colored rating buttons at the bottom of the image above are part of the mechanism for determining when you will see certain cards in Brainscape. The higher you rate how well you knew the information, the less you will see the card.)

What baffles me is that spaced repetition is not built into every online learning platform. Imagine working on a Treehouse track or a Codeacademy course and being intermittently offered opportunities to quickly review the information you have been absorbing from other lessons. For the novice programmer, this repetition would be invaluable, as so often you learn about a new function (Ruby’s inject always comes to mind for me) or quirk of the language and then do not see it again for a long stretch of time. The huge amount of information to absorb and explore in the early stages of learning a language makes deliberate and meaningful repetition of what you’ve covered essential.

What also surprises me is that we do not see spaced repetition more in offline curriculum. I cannot imagine how much better my long term understanding and ability to use what I learned in insert any high school subject here would be had we been taught to use spaced repetition tools. It seems our whole education system is focused on the forward – the next chapter, the next test, the next year – and is a system that does not reward the concentrated study that leads to mastery. You have to wonder too if part of the motive for this forward inertia in our educational structure is profit: how many SAT cram courses/books/apps are you going to sell if students actually learn the material they need to know the first time they are taught it?

That said, I’m going to dive into the Anki app and see what I can create as far as a flashcards repository for learning Ruby and Rails. Depending on how the app works, I’ll try to post what I develop here for download.