Coding Dojo

General Information

Skip straight to the meeting information.

Programming is a learned skill. To be a master programmer you must practice. In this respect, it is similar to learning to play a musical instrument or a martial art. Expert programmers exhibit skill with many programming languages and paradigms, just like virtuoso musicians are often skilled in more than one instrument. If you want to be a master programmer, you have to take time to hone your skills. If you are interested in doing this, read on.

There are many ways to learn a skill. One effective way is to observe the masters and then try to copy their style. Unfortunately, great programmers like Erich Gamma, Grady Booch, and others are not available to sit by your side and guide you along. However, many of their masterpieces are as well as great code from other master programmers. You still need to actually write code rather than just look at someone else's work. 

If you look at how students of the shakuhachi learn to play the instrument, it is quite interesting. They join a master's studio and meet with other of the master's students at a pre-arranged time. The master may exhibit one technique to a student and the student goes and practices that technique. At the next meeting, that student shows the master and the others his progress by performing the technique. Martial arts students often join a dojo where they meet and practice their skills with other students, under the watchful eye of the sensei, or teacher.

A Coding Dojo is a place where programmers come to improve their skills, by following a pattern similar to the martial arts dojo. Patricipants meet for at a pre-arranged time in a room that has one computer attached to a screen. A programming challenge is posed for each session. There are a couple of ways this is done that will be discussed later. During the session, the group spends a pre-set amount of time developing a solution to the challenge. At the end of the ssession the code is discarded (often it is archived for future reference and study). The amount of time spent on the problem is fixed. Regardless of the state of the solution, when the time expires, the session is done. 

The idea of the Coding Dojo comes from Dave Thomas's idea of Coding Kata. Laurent Bossavit's instituted a Coding Dojo in Paris where it has been running on a weekly basis since January 2005. It has been a weekly programming get together where programmers of varying skill levels meet as equals. There is no predefined pecking order. Freshman are equal to graduate students or professors in the dojo. Each person will be respected for their knowledge, integrity, and respect for each other and the problems at hand. The dojo is not dependent upon any specific programming language. Often one person may exhibit a solution to a challenge one week in C++ and the next week, another member might solve the same problem in Ruby or LISP. The goal is to learn, not to evangelize any specific language.

Forms of Dojo Meetings

There are two type of Coding Dojo meetings. The first is called Kata which is a rehearsed choreography of developing a solution for a given problem. For example someone presents a challenge of  implementing a simple thread application. A member presents a solution in Java and proceeds to develop it during the session. She or he will have rehearsed the solution prior to the meeting, but will do all coding for the solution at the meeting. A previous solution is not imported into thesession and explained. The presenter actually creates the solution during the session. During the session, the group comments on the design and coding style and suggests changes to improve the solution. The session is very interactive and the group develops, with the presenter the solution they feel is the best, clearest, and simplest. There are breaks during the session for short design reviews where the group discusses the approach to solving the problem.

The second style is called Randori which is an exploratory form of a kata where the whole group participates in carrying out an improvised choreography rather than following a rehearsed sequence of steps. Each member of the group takes a turn at the keyboard, adding to the code. For example, if there are six participants, each may have a seven minute turn as the developer. When the time is up, the co-pilot who was the other person in the pair programming team takes over as the pilot and a new co-pilot joins in.

We will also have meetings where we will explore code that others have written to see what makes it great code.

Rules of Dojo

The rules and sample session agenda presented here are preliminary and will be changed based on the experience gathered from previous sessions.

  • There is a coding challenge that is announced beforehand.
  • There is a room with one computer attached to video screen.
  • The presenter explains the coding challenge and starts the coding. The presenter may or may not choose to have a co-pilot. If this is a Randori session, a co-pilot is usually assigned so that when the switch occurs, the co-pilot takes over for the coder.
  • One half of the pair is changed every 5 minutes if the session is Randori.
  • The coder should continuously explain what she or he is doing.
  • The coder should stop when someone from the audience falls off the sled (has a question about understanding what the pair is doing) -- and only continue when that someone is back on track again.
  • All coders use TDD (Test-Driven Development).
  • All produced code will be made publicly available using the Eclipse Common Public License.
  • The programming language to be used is announced in advance per session.

Meeting time and place

For 2010-2011, Fall semester, we will be meeting in the Beckett Conference room (2d. floor of Fuller Labs) at 2:00 on Tuesdays.

There is a mailing list for the Coding Dojo. You can join by sending email to with the following content:
    subscribe coding-dojo.

We also have a SourceForge project for the Coding Dojo. It will contain results of meetings and other information. Please take a look at it and join the project if you are interested.

Modified: 6-Sep-2010
Gary Pollice