Summary: If you're trying to learn something, get clear on whether you're
- Building competence: Getting very fast and reliable on tasks that are used for a well-defined project.
- Building broad knowledge: Learning just enough about a huge number of facts and theories to be able to re-master them quickly if they turn out to be handy in the future.
Immersion is the only way to build competence. Spaced repetition, using flashcards or some other system, is the only way to build general knowledge.
Some projects require a combination of competence and broad knowledge. Some projects face us with a moving target, where we need to gain temporary competence in a variety of skills, week by week or month by month. Finally, sometimes we're working on multiple projects at once, each with different but related demands, such as graduating from law school and preparing for a legal career. It might be best to optimize your learning approaches separately.
Be clear on your purposes, and use the right tool for the job.
In the comments to TurnTrout's Lesson's I've Learned From Self-Teaching, adamzerner made this important point:
I know this might go against the research on spaced repetition, but I've found that the stuff I used to study often just doesn't stick. On the other hand, there are things that I never really did spaced repetition on that have stuck remarkably well. My impression and experiences is that obtaining a deep understanding is a lot more fruitful than doing spaced repetition.
He then went on to give an example:
I'm learning functional programming right now. In functional programming, operators like
*are just functions. Instead of
2 + 3you can do
(+) 2 3just like you'd do
add 2 3. Similarly, you could call functions using infix notations by using backticks like this
2 `add` 3and it behaves like an operator. This really cemented for me what an operator is in such a way that I don't think SRS ever could, and it did so much faster.
I can give another example from my own life. My bachelor's degree is in music, and I spent years studying music theory. My composition teacher asked us to memorize the music we were studying. It's very hard to memorize this by reading the score, but much easier if you just spend a lot of time playing it on the piano:
Whether we're learning about programming or piano performance, real-world projects usually require us to achieve project competence in a narrow range of skills. The project itself defines the skills we need.
Move to France to learn French, and you'll learn pretty quickly what words are most important to learn. Work on a programming project in a language with infix operators, and you'll understand the distinction between infix and prefix in no time. Spend three years driving around London if you want to become a cabbie. You'll learn how the notes in Chopin's Ballade go much more quickly by playing it than by trying to memorize it off Anki cards. If you want to get good at gel electrophoresis, you should probably do it about 1,000 times.
The only problem is that, from the point of view of basic conceptual understanding, you'll overinvest in the narrow set of skills that each of these projects requires. You'll get more practice in commonplace French words than you strictly need to memorize them, and not enough practice on more unusual vocabulary words. After a year, you'll be great at placing an order at a restaurant, but if they asked you to translate Baudelaire into English, you might struggle more than if you'd focused more on the flashcards.
Likewise, if you're programming every day in an infix programming language, you'll develop a fast, intuitive understanding of the difference between infix vs. prefix operators, and probably for several other concepts as well. The only problem is that you could have acquired 80% of that understanding in 20% of the time using flashcards and spaced repetition. So from the point of view of trying to gain maximum general knowledge with minimum effort, immersion is inefficient.
Working with flashcards reinforces general knowledge. This won't make you good enough to be competent at any specific project. But it will make you more able to transition between projects, acquire more advanced skills, and imagine technically advanced projects that you might not even conceive of otherwise. With spaced repetition and flashcards, you'll spend the minimum possible time to have an adequate memory of a huge number of concepts.
So the question of whether or not to use a spaced repetition system is really the question of whether or not to build a broad knowledge base. If you want to become extremely competent at the narrow skills required for a well-defined project, immerse yourself in the task. If instead you want to preserve a huge amount of general knowledge for those rare occasions when it proves to be unusually important, then flashcards and spaced repetition is your best friend.
Combined Requirements, Moving Targets, And Similar Projects With Different Demands
Many projects require a combination of general knowledge and technical competence, within some more-or-less defined domain. If you're working on a natural language processing program, you might get really good at regular expressions, building technical competence, but also need some general knowledge of a more substantial NLP library that you use occasionally. If you're a manager, you might need to immerse yourself in the personalities of your team members and superiors, but also need broad general knowledge of more remote teams and people at other companies whom you work with.
On some projects, including coursework, you might also face a moving target domain. If you're taking a chemistry class, you might be expected to be fairly fluent at a certain set of equations in time for exam 1, then never need them again until you need to once again be fluent at them in time for the comprehensive final.
It is therefore also valuable to distinguish the multiple purposes of your learning project, and optimize for them separately.
For example, you might be learning biochemistry both to pass a class and to build general knowledge for a future career as a tissue engineer. You can optimize for both.
To pass the class, you need to devote some study time to temporarily drilling the knowledge that's most valuable for the upcoming assignment or test. You're becoming a very temporary, very narrow "expert" in a handful of equations or concepts by immersing yourself in them.
To build general knowledge to prepare for a future career, you need to also devote study time to concepts that are from much earlier in the quarter, from previous classes, or even from classes that you haven't taken yet or might never take a full class on.
When you're focused on class-oriented study, it won't make sense from the perspective of preparing for your future career. Likewise, the best approach to prepare for a career, it won't make sense from the perspective of passing the class.