I had a really hard time naming this post. It’s hard not to make it sound like something dodgy, like some of those ads that promise you 20K a week with some little secret that will be revealed if “you just click this link”.
No, this is not like that, it actually requires effort. This post is about being smart about that effort. It is mostly about memory, how it works, and how you can make it work in your favour.
There has never been a need to learn new things so quickly, especially if you work as a software developer. It feels like there’s a new framework every other day, new tools, new ways of doing things. Pick a name, add “js” to it, and chances are that you’ll find a library/framework/tool with that name. JavaScript fatigue is now a thing.
Turns out most of us don’t have a good understanding of how our memory works. We completely overestimate how long we will remember something that we have just learned. If we are exposed to something just once we tend to forget it really quickly. The graph below is known as the Forgetting Curve:
And the tragedy here is that the strategy that most people have for learning a new subject is to read, maybe practice a bit and then stop. And because we overestimate our ability to remember, when we actually need to remember we can’t.
To make matters worse there never seems to be enough time to study. We are expected to work long hours so we can only study a bit on the weekends, or every couple of days. It often happens that when we pick up where we left we forgot about what we learned from the previous time.
Turns out that not all is bad. If we use our memory properly we are able to do incredible things. Would you believe if I told you that with very little practice it is possible to memorise the order of a full deck of cards. There are even tournaments for that. The world record is 20.44s, that’s right, less than 21 seconds.
The techniques for doing that involve using your imagination to mentally build stories that involve all types of perceptions (e.g. spacial, smell, taste, sound, touch).
It does not hurt to know about these techniques. They will help memorise pretty much anything. If you want to learn more about them I recommend Dominic O’Brien’s book “You Can Have an Amazing Memory”. Also, if you want to try memorising a deck of cards try my Windows Store App Memory Ace (also on Windows Mobile).
Even though these techniques are very helpful, on their own they don’t solve the problem that given a few days you’ll forget what you learned if you don’t review it.
The solution is to accept that reality. We forget things, so we must review them in order to not forget them. At first this may seem impractical, it takes too much time, too much effort.
But that is not necessarily true, I want to share with you a “system” for doing this.
Every time you want to learn a new subject (e.g. technology, tool, framework, library, …) you read about it whenever you have time. Be it in the half hour train ride in the morning to work, during your lunch time, it really does not matter. But every time you learn a new concept you transform it into a question/answer pair.
For example, imagine you’ve decided to learn AngularJs and you’ve just learnt about the ng-show
directive, you could write this question/answer pair:
Question:
Imagine you have an angular controller with
a property named isVisible (with a boolean value)
How would you use that in a template?
________________________________________
Answer:
<div ng-show="isVisible"></div>
Source: https://docs.angularjs.org/guide/animations
Or for example if you’ve learned about the ng-src
directive:
Question:
Imagine you have an angular scope with a
json object named phone. phone has a imgScr
property with a url to an image
Use it in a template to display the image of the phone
____________________________________
Answer:
<img ng-scr="{{phone.imgSrc}}"/>
If you use src="{{phone.imgScr}}" the browser will perform
a request as soon as the img tag is read, and this is before
angular had the chance to replace it with the intended value.
Source: https://docs.angularjs.org/tutorial/step_06
After creating these question/answer pairs (which on their own help memorise whatever you are learning) you will then use them as your material for reviews. When you are reviewing, you read the question and try to answer it mentally.
The good news is, you don’t have to review very often. And the better news is that every time you review something the likelihood of you remembering it for longer increases (a lot). Here’s a graph that shows how that looks:
The optimal rate of review is relatively well known, and thankfully there is software that can schedule it for us. That software is often referred to as Spaced Repetition software.
My favourite software for doing this is Anki. When you use it, you add question/answer pairs and then Anki will schedule them for you. When you answer a question you can report how easy it was to remember the answer, and that will be used to schedule when to ask that question again.
I’ve been using it for a little less than three years (1013 days today). I can share some numbers with you so that you can have a notion of how much time the review process takes.
In these almost three years I’ve spent a total of 137 hours reviewing things. I spend an average of 8.7 minutes a day reviewing (I usually do it while I take breakfast). If you think about it that is an incredibly small amount of time given that I have added almost 3000 questions to Anki. That’s 3000 pieces of information that take an average of 8.7 minutes a day to maintain. And that number would certainly be lower if I wasn’t always adding more information (you have to review more often when the information is “fresh”).
If you are a gamer, you’ll probably immediately recognize how small a number 137 hours is. Nowadays games keep track of how many hours you’ve been playing them. I’m not a heavy gamer at all, only play a little bit online during weekends. I have more hours of playing Battlefield 4 than that.
Here’s how successful I’ve been in recalling:
Anki distinguishes the recency of the questions as “Learning”, “Young” and “Mature”. A mature question is over 21 days old; young is less than 21 days and learning is a question that has yet to be reviewed.
Practical tips for creating your own questions/answers
The most important tip is: do not use other people’s questions. The exercise of creating your own questions helps immensely to process the new information you are learning. Also, if you misunderstood something, that becomes clear very quickly when you are thinking about a way to transform that new knowledge into a question/answer pair.
Have questions that are focused. For example, do not write a question that asks you to enumerate all the options available in jQuery validation’s validate method. Add a question with a scenario relevant for each option if you really want to know them all by heart.
You need to understand the answer. If you don’t understand the answer you will always forget it.
What I mean by not understanding is: you can’t mentally link the information you want to remember with other things you know. For example, if you try to memorise that in angular calling .service is just syntactic sugar to calling .factory and returning a “service”, but you don’t know what a service and a factory are you’ll very quickly forget this fact.
This also helps you guide your study. Every time you find something you don’t know, you investigate that, and then come back to what you were studying. In this example, that would be figuring out what a factory and service are in angular.
This last tip might not seem too important, but I cannot stress enough how important it is. The sad fact is, most tutorials, books, manuals, training videos are not very good. A good technical writer is capable of having a mental model of what the reader knows given what was explained, however most seem to lack this skill. A lot of material will mention new concepts as if the reader is as familiar with them as the writer before they were properly explained in the text/video. The advice here is: stop, figure out what you don’t know, learn that, and then continue.
Conclusion
Accept that we forget things if we don’t review them. Reading a whole book to learn that new framework that will land a higher paying job during a weekend is not a good strategy. Instead while you read create review material (question/answer pairs) and review it every day (it takes less than 10 minutes per day).
This way you can use all those small free moments (train ride to work, lunch hour, a pomodoro in the evenings) because you will remember everything you learn. You can study a bit today and then continue a month from now if for some reason you could not do it before.