A week or so ago I posted a piece called CodeKata, suggesting that as developers we need to spend more time just practicing: writing throwaway code just to get the experience of writing it. I followed this up with a first exercise, an experiment in supermarket pricing.
Those articles generated some interest, both on other blogs and in e-mail. In particular, I’ve had a couple of wonderful exchanges with Bob Harwood. In turn, these have lead to a bit of research, and an interesting confluence of ideas.
Kata (Japanese for form or pattern) are an exercise where the novice repeatedly tries to emulate a master. In karate, these kata are a sequence of basic moves (kicks, blocks, punches, and so on), strung together in a way that makes sense. You’ll never be attacked in such a way that you could repeat a kata to defend yourself: that isn’t the idea. Instead the idea is to practice the feel and to internalize the moves. (Interestingly, kata are not just used in the martial arts. Calligraphers also learn using kata, copying their masters’ brush strokes.)
Kata and other artificial exercises form a large part of the work done by a karate novice. They practice for hour after hour. (Interestingly, I was talking about this with my son’s karate sensei, and he explained that as well as the standard combinations of moves in kata, he often has his classes do combinations that don’t feel natural, or where the body isn’t correctly positioned at the end of one to enter the next. He believes that teaching what doesn’t work is an effective way to help them improvise what does work later).
Once you get some way into your training, you start kumite, or sparring. Kumite is a supervised exercise between two students, or between a student and a master. Here they learn to assemble the basic moves into coherent sequences, combining offensive and defensive elements into something that works. While kata could be considered static, repeating the same sequence over and over, kumite is dynamic. Sparring continues throughout the rest of your training. It is interesting to watch the development of sparring as folks progress through the belt ranks. Beginners often seem to fall into the trap of being very rigid in their choice of moves. If a kick worked for them last time, then they’ll continue to use that kick over and over again. Similarly, some beginners attack and forget to defend, or spend all their time defending. After they become more experienced, their repertoire increases, and they learn to use appropriate moves which are strung together almost like a jazz improvisation: responding to their opponent but at the same time expressing their own plan of attack. Watching good black belts spar is fascinating; they manage to combine attacks and defenses in the same move, executing with both power and a great deal of subtleness.
Then, to quote Bob Harwood "Once a kata has been learned, then the kata needs to be forgotten. That is, at some point in studying Karate, typically the black belt level, the time comes to transcend the motions and seek meaning in the kata. The student discovers how his/her view of the world is reflected in their performance of kata, and (if lucky) they learn how to adapt the kata to new interpretations. As a student learns to do this, kata becomes more and more a part of their kumite (sparring). …the skill of self-discovery becomes part of their daily life. The study of koan is often used to promote this learning." Koans are questions without absolute answers which are used to break down assumptions and reveal underlying truths. The goal of a koan is not the answer, but thinking about the question. In the supermarket pricing example, when talking about "buy two, get the third free," the question "does the third item have a price?" is something of a (minor league) koan.
All of which brings us back to the Dreyfus model of skills acquisition (and you thought the title of this blog entry was the name of a law firm). The Dreyfus model suggests that there are five stages in the acquisition of mastery. We start at novice: unsure and with no experience. We don’t particularly want to know the "why," we just want to be shown what to do. We need to know the rules, because we just want to achieve some goal. As we get more experience, and progress through the next three levels, we start to move beyond this immediate, mechanical level. We gain more understanding and start to be able to formulate our own action plans. Finally, when we achieve mastery, we have all that experience internalized, and we can work from intuition. We no longer need the rules to support us; instead we write the new rules. Andy has a great talk about this (Herding Racehorses and Racing Sheep, available from the JAOO website.)
There’s a lot of obvious similarity between Dreyfus and the way people become masters of karate. The kata is rote learning, copying the master. Kumite is where you get to start applying the skills on your own. And then mastery, where you teach others, and where you use koan to attempt to discover underlying principles for yourself.
So, I’m planning to change my taxonomy of challenges somewhat. I think that as developers we need all three of these levels: kata for the things we’re only just starting to learn, kumite for the things we think we know, and koan for when we want to dig deeper. To quote from Andy’s talk, "Experience comes from practice".