Tim O’Reilly posted a transcript of a long email thread among O’Reilly personnel on the subject of practice. It’s a wide ranging discussion on the value of practice and how people learn among people whose job it is to teach (usually through books).
One thing I’ll add is that practice by itself is almost never as effective as it is with a good coach or teammates who can offer useful feedback. I’ve seen programmers who have written huge amounts of code over the years in isolation who progress very little in their overall skills. That’s why even someone like Tiger Woods, who knows as much as anyone in the world about how to play golf, still has a coach. He needs someone who can help him catch problems that would take him a lot longer to notice on his own.
For more on this, I’d recommend Jason Kottke’s posts on deliberate practice. I’ve considered trying to apply the concept of deliberate practice to being a better arena player in World of Warcraft, but frankly I just haven’t been interested enough to put in the effort.
I also found one bit interesting, this point by Kurt Kagle:
Practice is necessary to learn a skill (it takes about a million repetitions, typically around ten years to master any given skill), but I think that we have become so fixated upon this necessity that we have to question if the skills that we are spending so much of our time and resource educating them are ones that they truly need.
If our children are going to live in a world heavily dominated by computer technology, is it worthwhile for us to be practicing skills that we’ll only use a handful of times in our life?
His specific example is mathematical calculations that are easily performed by a computer. I think I’d argue that we need to know them well enough to understand what’s going on behind the scenes in the computer. Why? Leaky abstractions.
Could we have “stages” for programmers?
There is a very interesting practice in the restaurant industry, where chefs do unpaid work at a restaurant in hopes of learning (and perhaps in hopes of getting a job there). The term for these placements is stage — pronounced as the French would — “stahge”. Here’s one chef’s account of a stage he’s doing. You can learn a lot more about how a stage works in this three part series by Dean McCord.
It seems stages come in two forms — part time work over a long period of time or a short, full-time unpaid stint in a kitchen. Ultimately the fact that these programs work is a testament to how chefs see each other. Clearly chefs put a very low premium on secrecy — they’re not worried about competitors finding out about next week’s specials. And I think it also depends on the fact that chef skills translate well from one kitchen to another. A chef who has mastered the fundamentals can begin contributing in a new kitchen relatively quickly.
What I’m wondering is whether this kind of approach could work in software development at all. Would you be willing to take on a part time programmer who wanted to learn from how your company develops software? If you were between jobs, would you spend a week or a month working on someone else’s project free of charge in order to learn and potentially get a job? Would you take a week of vacation to work with developers you really admire? Would your boss let you? And finally, do you think you could offer a developer who came in cold to work on your project for a week meaningful work that left them feeling like they gained something from the experience?