Teach Yourself Programming in Ten Years

I remember when I finished first grade and I thought I was done with school. The reason I wanted to go to school in the first place was to learn to read and at the end of first grade I thought I had that down cold. What more was there to learn? I see some of that with programming as well. People take a first programming course and they think they’re done - they’re programmers! Well not so fast. There is more to it than that just as there was more to learning and even reading when I finished the first grade. Others come to me and tell me they want to learn enough programming to create a specific application (rarely one that is that easy) or the next Halo 3 (never that easy) or something. There is this cram school mentality that seems to overtake so many people. Unfortunately, programming like so many things takes a while to really, deeply learn.

I ran across the article Teach Yourself Programming in Ten Years by Peter Norvig recently and it does a good job of addressing this very issue. Here is a key paragraph from that article:

Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. 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.

What is key in so many of these endeavors? Practice. Careful, deliberate practice. One can get that practice several ways – projects in class, projects while working for a living, projects for fun and competition (Imagine Cup is a great one for college students USACO is good for many high school students.), and more. But programming is still a skill – some would say an art or perhaps a craft – and it takes practice to get good at it.

Some students like to point out some of the top programmers in the world did not go to college or dropped out (Bill Gates for example) but they neglect the fact that those people all practiced A LOT! They wrote code day and night. Plus of course they are really really smart. For most people I think formal training is a huge help and speeds up the learning process greatly. But in the end practice is what makes it work. That and a willingness to learn constantly. The article includes a recipe for programming success that lists more items than just practice BTW. I think it undervalues formal training but it does include it.

The relative merits of formal training and practice and what the ratio should be makes for an interesting discussion. I really think the best people have some of both. What do you think?

Comments (4)

  1. Doug says:

    A good book that covers that same ground is Outliers by Malcom Gladwell.

  2. Andy Nutter-Upham says:

    Even with the excellent formal training I’ve had I am still constantly learning. I’ve always liked the toolbox metaphor: each problem offers a tool or the refinement of a tool. Programming is easily as vast a craft as woodworking; it takes time to hone each tool and there are a great many, each appropriate for only a particular class of problems. To claim expertise in without putting in years of work is naive and arrogant.

  3. Garth says:

    I bought a book titled "C#: Step by Step".  After about a month of tripping over the steps I bagged the step and started tinkering.  Tinkering is much more fun. Making errors and having to fix them is a much better learning experience than stepping through a book that is error free.  I still cannot program in C# worth a bean but if I have to I can figure something out.  I am not a programmer, I am a programming teacher, so I doubt I will have the time to be a good programmer in any particular language.  If those books actually worked I might be unemployed.

  4. Larry Battle says:

    Always have fun programming. Read a lot of books and blogs, develop applications, and chat with others who program.

    Also, if it’s your first time programming start with a basic language, like python or perl.

Skip to main content