Tuesday, March 03, 2009

Focused Practice


We all want to be better at what we do, right? But how do we go about improving our skills? I think the answer is the same, whether you're an aspiring software developer, musician, martial artist, or whatever. The key is focused practice. You need to put time into developing your skill. You can't just put time in either. It has to be focused time. This is time where you're consciously thinking about your craft, critically analyzing your work, and looking for ways to improve it.

Some of this possible during your day-to-day life; but in my experience, you always get better results by setting aside a special block of time to work on a skill.

Code Katas

The best way I've found to apply this to software is through code katas. A code kata is a problem simple enough that developers of any skill-level should be able to solve them. A kata is also small enough to solve in a reasonable period of time. My learning process currently goes something like this.
  1. Pick a skill I want to improve at.
  2. Pick a kata to solve, and a language to solve it in.
  3. Solve the kata while focusing on how to apply that skill to the kata.
For example, let's say I wanted to work on my TDD-fu. I would pick a kata that I knew reasonably well; in my case that's the bowling problem. I would pick a language that I knew well, and had a good testing framework; that would be java and junit. I would then implement a solution while thinking about things like...

  • How much code am I writing per test? Should I be writing more? Less?
  • Is my test naming clear?
  • Am I remembering to think about refactoring every time I see a green bar?
  • Am I aware enough of what's going on to know when I've made a mistake and chosen a bad test?
You can use code katas to improve your skills with just about any technique related to software development. Just to name a few, they work well for improving your pairing practices, new languages, writing good OO code, and learning new tools. You just have to pick a focus.

A Coding Dojo

There's been lots of success stories recently about coding dojos. A dojo gives us a social context in which to work on our katas with other like-minded people. It's a great mechanism to get feedback on your work, but the downside I've found is that a lot of people are intimidated by this. I think the best way to deal with it is just to work on a kata in your own time until you're comfortable with it, and then bite the bullet and seek some feedback.

You can find more information about code katas and dojos at http://codingdojo.org. See the kata catalogue if you just want to get started. There is another list of problems I've found useful here.

1 comment:

iosparkletree said...

So happy to read your blog! I enjoyed the analogy between one's craft and martial arts. I also fully agree about how focus is so important to improvement. It's something I'm just starting to realize at this point in my life... Wish I knew about it earlier!

Looking forward to the next post. :)