Learn Programming in Ten Years

May 21, 2025 · Sussex County, NJ

Teach Yourself Programming in Ten Years

I recently revisited this essay by Peter Norvig; it was a refreshing reminder that becoming a great programmer takes time and deliberate, consistent effort. I’ve saved a few favorite quotes below for future reference.

The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again.


Others quoted in the essay speak to this:

“Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.” – Samuel Johnson (1709-1784)

“Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult.” – Hippocrates (c. 400BC)


A few tips from the author on how to get better at learning programming:

Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in your ten years/10,000 hours.

Program. The best kind of learning is learning by doing. To put it more technically […] “the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors.” (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.

Talk with other programmers; read other programs. This is more important than any book or training course.

… book learning alone won’t be enough. “Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter” says Eric Raymond, author of The New Hacker’s Dictionary.

Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you’re the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you’re the worst, you learn what the masters do, and you learn what they don’t like to do (because they make you do it for them).

Work on projects after other programmers. Understand a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain them after you.


2025-05-21 23:16