To me, software craftsmanship is about honing our craft as programmers. Kinda nebulous I suppose, but any purposeful effort to make yourself more knowledgeable, efficient, collaborative, communicative, etc can’t be a bad thing.
One way to improve is through code kata exercises. The term “kata” originated with the martial arts, but in general it’s the concept of practicing the same moves repeatedly to improve your skills in a certain area. A code kata, more specifically, involves practicing the same programming exercise repeatedly, on your own or in pairs. And just like in life, it’s not about the destination but the journey.The aim is not simply to complete the exercise in its entirety, but to spend an hour or so methodically moving through as much of it as possible, usually practicing [test driven development (TDD)](http://www.agiledata.org/essays/tdd.html) with another programmer (that’s the “pair” part). It gives us a chance to work with others, learn how they approach a problem, learn different languages and testing frameworks, and more. And you don’t have a deadline to meet or have to worry about maintaining it in the future.
Some good reading:
- Jeff Atwood – The Ultimate Code Kata
- Danilo Sato – Coding Dojo: an environment for learning and sharing Agile practices
Here are some katas you can try out:
- cyber-dojo – (interactive – you can team up with others working on the same kata)
- NimblePros – (a dozen katas)
- Dave Thomas – (some background info and a couple dozen more katas)
- Gilded Rose Kata
- TDD the Anagrams Kata
- A collection of Katas on Github
Or if you’re new to this and want to see some run-throughs others have done:
- Roy Osherove – (string calculator completed in over a dozen languages)
- Patrick Kelly @ GitHub – (several katas, done in F#)
- Emily Bache @ GitHub
- Markus Hauck @ GitHub
With a little searching, you can find some groups in your area offering opportunities to pair up and practice. I suggest trying Meetup.com.
If you’re in the Cleveland/Akron area, VHT (aka Akron Software Guild) meets monthly on the 2nd Monday. Sometimes they’ll bring in a speaker or discuss some technology, but they’re trying to get back to the pairing/katas, which I generally find more enjoyable. I met up with them last week, and two hours flew by. Plus there’s usually some pizza/pop, so bonus!
Another good one in this area is Telerik (formerly NimblePros), which meets in Hudson on the 3rd Wed. They’re a little harder to find though – search on Eventbrite. Most of the time they pair and do katas; sometimes one or more people will give a lightning talk regarding something of interest to them.
I’ll wrap this up with a quote from Laurie Young that I should re-read regularly:
Good software comes when individuals working on it take responsibility for doing a good job. They take responsibility for quality, and for growing their skills. In my mind software craftsmanship is about individual developers taking responsibility. I don’t think this applies just to code quality – but to all aspects of delivering great software.