Sportsmen, artists, musicians... all follow a system of practice and tournament|product|concert. In the tournament they have to be perfect, but that perfection comes from hours of practice, mistakes, and explorations that happen during training. Software developers on the other hand are always working in tournament mode... cranking code for clients. This is not good, because they do not get a chance to practice, explore, make mistakes, and polish their skills. Some might argue, that their practice happens at work. But such practice is very limited, because at work, developers are always working under time pressure. For practice to be effective, it must happen in a pressure free environment where the trainee can explore, repeat, and perfect her skills.
A Kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. Dave Thomas, has combined the principles of Kata and coding practice to create a unique form of coding exercices called code kata.
In very simple words a Kata can be any coding exercise that will help you practice an element of coding and learn. When a coding kata is done in a group it is known as a coding dojo. These are very simple concepts (but effective) and have very simple rules to make the excercise effective.
Dave Thomas suggests these simple rules for a succesfull kata.
" What makes a good practice session? You need time without interruptions, and a simple thing you want to try. You need to try it as many times as it takes, and be comfortable making mistakes. You need to look for feedback each time so you can work to improve. There needs to be no pressure: this is why it is hard to practice in a project environment. it helps to keep it fun: make small steps forward when you can. Finally, you’ll recognize a good practice session because you’ll came out of it knowing more than when you went in." - Dave Thomas
The following rules for conducting a coding dojo are posted on the Agile Finland groups wiki.
Rules of Dojo
and workshop agenda presented here are preliminary and will be changed based on the experience gathered from previous sessions.
- There is a coding challenge that is announced beforehand.
- There is a room with one computer attached to video screen.
- The presenter explains the coding challenge and starts the Randori with a pair from audience.
- One half of the pair is changed every 5 minutes. (Personally I think 5 is too short, maybe 10 would be better - Parag)
- The pair on the keyboard should continuously explain what they are doing.
- The pair on the keyboard should stop when someone from the audience falls off the sled -- and only continue when that someone is back on track again.
- The pair will use TDD (Test-Driven Development).
- All produced code will be made publicly available using Apache License, Version 2.0.
- The programming language to be used is announced in advance per session.
- The maximum number of participants is limited to 15.
These techniques are extremely effective in improving software development skills. From now on, be sure to carve out some time every week for individual or group practice sessions, and share you results with the rest of the user community by posting your experiences as comments to this blog.