Katas vs Tameshiwari - what's the difference? How does it apply to us?

Skip to first unread message


Apr 12, 2017, 1:27:35 PM4/12/17
to ArchitecturalKatas

It's been many, many years since I've had this discussion - about 14 to be more specific.  I had engaged the pragmatic guys to do some training with my group.  Dave's son was taking Karate; I was also studying it in CT.  (More on the early discussion here http://codekata.com/kata/kata-kumite-koan-and-dreyfus/ )  Although I never pursued the ideas I have thought about it from time to time over the years.


disclaimer: I don't profess to be the voice of Karate.  There are many who can do that far better than I.  What's below is one man's opinion on kata.

I'm pleased to see the concept take root.  But, I think there's more that can be done.  For what it's worth - here's my suggestions to those of you interested in the topic.


Before we being, please watch this YouTube video.  It's a Kata competition.  The kata starts at 1:05: https://youtu.be/7HAvpHAZsGQ  When you get to the end of the kata (about 3:12) pause the video and read the section below.  Once we've explained the first part, we'll return and watch the rest.


1) What's a Kata in Karate?


In Karate, the same kata is performed over and over - hundreds, perhaps thousands of times over years of study.   The Sensei (teacher) or Shihan (master) will lead the class, demonstrating and walking around to offer specific corrections to each student.   The students will strive to mimic the instructor completely (possibly including flaws) by watching and comparing their movements.  When attending a competition, you can often tell who's a student of whom by how they move.  Stance, pacing, subtle nuances of movement in the teacher are reflected in the student.


2)  Why are Kata taught?

Kata's are included in a curriculum for many reasons:

  • To teach fundamentals of Karate - stance, blocking, punching, kicking, transitions from one stance to another, etc.  There are also some subtle messages that reflect Zen concepts.

  • To hone ones fitness.  Katas, done properly, are a good workout.

  • To break down more complex principles into easy-to-learn chunks.

  • To build these movements into muscle memory so they can be applied dynamically

  • To build awareness of others around you.  Actual fighting is similar to ballroom dancing; you move with your opponent in unison.  Staying in synch with your fellow students teaches you to be simultaneously aware of your position and other’s position.

Many styles incorporate these kata but nuance some of the movements to emphasize a particular aspect. Circular movements might be large or small.  Pace may be varied, like with a wrist block, to make the same movement "hard" or "soft". This is what makes each style unique.
To create boredom (!) – as the student bores of the repetition, the movements become autonomic – without thought.  This is important if they are ever to be applied an a real-life emergency. 

To the untrained eye, Kata looks more like a dance than fighting.  But, there are application for each movement, called "Bunkai".  As the student progresses in their study of Karate, they are taught the bunkai and expected to demonstrate those as well.  Return to the video https://youtu.be/7HAvpHAZsGQ at 3:13 and watch the Bunkai demonstrations.


Masters continue to practice kata.  Mas O’yama, the master of a style called Kyokushin, was legendary for tirelessly repeating his kata.  We can never get too good at the basics.


3) How does this apply to software development?

I think it's wonderful to repeat the same problem over and over. It’s OK if it’s boring to repeatedly code the same thing.  The problem needs to be well constructed to be worth repeating.  [Developing a good kata isn't easy]  The software or architecture kata should teach fundamental concepts in easy-to-learn chunks.  Many things meet this criteria. There are fundamentals, like Dykstra's algorithm, A*,  MVC, front-controller, and others that should roll off our fingertips without thought.

So, the first part of teaching a good kata should be teaching these basic “movements”.  Can you replicate a good implementation of red-black trees?  Can you write the A* algorithm?  Etc.  This is the blocking and punching of our craft.   How do you implement these algorithms?  This is the style that you follow.

Continuing with the analogy, there are various series of Kata that are commonly taught:

  • Taikyoku.  “Tai” is Japanese for body.  Kyoku means overall or above.  Thus, the name Taikyoku can be translated as “overall body” or “covering great distance”.  Some point to the Chinese concept of Taiji or “oneness” that exists before the duality of Yin and Yang. Taikyoku has the practitioner move through an “I” pattern in basic forward and backward stances.  It incorporates basic blocking and punching in (mostly) linear movements.  Taikyoku kata is commonly performed at a consistent pace for each movement.

  • Heian, sometimes called Pinan, meaning “peaceful and safe”.  Heian incorporates more circular movements and some advanced moves, like blocking with a shoulder, significant pacing changes, etc.


So, larger broader concepts, like “here’s the basics that unify us” and “here’s moderately complex concepts that, when mastered, will lead to peace-of-mind” are core to the series.


The second step would be to sequence these to form a Kata. The Kata can be a complete solution or a partial one. As we compose a series of Kata we should have some approach in mind, like micro-service or serverless or reactive or …. And, we’d build from the bottom up – having the students repeatedly produce each basic movement, build that into a complete kata, and eventually teach a set of kata that express a philosophy of solving problems.  Yes, this approach will draw some interesting reactions (“Your program is working? Good! Delete it and start over.”)  But, repetition of basics is needed for mastery - in Karate or in software engineering.

Last, would come the Bunkai – the application.  Mastery of the kata isn’t achieved unless the kata can be demonstrated in application.  The same is true for software development.


Bunkai is what I see most often when looking at architecture kata seminars, workshops, etc.  These sessions offer very large problems – “build a multi-tenant cloud system.”  Attendees come together from many backgrounds.  While there's value, this process is more similar to Tameshiwari "self test" than it is to Kata. (See https://youtu.be/pVxO_eJS_gg for a video showing a tameshiwari; here a student is presented with a challenge to overcome.  Tameshiwari is often breaking but doesn't have to be a break.  It could be learning to play a song on the guitar.)


Returning to the video, notice how each practitioner moved in total unison when demonstrating the kata.  They can only do this if they are taught the kata the same way.  Katas in software can teach teamwork, but only if the students are taught the team norms and processes.


I have more thoughts, 14 years is a long time, but this post is already huge.  If anyone's interested in more discussion - just keep the conversation going.

Reply all
Reply to author
0 new messages