On the Software Craftsmanship conference in London End of February Micah Martin presented a session on where he presented an implementation of Langston’s Ant in Ruby. As an introduction he raised the point how important practice for a software craftsman is. He used his background in Martial Arts as a motivator where Katas are used to fit into uncomfortable positions in order to gain flexibility for the fight with an opponent. By over and over practicing these fight-unrelated moves, the aspirant learns for the fight. (Actually I remember the first Karate Kid film, where something alike happens, when the kid needs to paint a fence etc.)
By that time I did not fully agree to Micah’s point on practicing. However I made a note on my personal digest by then to research something suitable for me. Since I don’t have a background in Martial Arts, but in Swimming competition and as a swimming trainer, I was looking for analogies like how I teach kids to learn swimming with some learning chains getting from the easy to the complex and from the well-known to the unknown. These ideas did not quite match the Kata analogy from Micah, since they were related to how people learn in their minds and the bridge towards software development seems to be too far away here.
During the last week I found a better suitable analogy however, which is partially motivated from my experiences in swimming. As a trainer I need to be able to save anyone from drowning. While this sounds rather reasonable since I get to train kids that are entrusted to me by their parents, during the latest courses to fresh-up my knowledge on water-rescue I realzed, that the training for the german DLRG groups – the german baywatch – does over and over practice how to rescue someone from drowning. While the one being rescued might attempt to reach your neck in panic to just save herself, the life-saver might end up needing to save herself as well. While there are some grasps to free oneself out of such situations, the DLRG practices these over and over in order to be able to use them naturally when getting in a panic situation – since every second counts be then.
Similarly during first-aid courses which I needed to take several times as well I was told to practice reanimation process and how to get an injured person into recovery position. When people get under stress they forget what they have learned, if they did not practice over and over. Similarly when a software project gets under stress, people may forget to apply test-driven development, refactoring and design patterns and introduce technical debt. On the other hand by practicing seemingly unrelated software Katas in order to improve your tdd skills might enable you to excel your work even in serious situations. As for first-aid and water-rescue practicing, knowing and maintaining software development practices, but not having to use them every day, makes myself feel safer and relaxed.
I think that’s a great argument for practicing specific techniques. Well written.