Around the end of high school I studied Tae Kwon Do for a short period of time. Now my oldest son is taking Goju-Shorei at the local park district which has gotten me re-interested in the subject. Aside from causing pain in my muscles which demonstrates that I'm not a teenager any more it has had another affect.  It got me thinking about its similarities between martial arts and software development.

The first similarity is that it takes discipline to learn to write a programming language just like learning a particular martial art. You start from the most basic movements such as simple blocks and punches. In programming this equates to logic statements and conditional loops. As you become more familiar with both the tools you use become more complex. But, although you might want to you don't throw a double-punch and a back-fist at your code.

The second similarity I see is patterns. Martial arts use groups of movements called forms, katas or poomse to demonstrate that a student can execute combinations of moves in multiple directions. In software development we have patterns. These are groups of constructs and although we should be using them as proven ways to build parts of applications we sometime use them to prove to others that we can use them.  So in a way misuse makes the two even more alike.

The last similarity is that in general both camps are seeking knowledge, although in martial arts the goal is a little more lofty.  This isn't as much in they things are done as much as the type of people that labor in both areas.  Both groups of people are, for the most part, of a personality where you always want to learn.

So there isn't anything earth shattering here, but it is fun sometimes to see the way very different things are actually similar.