I studied karate for several years and I've been a programmer for 10 and I never quite enjoyed the software kata concept. In martial arts, a kata is about micro optimizations as you attempt to match the unachievable idea of perfection of the form - they are the core of martial arts. You are trying to avoid mistakes, not find a solution. In programming, once a problem is solved then it stays solved - if I figure out how to parse a particular string, why should I continually clear and redo this work? Why not just put it behind a nice interface and spend my programming effort on something new? In martial arts I am trying to stay sharp and avoid errors where in programming I am just trying to solve a particular problem to get towards some greater goal.