Thursday, November 11, 2010

Is TDD Karate or Kung-fu?

Today we had a discussion in the office about the current TDD (Test Driven Development) course we are following and it has to be said there is more than a little confusion over it. One of the main sources of this confusion seems to be 'why' we are doing it.  And I can see where the confusion creeps in. Quite a few of the members of the team have years of programming experience and may already or have been practicing TDD in some guise or another so those people already know the benefits and have adapted the process to their way of working. To me this is fine. Perhaps they would be better served with working on some other very useful principles such as the SOLID principles. [Robert C. Martin] Some of the other members know of TDD and are perhaps reluctant to use it because of past experiences or whatever.  These people need to know what the goal is, what will they be good at at the end of this?

At this point someone started explaining that it was like learning Karate. In some martial arts including Karate it is common for the students to practice set moves or Kata by copying the seniors in the group but in the beginning it appears (Karate experts please correct me) that they are not necessarily told why they perform the moves they do, just to do them. Remember, polish-on, polish-off from Karate kid?

Well, I don't subscribe to this opinion. I have practiced martial arts and the one I happened to choose, Shorinji Kempo, (Shorinji being the Japanese form of Shaolin) teaches it's students useful techniques and the reasons for using them. And it teaches all aspects of the art continuously and with balance gradually increasing in complexity. At no point does anyone not know why they are doing something.  The art also encourages strategic thinking and how to choose the best technique to use for a given situation (even if the best strategy is not to get involved at all).

I think that this would be a better way to progress and learn the techniques, especially for the enquiring minds. Learning by rote has no interest for me.

So do you want to be a Karate black belt beating bricks with your bare hands (why do they do that?) or a contemplative Shaolin monk analysing the situation and choosing the best strategy to approach it.

/rant

[Robert C. Martin, SOLID Principles, http://en.wikipedia.org/wiki/Solid_(object-oriented_design) ]


ps. I know I mixed up Kung-fu, Shorinji Kempo etc.. but you get the point.. maybe.


pps. In fact I wonder if I mean 'Martial Art' vs 'Martial Way' aka Budo? (Was reminded of Aikido   by @Boston_IT)