While working on my new book, I came across an interesting idea that extends the popular agile notion of “test-driven development” to learning a new language or a new technology.
As it turns out, just studying something new over and over again doesn’t actually help you remember the material very well. However, if you keep testing yourself by trying to recall the material over and over, you’ll strengthen those connections in your brain.
Try to write a program in that new language you’re studying—-you’ll need to retrieve the key information to do so. Try to explain key parts of that new methodology to a colleague. Keep at the retrieval—-the testing of your knowledge. It’s kind of like “test-driven learning,” but in a good way, not like those horrible social studies quizzes in eighth grade. The idea is to practice retrieval, not input.
You can also take advantage of the spacing effect to make this all more effective.
Cramming, or studying a lot of information in a short amount of time, doesn’t work very well. We tend to forget things along an exponential curve, so spacing out your quizzing reinforces material much more effectively. For example, you might plan on retesting yourself along a 2-2-2-6 schedule: retest after two hours, two days, two weeks, and six months.
But that’s not the most efficient use of your time, especially with a large amount of material. Some facts and ideas will get memorized more easily, and others will need more work. Trying to keep track of an individual memory-decay curve for each fact you’re trying to memorize is too hard to do manually. But, hey, we’ve got this nifty computer that we can use.
Piotr Wozniak developed an algorithm to take advantage of the spacing effect, implemented in the commercial product SuperMemo (there’s an open source implementation available as well). It’s basically a souped-up flashcard program that keeps track of your performance and schedules retests according to an individual decay curve for each item.
It’s a great way to take advantage of the brain’s caching and archiving algorithms.