Warning! This blog's new home now is here.
Learning fast, and being able to master concepts and techniques is more important that ever nowadays in the "information age". Learning something deeply and mastering it to the point of having an intuition about it is very important in every field. The point is developing knowledge and skills, not only being able to reharse dry informations.
But what we could do about this? Learning to learn is underrated, but very important. Here I summarize my understanding of a guest post by Scott Young on Study Hacks, a very interesting blog written by Cal Newport. This guy (Scott), completed the 4-year MIT computer science curriculum in just 12 months... So I suppose he has some good tips to share on this.
The so-called "drilldown method" has this basic structure:
The first step is gaining a general understanding of what you need to learn. This could mean watching videos, presentations, reading books, papers, doing research, etc.
Don't make the mistake to consider this step the most important. Since this a necessary step but generally the ROI is not so high (the real learning is active), in many cases it's better to speed-up this stage so that you can invest more time on the latter ones.
The interesting thing is that if you're reading a book, highlighting is a poor way of processing informations. It's much better to use techniques like:
Maybe both, but the point here is to be actively engaged with the material and quickly processing it to gain a general understanding. Probably you won't understand or remember everything: this is perfectly normal. If the subject is not trivial there will be more iterations, but for the first one remember that it's better to quickly review the material and gain a "mental framework" of the subject for further learning than grinding on every section only to give up in frustration. Indeed, often you'll gain enough informations in the first iteration so that in the following ones you'll understand a lot more.
Practice serves a dual purpose:
The first point is self-evident, but the second one is equally important: often you'll think that you understand a subject after reading some material about it... until you try to test it. Practice is both a way to achieve mastery and a way to test your understanding against reality.
One very important thing about practice is that feedback should be immediate. The sooner you know whether you have done is right or wrong, the better. The best way to go about it is to do some exercises with the solutions in hand. This way you do the exercises and immediately know if you really understand that particular subject/technique/process/whatever.
With the previous steps you'll gain informations, some skills, but more importantly an understanding of what areas you need to develop a better intuition for.
One great way to dig deeper and create a profound understanding and mastery of concepts is the Feynman Technique:
This technique is fairly easy to describe, but it enables some important advantages:
"You do not really understand something unless you can explain it to your grandmother." -- Albert Einstein
This technique can be applied in several ways:
With the Feynman Technique you can go deeper, but you could go further and develop not just an understanding, but even a deep intuition about it. That's the Ri stage in the Shuhari model.
Understanding intuitively and idea is not easy, but that's when you'd have really internalized it. Most intuitions about an idea, according to Scott, can be classified in this "classes":
Don't fall trap of the illusion that these steps in reality are strictly executed in sequence. They are more a cycle that you go through several times, section after section, chapter after chapter, book after book.
Sure, it's more work to do compared to one mindless reading. But it's a faster way to develop a real and deep understanding and mastering the concepts. That is, if you aren't serious and motivated about learning something, you'll give up. And this is good! Not every subject is really useful or interesting to you and that's fine. That's the way you discover what you are really interested into.
We developers tend to go through only the first two steps:
However, some developers extend that practice with the third step: summarizing their insights and new understanding in blog posts, guides, tutorials, presentations and even entire books or courses. I think this is a very useful practice.
On a related note, that's why I claim that good programming books should have exercises with solutions for at least every chapter (for a recent example, see Functional Programming for the Object-Oriented Programmer by Brian Marick).
They should also don't stop after teaching syntax and mechanics, but also teach about:
And in general not only the how, but also the why and when.
"That is, the best programming language books infuse a strong sense of design into the narrative. The strength of this approach is that not only are you learning a programming language, but you’re also learning how to think in that language, and the very why of the language itself." -- Michael Fogus
It's the same Michael Fogus that with Chris Houser wrote The Joy Of Clojure, a book that won a Jolt Award in 2011 as one of The six best books every developer should read. Another example to look closely to :)