Derek Sivers: "The method of interval repetition is the best way to learn programming languages"
- Transfer
Derek's speeches on TED were viewed more than 5 million times, and his own book ranked the first line in the chart of business books on Amazon.
Derek regards himself as an "eternal disciple."
I have been using this training method for a year now and I can say that it is the most effective one I have come across in 14 years of studying programming.
My history
I admit, I'm a mediocre programmer. I have no special education. I just learned something because of the need - I started a small CD Baby site that over time began to grow, and since I could not afford to hire a specialist, I just spent about $ 25 on books on PHP, SQL, Linux and Apache. Of these, I learned the minimum knowledge that helped me maintain the site in working condition. For years, I used this modest set.
However, later, when I had the opportunity to work side by side with REAL programmers, I was just amazed at the amount of their knowledge. All of these commands and functions just bounced off their fingers. We used the same language, but they kept in memory such an incredible amount of information that I felt like a third-year student next to a university professor. I wanted to achieve the same speed of work.
I thought about how many times over all these years I studied and forgot something. I read some interesting technique in a magazine or book, tried to use it once, after which something distracted me, I forgot about it, and continued to do everything in a familiar way.
I wanted to reliably put the commands and language tricks in my memory so as not to forget them and be able to use them at the right moment.
Interval repetition
When you come across a new fact, you run the risk of forgetting it soon, if it does not occasionally flicker before your eyes.
This can happen by chance if, for example, if you immerse yourself in one or another language, you will occasionally stumble across the words you are learning.
However, according to the results of the study, the most effective time for the repetition of what was learned is the moment when you are about to forget it.

Suppose you have learned a new foreign word. Repeat it a few minutes after you heard it, then after a couple of hours, then after a day, then after 2 days, then after 5 days, then after 10 days, 3 weeks, 6 weeks, 3 months, 8 months, etc. After some time, it will sit firmly in your head - you will only need to repeat it occasionally.
Software based on the method of interval repetition will do everything for you, you only need to enter into it the information you would like to remember, then test every day - the program determines the repetition intervals based on your assessment of your own knowledge.
If, answering a question, you rate it as easy, then the next time the program will offer it not soon, if you make a mistake or do not remember the answer, the program will ask the question again several times until you can cope.
At this link: ankisrs.net you can download Anki software - the free and most popular program of this kind. There are versions for Mac, Windows, Linux, iPhone, Android, etc. Written in Python.
Well, now let's talk directly about programming.
What if you could memorize everything in the programming language you are studying? All commands, parameters, functions. Solutions for hundreds of the most common problems - all this is almost at the level of muscle memory? Imagine reading a book or a document and remembering everything in the smallest detail!
Well, it's time to move from the introduction to the case.
Start by learning!
To begin with, I will clarify one important thing:
Cards are needed in order to remember what I have learned.
Before you create a card dedicated to something, you first need to understand and remember something . Whatever your source - be it books, lectures, videos, code, online lessons, or any other - you can create a card only after the new information has been learned and learned.
(That is why using other people's decks is not as effective. It's just a reminder.)
Formulate knowledge in the form of small facts.
You have to create a huge number of cards. The question is on one side. The answer is on the other.
If you use this method to learn a foreign language, the design of the cards should not cause difficulties. There is a word or phrase in the question field, a translation in the answer field, and vice versa.




With other disciplines, not everything is so simple - you will need a bit of creative thinking.
We will have to work a little - study the relevant material, select key facts, break them into minimal fragments and arrange them in the form of short questions, - something like a quiz in which you will participate.
I have been doing this for about a year, so I can share how to save time as much as possible .
Replace long descriptions with examples using code
If you learn JavaScript, and you encounter the following rule:
“The addition operator (+) ... if at least one operand is string, the second one is also converted to string, so the result of the addition is the union of two string operands.”
You check this information in practice, study the question far and wide, eventually finding out that 1 + '1' is equal to '11'. Then you create a card that will help you remember this fact:

Sometimes I write an explanation. Sometimes there is no need for it, since in some cases a simple answer is enough.
Set yourself trick questions
Here is the following excerpt from the JavaScript tutorial:
“If a positive positive number follows the constructor of a new array, an empty array of the number of elements indicated by this number is created as a result. Any other combination of arguments yields an array containing these same arguments. "
Check in practice, try different options, and create two cards. Let's try to catch ourselves in the future:

... and behind it is a practically identical question ...

When the program checks you, it will issue mixed question cards, so the catch is waiting for you - as usual - at the most unexpected moment.
You can try more sophisticated options that will make you remember “interesting” cards for a long time:

Do not forget to ask yourself small tasks:

Memorize interesting tricks
If you get an interesting trick that you would like to remember, turn it in response to a card question.

Ask multiple choice questions
If there are two or more solutions to this or that problem, and you want to remember everything, formulate the question accordingly, so that in the future, answering the question, you will remember all the possible options. (By the way, the following examples are taken from the Ruby language.)

Learn volumetric concepts through short examples.
Suppose you spent 20 minutes studying a concept that has a rather conceptual nature, requires more understanding, rather than learning a number of functions. In such cases, you can reduce everything to a small example that will remind you of the essence of this concept.

Another example:

Read Peter Wozniak's 20 Rules of Formulating Knowledge.
I recommend reading Peter Wozniak’s article “20 Rules of Formulating Knowledge” on this topic - there you will find a lot of useful tips. The article is here: http://www.supermemo.com/articles/20rules.htm .
Practice every day
For the most effective results, run the program every day. If you abandon it for a long time, you will get the hell out of it, as a result, you will have to re-learn the things you are supposed to remember.
You can memorize thousands of facts, spending on them for 20 minutes a day. For me, it's a morning ritual. Pour a cup of hot tea. I open Anki. I drink seagulls.
You can do everything much more interesting - get yourself to answer questions as quickly as possible.
It reminds me of a workout for the brain. 20 minutes of "weightlifting" per day will pay off in the form of instant and long-term results.
Add all new and new cards, and you will be surprised how fresh all this information is in your head.
Conclusion
I have been practicing this method for a year now, and I can say that it has significantly increased my productivity. Therefore, I highly recommend it to you.
You can use this approach in exploring anything. This article can inspire .
Feel free to email me ([email protected]) at any time, ask questions or just share your successes.
UPDATE
After I published this post, I was shown this excellent article , which explains the method even better than me, therefore I recommend reading it .
Also, many have asked me to share my decks on Ruby and JavaScript.
Actually, I don’t think this is correct, because Anki cards are not a source of knowledge, but a mechanism that helps you refresh this knowledge in memory. The acquisition of knowledge itself must come from a different environment. But, since you want it so much, here are my decks on Ruby and JavaScript as of January 7, 2013.
To import them into the program, click File → Import.
JavaScript
Deck Ruby Deck