Coding Dojo

Edit on Gitlab


Some people experience their dojos fizzle out and people stop coming after a few times. We don’t think this is because people find the dojo unhelpful or that they don’t need it. Like any community there needs to be a core of more committed people who turn up to every meeting. The ParisDojo made a rule that if a meeting was arranged, and noone came, then that was the last meeting.


The next step to take should always be as small as possible. Yes, as small as possible. If we proceed in very small steps, chances are that we can keep the next step trivial. BabySteps combined with RhythmOfTestFirst really boosts productivity.


When writing unit tests your tests should focus on one unit, typically a class, only. This unit is usually refered to as Unit Under Test, UUT, so when talking about object oriented testing CUT, Class Under Test, is a notion to be aware of.


If I want to learn Judo, I will enroll at the nearest dojo, and show up for one hour every week for the next two years, at the end of which I may opt for a more assiduous course of study to progress in the art. Years of further training might be rewarded with a black belt, which is merely the sign of ascent to a different stage of learning. No master ever stops learning.


- In the beginning was PragmaticDave, who came up with the idea of [\[CodeKata\]]( Then LaurentBossavit published a plea for a [CodingDojo] Then came EmmanuelGaillot who [said] “Cool idea, let’s do it”, and we did it Then Lasse and several others went forth and multiplied the Dojo (see CodingDojos ) Then UncleBob attended one, and saw that it was a cool idea, and [said so to the world] (And now, what’s next?


The First Rule One important rule about the Dojo is : At the Dojo one can’t discuss a form without code, and one can’t show code without tests. It is a design training place, where it is acknowledged that “the code is the design” and that code without tests simply doesn’t exist. Finding a Master The master can’t be a master of every forms. I feel quite at ease with recursive functions and list processing e.


Check the locations of the dojos at: . Please update or add Dojo in the map if not there and fill out the list: North America Alt.NET Montreal - Alt.NET Montreal holds Coding Dojo from time to time. PittsburghDojo - Oklahoma City Dojo - Meetings at the [OkcCoCo] [University of Houston] MSFTCorpDojo Portland or Seattle Coding Dojo [OttawaDojo] [Austin Code Dojo] [Orlando Coding Dojo] [Dojo in Sainte-Dorothée, QC] [Greater Boston Agile Coding Dojo] Europe ParisDojo [LilleDojo] [AgicalCodingDojo (Stockholm, Sweden)] [Grenoble Coding Dojo] [Bordeaux Coding Dojo] Flash Brighton’s Brighton Ruby Dojo AllDayCodingDojo NetherlandsDojo AarhusDojo in conjunction with Aarhus .


Write Your Code and Tests in a Browser! A while ago I ( JonJagger ) attended several coding dojos. I enjoyed them but noticed it often took a long time to install the necessary compilers onto some of the laptops. It occurred to me that it should be possible to run a code-dojo entirely within a browser - write your code and tests inside a simple web-based editor, submit everything to the server whenever you like, the server would run your tests for you and return the outcome - green if they all passed, red if some failed, yellow if there was a syntax error.


When Dave Thomas introduced the idea of code katas it was in the context that in order to get better at something, you need to practice. Raw talent only gets you so far. Various theories of learning (particularly those proposed by Dr K. Anders Ericsson) suggest that DeliberatePractice over a long period of time is at the heart of attaining expertise. DeliberatePractice is not the same as experience gained while doing your job.


Jeff De Luca coined this law. It says : managing software developers is 20% technology and 80% sociology.


A [DojoAttendee](/DojoAttendee) is someone who turns up to a dojo meeting. They should come with the intention of both learning something and contributing to the learning of the group. This may involve helping the group to decide what to do at the meeting introducing a totally new Kata exercise to be solved by the group. solving a Kata infront of the group ( PreparedKata ) stepping up to the keyboard and contributing part of the solution to a RandoriKata pointing out smells, code duplication, possible refactorings etc to whoever is typing (on a green bar) asking for explanation and clarification from whoever has the keyboard.


When I first talked to [LaurentBossavit](/people/LaurentBossavit) about the ParisDojo , he had an idea about writing a book about it that would help people to set up a regular dojo. The book would be small, light and easy to read, pragmatic and helpful. I am attracted by the idea of having something in print that would be relatively static and authoratative, as a complement to the more interactive material this wiki.


The [DojoModerator](/DojoModerator) is not a MasterProgrammer or CodingSensei . They are also there to teach and learn, just like any other DojoAttendee . The DojoModerator aims to enable group learning to occur, by promoting idea exchange, and curtailing unproductive discussions and activities. If the pair at the keyboard are not saying anything, ask them to explain what they are trying to do. Identify side track discussions and ask them to be shelved/parked.


Someone needs to take care of the practical details, ie things like find a room get a digital projector set a date for next session publish retrospectives and code afterwards It seems to work well if one person is responsible for ensuring these things are done. It seems to me that somehow the people at the dojo need to choose good Kata exercises to work on that are at the right level for the group.


[DojoRoles](/DojoRoles) : [DojoOrganizer](/DojoOrganizer) and DojoAttendee I have difficulties to make a clear distinction between the roles of attendee and organizer, perhaps because in Paris we are a self-organized group since the very beginning. – PhilippeBlayo Philippe, the FloripaDojo is getting self-organized now, so I can tell you there’s a clear distinction between the roles (i. e. organizers are involved before/after the sessions and attendee contributes only during the sessions). However, I also believe these definitions are useless since they don’t contribute with the dojo itself ;) – IvanSanchez


Rules the [DojoModerator](/DojoModerator) should explain to dojo participants at the start, which may make your meeting run more smoothly. StartFromScratch - so everyone is up to speed, even if they weren’t at the last meeting SpeakUpIfYoureLost - so everyone understands what the pair at the keyboard is doing. OnlyCriticiseOnGreenBar - only allow design critique/refactoring advice when there is a green bar. See also WhatIsCodingDojo




This page is intended as a list of Kata exercises that people have tried at their Dojo meetings, which links to more detailed descriptions of each Kata. Algorithmic KataBankOCR KataFizzBuzz FooBarQix KataPotter KataRomanNumerals KataRomanCalculator KataNumbersInWords KataArgs KataAnagram KataDepthFirstSearch KataNumberToLCD Game Modeling KataBowling KataGameOfLife KataMastermid KataMinesweeper KataPacMan KataPokerHands KataReversi KataTennis KataTexasHoldEm KataTradingCardGame KataYahtzee Math Oriented KataRange String manipulation KataDictionaryReplacer KataWordWrap Specific Technologies KataQotdCgi KataJEEWebAuthentication Refactoring legacy code & Design Principles TDDMicroExercises Design Principles


This page should serve as a template explaining the format to use when describing the Kata exercises in the KataCatalogue . About this Kata Difficulty: (easy/medium/hard) Good for teaching: (something from the list on LessonsLearned ) Related Katas: (ones to do before or after this one, similar ones) Here you can mention the origins of the Kata, and perhaps people of note who have performed it. Problem Description This section should give a summary of the problem to be solved, in such a way as to intrigue the reader and attract them to attempt it.


Following the success of a similar workshop at XP2009, I would like to announce the programme for a workshop at XP2010. “Test Driven Development: Performing Art” (Workshop organizer is EmilyBache ) who which Kata language/tools DaniloSato & HugoCorbucci KataSudokuVerifier Smalltalk Johannes Brodwall & Ivar Nilsen the Java EE spike kata Java EE Marcus Ahnve & Jimmy Larsson KataTennis Ruby & RSpec ThomasNilsson & Andreas KataTexasHoldEm C++ Test Driven Development is a skill that needs time and practice to master.


Many people around the world have been running coding dojos for several years now. This page is a collection of some of the lessons these people have learnt from their experiences. These lessons use an approximation of the criteria listed in the book “Lessons learned in Software testing” (Kaner, Bach, Pettichord). A lesson should be: useful or provide insight based on actual experience pass the 90-minute-thinking-alone-test, ie a lesson is not worth including if almost anyone who thought about coding dojos for 90 minutes of undisturbed time could come up with it.


This is a variant of [PingPong](/PingPong) that works well with TimeBox . The idea is that you switch pairs using TimeBox . But as long as a pair is within its timebox you pass the keyboard each time one of the following things happen: Driver writes a failing test. Driver makes a failing test pass. Driver refactors something (non trivial). Use common sense so you don’t switch if the refactoring does not add value.


Pragmatic suggestions for how you host a coding dojo event. See the following 5 min how to video to run your first coding dojo (or what you can expect if going to a dojo):


A mechanism for switching the pair at the keyboard when doing a RandoriKata The pair write and implement N tests, where N is usually between 1 and 3. The person who has been at the keyboard longest sits down in the audience and another person takes their place. Does this actually work? I havn’t tried it myself but I heard someone describing it. I think they said that it makes people tend to write too big tests and not take BabySteps so they can stay at the keyboard longer.


A mechanism for switching the pair at the keyboard when doing a RandoriKata The driver writes the first test and then hands the keyboard to the copilot the new driver makes the test pass and does necessary refactoring. They then write the next test and pass the keyboard back. The original driver now implements code to make the test pass, and refactors. a new pair steps up to the keyboard and the current pair sit down in the audience.


Someone has done some preparation before the meeting and comes ready to present a full solution to the Kata in question. Set a time limit start from scratch use TDD and BabySteps Each step must be explained so everyone present can follow. People should interrupt only if they don’t understand what is going on.


By some means the group decides on a Kata to work on, perhaps the DojoOrganizer suggests one. No-one need have prepared anything much before the meeting. Some mechanism for regular switching of the driver and copilot is chosen (eg TimeBox , PingPong , MicroPairing , NTests , ShoutLouder ) Two people step up to the keyboard and begin solving the Kata in hand start from scratch use TDD and BabySteps remember to switch the pair at the keyboard according to the mechanism chosen Everyone present is expected to follow what is going on, and make helpful suggestions.


- Write UT for Particular [BabyStep](/BabySteps) Run it, it should fail If it is not failing - review the test it might be wrong Written test should generate an interface write an implementation until the test is green goto the next BabyStep


See [TestDrivenDevelopment](/TestDrivenDevelopment)


- Begin each meeting with an introduction to the format and intended aims of the dojo, ie go through [WhatIsCodingDojo](/WhatIsCodingDojo) and/or [DojoRules](/DojoRules) . Tell people when and how they are expected to contribute. Will it be a [PreparedKata](/PreparedKata) ? A [RandoriKata](/RandoriKata) ? Explain the Kata you will be trying to solve. Perhaps show the description from the entry in the KataCatalogue . If you are not planning to StartFromScratch , go through the pre-existing code.


an (anti-pattern, is it one?) mechanism for switching the pair at the keyboard when doing RandoriKata the pair is driving, looking for a solution anyone in the audience may interrupt if he knows the solution the interrupter takes over driving, the driver becomes co-pilot In my experience, this mechanism is an anti-pattern. Mine too, I have seen this grind a dojo to a halt as people haul the design back and forth in competing directions.


[TestDrivenDevelopment](/TestDrivenDevelopment) is a way of working, or a process for writing code. You work is paced in BabySteps and your progress is assured by frequently writing and running automated tests. Coding proceeds in an extremely focused and productive rhythm: 1. Write a test for a new function. The test should fail. 2. Write code until the test passes. 3. Refactor until the code is suitable for continued development 4. Goto 1.


A tool for automated testing of code written in any language, by means of comparing plain text output. Invented by GeoffBache . see .


A mechanism for switching the pair at the keyboard when doing a RandoriKata Each pair has a small (5 or 7 minutes) timebox. At the end of the timebox, the driver goes back to the audience, the copilot becomes driver and one of the audience step up to be copilot. You can use a kitchen timer/mobile phone that beeps to remind people when time is up.


Definition A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there to have fun and to engage in DeliberatePractice in order to improve their skills. The ParisDojo focuses on coding in front of others, most often something from scratch, in a very short amount of time (1 to 1.5 hours). They use various languages, various tools, various exercise formats.


### General How about the ability to actually do a code-dojo without requiring any software (except a browser) installed on the computers of players who want to do a coding-dojo? I have built a free, no-advert code-dojo server to do just this as a service to the software community. It’s called CyberDojo . Its url is I’ve also put a screencast demonstrating me doing the KataRomanNumerals in Ruby on vimeo at http://vimeo.