# [What is a Coding Dojo?](/content/articles/what-is-a-coding-dojo/index.html)

[Mike Charlton](http://mikekchar.github.com/portfolio/)
23 September 2013

- [Share on Facebook](http://www.facebook.com/sharer/sharer.php?u=http://sharktank.co.uk/articles/what-is-a-coding-dojo/ "Share on Facebook")
- [Share on Twitter](https://twitter.com/intent/tweet?url=http://sharktank.co.uk/articles/what-is-a-coding-dojo/&text=What%20is%20a%20Coding%20Dojo? "Share on Twitter")
- [Share on Google+](https://plus.google.com/share?url=http://sharktank.co.uk/articles/what-is-a-coding-dojo/ "Share on Google+")
- [Share on LinkedIn](http://www.linkedin.com/shareArticle?mini=true&url=http://sharktank.co.uk/articles/what-is-a-coding-dojo/ "Share on LinkedIn")

At Sharktank we often take some time to get together to
improve our skills. We have gotten into the habit of calling
these sessions our “Coding Dojo” and since the term has become
familiar to a lot of people, I have never bothered to explain
it. However, today a colleague, knowing that I speak Japanese
and have a background in Japanese martial arts asked me what
all these terms mean. Here is a brief tutorial on my understanding
of the terms and how I think they should apply to a coding
dojo.

Before I begin, I should point out that even among Japanese
martial arts practitioners the terms are used differently.
Because these styles of martial arts have moved beyond the
confines of Japan, the terms have been adopted by non-Japanese
speaking people. Not only that, but the terms are even used
differently by Japanese people due to various political
and historical reasons. So if my explanation seems to
be at odds with your own experience, I humbly apologize in
advance.

## Dojo

Dojo, or more properly “doujou” is a wonderful word. It is made up
of the Chinese characters 道場, which mean “the way” and “place”.
It is meant to convey a place in which one discovers the way
to enlightenment. Even in the context of martial arts, it is a
place of self discovery and development.

A coding dojo is therefore a place where we can go to learn
about ourselves and attain enlightenment through writing
computer programs. In a very real sense, any place where
you are coding and in the right mind set is a “coding dojo”.
Similarly, even if you are coding, if you are not working
with the aim to discover things inside yourself, you
are not in a dojo.

## Kata

Many people have heard the word kata. Though there is more
than one way to write this in Chinese characters, 型 is the
character I prefer. This character means “mould” or “model”.
You can imagine it as a jelly mould into which you pour
jelly. After the jelly hardens, you remove the mould and
you have the shape you were looking for.

In karate, specifically, a kata is a series of prescribed
moves. As a beginner, you are asked to memorize the moves
and perform them over and over again until you are proficient
with the movements. Usually a kata is not just a collection
of moves, but rather a series that describes a sequence of
events. As the practitioner gets more adept, they can
visualize the events and modify their rhythm, speed, power
and even technique to accommodate those events.

It is important to recognize that there is not just one
interpretation of the sequence of events that are happening
and a master will be able to infinitely adjust their kata
according to the myriad of different interpretations that
could occur. To a novice’s eye, though, those interpretations
will look nearly identical as they don’t understand the
importance of small changes in the movements.

It is also important to understand that while kata can be
demonstrated, the purpose of kata is not demonstration.
Displaying your skills is not useful for developing yourself.
Within a dojo, it is good for people to share their knowledge
and pass on what they have learned. Demonstrating kata
can help in this, but its main purpose is self discovery
through constant practice.

In the context of a coding dojo, I think there are many different
interpretations of what makes a good kata. In fact, what I believe
to be the first reference to coding katas ( [http://codekata.pragprog.com/](http://codekata.pragprog.com/))
includes many non-coding exercises. Personally, I favour a type
of problem that allows you to practice your techniques and offers
a variety of interpretations.

Some people wonder if a kata should be done one way and one way only.
For example, should I watch a demonstration of a kata and faithfully
recreate it on my own, time after time? I think that this is
very valuable for beginner programmers. Just like a beginning
karateka learns a kata by rote and mimics all the moves without
regard to interpretation, this can be useful for beginning programmers.
Being able to work through an example and reinforce good behaviour
without being distracted by choice is very beneficial. As the
programmer becomes more advanced, they should start to look for
alternate interpretations.

## Kumite

Kumite is made up of the Chinese characters 組手. In this context,
the first character means “cooperate” and the second means “hand”.
Te, or hand refers to the original Chinese name for striking style
martial arts. It is also used in the word karate, 空手. This word
means “open hand”, but was originally written as 唐手. The second
writing, which means “Chinese Hand”, or “Chinese striking martial
arts style” illustrates the meaning of “hand” in this context.
I will leave a study of the historical politics involved in the
adoption of the “open hand” interpretation as an exercise to the
reader.

As you can see, kumite literally means to cooperate in the pursuit
of martial arts. Historically it is a pair exercise where each
participant tries to help the other to get a better understanding.
There are two main types of kumite, yakusoku and randori.

Yakusoku, or 約束, is a promise or arrangement. It is made up
of the characters for “promise” and “bundle”. Yakusoku kumite
is similar to a kata in that there is a series of prescribed
moves. Each person plays their part and tries to push the other
one. One of the big advantages to doing yakusoku kumite
is that if one person is supposed to strike while the other
person is supposed to dodge, the dodging person has to
execute properly or else they will get hit. In this way, the
participants try their hardest to hit each other, while
following the plan of the kumite. This makes practice much
more real and easier to understand.

Randori, or 乱取り, is made up of the characters “riot” and
“take”. Randori kumite is unstructured kumite where there is
no plan. Participants actively try to push each other in
order to learn. Because there are no arranged movements, people
usually get hit a lot. It is important to understand that
Randori kumite is still kumite and the goal is to increase your
understanding, not to hit the other person a lot.

Most karate practitioners are familiar with randori kumite. It is
unfortunate that non-Japanese speaking people often confuse the words
kumite and randori with fighting. It is doubly unfortunate that
many people practice kumite to “win”. Yakusoku kumite is relatively
rare in modern karate styles, though those who practice it often
consider it the most important part of their activities.

From the perspective of a coding dojo, kumite is very possible to do.
In fact, pair programming could be considered a form of kumite.
Both yakusoku and randori kumite is quite valid, with the first one
following a prescribed form, and the second one being unrestricted.
In my mind a randori kumite would allow requirements to be developed
or modified along the way.

At Sharktank we often practice what might be known as yakusoku
randori kumite. We pick a well known problem and one person
writes a single failing test. In a technique known as
“ping pong”, the next person makes the test pass and writes the
next failing test. Another person takes over, making the test
pass and writing the next failing test. We rotate through the
entire group, often egging each other on. One of the goals of
the game is to write a failing test that makes the next person
tackle the problem in a way they might not have expected.

## Why not start your own dojo?

As I said, a dojo is simply a place where you practice coding
with the aim to develop yourself. You only need yourself, a
computer and the right attitude. However, it is often fun
to set up a dojo for practicing kumite. We often spend half an
hour or so during the day to get together for this purpose.
In upcoming blog posts I will try to document how we support
this activity technologically and what kinds of things we
do.

[See all articles](/content/articles/index.html)

Disqus Comments

We were unable to load Disqus. If you are a moderator please see our [troubleshooting guide](https://docs.disqus.com/help/83/).

G

Start the discussion…

Comment

###### Log in with

###### or sign up with Disqus  or pick a name

### Disqus is a discussion network

- Don't be a jerk or do anything illegal. Everything is easier that way.

[Read full terms and conditions](https://docs.disqus.com/kb/terms-and-policies/)

This comment platform is hosted by Disqus, Inc. I authorize Disqus and its affiliates to:

- Use, sell, and share my information to enable me to use its comment services and for marketing purposes, including cross-context behavioral advertising, as described in our [Terms of Service](https://help.disqus.com/customer/portal/articles/466260-terms-of-service) and [Privacy Policy](https://disqus.com/privacy-policy), including supplementing that information with other data about me, such as my browsing and location data.
- Contact me or enable others to contact me by email with offers for goods or services
- Process any sensitive personal information that I submit in a comment. See our [Privacy Policy](https://disqus.com/privacy-policy) for more information

Acknowledge I am 18 or older

I'd rather post as a guest

- [Favorite this discussion](https://disqus.com/embed/comments/?base=default&f=sharktanklabs&t_u=https%3A%2F%2Fsharktank.co.uk%2Farticles%2Fwhat-is-a-coding-dojo%2F&t_d=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&t_t=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&s_o=default# "Favorite this discussion")

- ## Discussion Favorited!

Favoriting means this is a discussion worth sharing. It gets shared to your followers' Disqus feeds, and gives the creator kudos!

[Find More Discussions](https://disqus.com/home/?utm_source=disqus_embed&utm_content=recommend_btn)

[Share](https://disqus.com/embed/comments/?base=default&f=sharktanklabs&t_u=https%3A%2F%2Fsharktank.co.uk%2Farticles%2Fwhat-is-a-coding-dojo%2F&t_d=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&t_t=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&s_o=default#)

- Tweet this discussion
  - Share this discussion on Facebook
  - Share this discussion via email
  - Copy link to discussion

- [Best](https://disqus.com/embed/comments/?base=default&f=sharktanklabs&t_u=https%3A%2F%2Fsharktank.co.uk%2Farticles%2Fwhat-is-a-coding-dojo%2F&t_d=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&t_t=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&s_o=default#)
  - [Newest](https://disqus.com/embed/comments/?base=default&f=sharktanklabs&t_u=https%3A%2F%2Fsharktank.co.uk%2Farticles%2Fwhat-is-a-coding-dojo%2F&t_d=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&t_t=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&s_o=default#)
  - [Oldest](https://disqus.com/embed/comments/?base=default&f=sharktanklabs&t_u=https%3A%2F%2Fsharktank.co.uk%2Farticles%2Fwhat-is-a-coding-dojo%2F&t_d=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&t_t=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&s_o=default#)

Be the first to comment.

[Load more comments](https://disqus.com/embed/comments/?base=default&f=sharktanklabs&t_u=https%3A%2F%2Fsharktank.co.uk%2Farticles%2Fwhat-is-a-coding-dojo%2F&t_d=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&t_t=Sharktank%20Labs%3A%20What%20is%20a%20Coding%20Dojo%3F&s_o=default#)

live.rezync.com

# live.rezync.com is blocked

This page has been blocked by an extension

- Try disabling your extensions.

ERR\_BLOCKED\_BY\_CLIENT

Reload

This page has been blocked by an extension

pippio.com

# pippio.com is blocked

This page has been blocked by an extension

- Try disabling your extensions.

ERR\_BLOCKED\_BY\_CLIENT

Reload

This page has been blocked by an extension
