# Coding dojo

Le coding dojo est une rencontre entre plusieurs personnes qui souhaitent travailler sur un défi de programmation de façon collective. Le défi peut être un problème algorithmique à résoudre ou un besoin à implémenter. Chaque coding dojo se concentre sur un sujet particulier, et représente l'objectif de la séance. Ce sujet doit permettre d'apprendre de façon collective sur le plan technique et sur la manière de réussir le défi. L'exercice peut être effectué entre personnes d'une même entreprise, d'une école ou encore venant d'horizons différents.
Les coding dojo mettent en œuvre des techniques de programmation lié aux méthodes agile et à l'extreme programming :
* Pair programming
* Test driven development
C'est un exercice qui tend à se développer depuis 2009$^,$, bien que certains clubs existent depuis plusieurs années.

## Types de coding dojo
### Kata

Une personne démontre au reste du groupe à partir de zéro comment résoudre le problème. Un kata est aussi un exercice de programmation que l'on répète pour perfectionner ses compétences.

### Randori

Des paires tournant de façon régulière (de cinq à dix minutes) codent au tableau le problème. L'assistance peut interrompre en cas de problème de compréhension. Ou encore en pair programming, les deux personnes essaient de coder une solution, au bout d'un certain temps, on change de partenaire, on efface tout ce qui a été fait, et on reprend.

## Organisation d'un coding dojo

Afin d'organiser des sessions de manière efficace, il est nécessaire de respecter un certain nombre d'étapes. Cependant les règles de fonctionnement peuvent différer d'un groupe à l'autre.

### Avant la séance

Il est nécessaire de choisir une date (ou une fréquence) de rencontre, avec un lieu pouvant accueillir l'activité. Un coding dojo nécessite une salle avec au minimum un vidéoprojecteur et un ordinateur (équipé de tous les outils nécessaire au problème, tels que interpréteur, compilateur, IDE…).
C'est également avant la séance que l'on commence à réfléchir au problème qui sera posé, et on décide via un vote public soit avant, soit au début de la séance.

### Pendant le dojo

En fonction du type de dojo organisé, soit une personne résout le problème par étape et de façon pédagogique, en expliquant pas à pas, et les autres posent des questions en cas de problème de compréhension (méthode kata). Dans la configuration randori, chaque personne prend le rôle de pilote pendant une certaine durée de temps, et il est possible d'effectuer autant de passages que voulu.

### Après le dojo

Afin que les participants puissent retravailler le problème vu lors de la séance, il faut mettre à disposition le code produit. On revient ensuite à la première étape, pour préparer le dojo suivant.

## Intérêt

L’intérêt principal des coding dojos est d'apprendre de nouvelles techniques, soit grâce aux connaissances des autres, soit en progressant ensemble face à un problème. Ces sessions permettent de tester et de parfaire des techniques de façon sûre, tout en partageant avec les autres membres son savoir.
Le coding dojo ne fonctionne correctement que si ces trois éléments sont réunis :
* l'envie d'apprendre de nouvelles techniques, de nouveaux concepts de programmation,
* l'envie de partager avec les autres ses connaissances,
* bénéficier d'une amélioration continue de ses compétences.
Habituellement, les développeurs travaillent de manière autonome pour se parfaire, lors de leur travail ou de projets personnels, alors que le dojo permet une progression à plusieurs. Les dojos permettent de découvrir de nouvelles notions en programmation, et peut servir de complément aux formations continues.
   « Si je veux apprendre le judo, je vais m'inscrire au dojo du coin et y passer une heure par semaine pendant deux ans, au bout de quoi j'aurai peut-être envie de pratiquer plus assidûment. Si je veux apprendre la programmation objet, mon employeur va me trouver une formation de trois jours à Java dans le catalogue 2004. Cherchez l'erreur. »
— Laurent Bossavit, président de l'association XP-France (Extreme Programming)