Current post type: post
Sure, let’s do a deep dive into Peter Norvig’s classic article:
“Teach Yourself Programming in Ten Years”
(Original: https://norvig.com/21-days.html).
Peter Norvig was reacting to the popularity of books with titles like:
These books sell the illusion of fast mastery, suggesting that programming can be learned quickly like assembling furniture or memorizing a few phrases in a new language. Norvig sees this as harmful because it trivializes what is actually a complex, deep skill that requires time and persistence.
Norvig references work by researchers like:
Key observations:
It’s not about writing code casually or building simple apps endlessly. Instead, it’s:
“Practice doesn’t make perfect. Perfect practice makes perfect.”
Norvig lists concrete, long-term steps you should take if you want to become truly skilled:
If you’re not driven by intrinsic interest in building things and solving problems, you’ll likely burn out before year 10.
“The best way to learn programming is to write programs…”
Write a lot of code. Solve real-world problems. Explore bugs. Refactor. Rewrite.
You’ll gain:
Being a lone wolf limits your growth.
Studying other people’s code—especially open-source projects—helps you learn:
This mirrors how aspiring writers read great literature.
Knowing how memory works, what makes an algorithm fast, or how compilers parse code gives you deeper leverage. Norvig suggests learning:
Be the:
Shifting contexts accelerates your depth of understanding.
“You should learn a programming language every year.”
Each language shapes how you think. For example:
These shifts in paradigm expand your problem-solving “vocabulary.”
Try writing a toy language or contribute to language tools. This teaches:
Norvig isn’t saying:
He is saying: don’t expect mastery (or a rewarding programming career) from shallow study or shortcut mindsets. Real skill comes from depth, not quick wins.
Norvig suggests that books like “Teach Yourself C++ in 21 Days” may:
He compares it to learning to play piano by memorizing keystrokes without understanding rhythm or scales.
Insight | Explanation |
---|---|
Mastery takes ~10 years | True expertise in any domain requires sustained, focused effort. |
Programming is craft + theory | Learn both the CS and hands-on practice. |
Deliberate practice is the key | Solve hard problems, not just any problems. |
Exposure matters | Read code, write code, collaborate, and teach others. |
Languages are tools for thought | Each one shifts your mindset and unlocks new insights. |
You can’t shortcut mastery | But you can enjoy the journey and improve steadily. |
By MOUSTAFA ALSAYEH“So go ahead and buy that Java book—just don’t be in such a hurry.”
© 2025 My Company