Friday, February 19, 2010

Practicing Hacking

I am a big believer in deliberate practice. I've done my research and understand the concept. It is "activities designed, typically by a teacher, for the sole purpose of effectively improving specific aspects of an individual's performance (Anders Ericsson)." It's designed to improve performance, it's repeated a lot, feedback on results is continuously available, it's highly demanding mentally, it's difficult, and it requires specific goals.

Integrating Deliberate Practice

Deliberate practice seems straightforward, but I'm having a difficult time integrating it with learning a programming language. I have no problem implementing deliberate practice with sports or playing a musical instrument. These fields have better rules and objectives when measuring success. It is clear to me on how to improve performance for these fields.

If I wanted to improve my dribbling in basketball I would practice with one hand at a time standing still then while moving slow then by moving fast. After I improve I would increase difficulty.

If I wanted to improve in playing the guitar I would practice each chord individually and then practice transitioning from one chord to another.

Knowledge Work

The previous fields are more on the physical side. Learning a programming language is more knowledge work. How do you optimize performance on knowledge work? I'm trying to figure out a systematic approach for building a deliberate practice strategy for learning a programming language.

My Current Process

I am in the process of learning Ruby on Rails. I want to build web applications. I've been hacking on my application getting things done and figuring stuff out but I do not feel I'm becoming a expert Rails programmer. As soon as I solve my task I have forgotten the process I used to figure it out. I see the finished code but cannot quite remember what searches I did that yielded results and what searches didn't. I also wonder how to repeat the process to deliberately practice that new solution. And if my solution is the correct way to do it.

Will building applications and continuous hacking create an expert programmer?