I've been reading the late Aaron Swartz's "Raw Nerve" series over the past couple of days. The "Confront Reality" article covers what is needed to become an expert, and the following quote gave me a lot to think about:
Synthesizing hundreds of these studies, K. Anders Ericsson concluded that what distinguishes experts from non-experts is engaging in what he calls deliberate practice. Mere practice isn't enough – you can sit and make predictions all day without getting any better at it – it needs to be a kind of practice where you receive "immediate informative feedback and knowledge of results."
This sounds a lot like Stephen Covey's seventh habit, "sharpen the saw".
I'll admit, I haven't been as diligent about sharpening the saw as I would like. When I first started programming I would happily make little toys to experiment with whatever I was learning. They weren't supposed to be products or the next Big Thing, they were like sketches to be drawn and discarded.
All of that stopped once I started working as a professional developer. Suddenly I felt that everything I created had to be good. I couldn't just create a throw away software, I had to create useful tools or high quality games. Gone were the days when I'd be happy to get a little sprite jumping around the screen - now it had to be a top-quality platformer with multiple levels and ultra-tight gameplay.
I'm not sure why this happened, but it's something I'd like to fix. Earlier in the year I read Mastering Software Technique - it's a great book about running "coding studies" to practice and learn the programming skills. It covers the entire process: deciding what to study, structuring the study itself, and how large (or small) the studies should be.
I should probably read it again.