Mon catalogue de katas

J'aime beaucoup les Coding Dojos et le live coding de manière générale. Je fais donc régulièrement des katas de code : petits exercices conçus pour s'entraîner sur une compétence particulière.

Il n'est pas toujours aisé de trouver le bon kata en fonction du niveau et des compétences recherchées. J'espère que cet article pourra vous aider dans cette tâche !

Les katas de TDD

La seule contrainte commune à tous les Coding Dojo est le travail en TDD. Les katas dans cette catégorie sont faits pour s'entraîner à cette approche.

Fizz Buzz

Le classique parmi les classiques et, quand il n'est pas utilisé pour les entretiens d'embauche, il est très bien ! J'aime beaucoup l'utiliser lors d'une première session avec un groupe n'étant pas du tout habitué aux tests ou pour faire une démonstration rapide de TDD.

Leap Years / Années bissextiles

Quand je n'ai pas envie de faire un FizzBuzz mais que je suis exactement dans la même situation, je fais un Leap Years.

Dictionary Replacer

J'aime beaucoup ce kata méconnu qui offre de nombreuses variantes, que ce soit sur le sujet (en changeant la manière de trouver les clés) ou sur les paradigmes de développement pour sa résolution.

À mon sens, c'est un très bon kata pour commencer les Coding Dojos. Le principal défaut que je lui trouve est son manque d'évolutivité : si un groupe termine très rapidement, il ne sera pas guidé naturellement vers autre chose pour continuer à coder pendant la session (et ce sera aux animateurs de "souffler" des idées).

Employee Report

J'aime bien ce kata car il est en plusieurs stories et il est très facile d'en imaginer d'autres (chaque "équipe" pourra donc avancer sans frustration à son rythme). C'est aussi un kata intéressant pour introduire la manipulation des streams Java à une équipe qui n'est pas à l'aise avec.

♥ String Calculator

On arrive sur un kata que j'apprécie tout particulièrement ! J'apprécie les manipulations de chaînes de caractères qu'il enseigne mais j'aime surtout les refactorings demandés par les différentes stories. Ah, et c'est un kata en plusieurs stories donc chaque "équipe" avance à son rythme !

Word wrap

Plusieurs bons points pour ce kata :

  • Il fait l'objet d'un article de blog expliquant un chemin de pensée possible pour sa résolution ;
  • Il y a de très nombreuses manières de le résoudre ;
  • Il est très simple à expliquer (donc on gagne du temps sur cette étape) ;
  • Il permet de bien voir l'intérêt des baby steps (petites étapes).

Pourtant, je trouve que le rapport énergie pour le résoudre / enseignement pourrait être meilleur car une partie de la complexité est vraiment propre à ce sujet et ne pourra donc pas être utilisée au quotidien.

♥ Roman Numerals

Un autre kata de cœur : il s'explique en une phrase, il y a plein de manières de le résoudre et il montre bien l'intérêt des baby steps !

♥ Bowling Game

Encore un kata que j'utilise très souvent. Il s'explique relativement simplement puisque la majorité des gens sont déjà allés jouer une fois au Bowling. Il permet aussi de bien comprendre l'intérêt du TDD en faisant apparaître un nouvel élément de design à chaque itération.

Attention cependant à bien spécifier que, pour ce kata, on ne s'intéresse qu'aux parties terminées et correctes (sans quoi il est bien plus complexe).

Game of Life

Quand on parle de kata on pense souvent à FizzBuzz ou à Game Of Life (le jeu de la vie de Conway). Ce que j'aime dans ce kata ce sont les différentes approches qu'il permet. Lors du GDCR 2020 un participant nous confiait avoir déjà fait de nombreux Code Retreat dont 6 sur ce kata et qu'il en apprenait encore des choses !

Il n'est cependant pas dans mes coups de cœur mais c'est certainement parce que je ne l'ai pas suffisamment pratiqué.

Les katas de Refactoring

Même si les katas de TDD demandent du Refactoring (puisque c'est une étape de TDD) on trouve aussi des katas spécialisés dans le Refactoring qui viennent avec un existant qu'il faut retravailler.

Le gros intérêt de ces katas est qu'ils permettent de se faire la main sur des code smells que l'on rencontre au quotidien.

♥ Movie Rental

Mon nouveau coup de cœur pour le Refactoring ! Je pense que c'est un des meilleurs katas pour s'essayer à l'exercice et au format : il est relativement simple, demande une adaptation du design relativement importante, ressemble à des cas réels, ... bref, un bon exercice !

Trip Service

Ce kata est intéressant pour les patterns de code non testable qu'il contient (et donc pour les solutions qu'il enseigne). Pour moi c'est cependant son seul intérêt.

Tennis

L'atout majeur de ce kata : ses 3 bases de code faisant la même chose (mais ayant des problèmes très différents) qui permettent l'apprentissage de plusieurs techniques.

♥♥ GildedRose

Là, je dois bien admettre que je ne suis pas objectif ! C'est avec ce kata que j'ai découvert l'existence même des katas pendant une présentation du legacy au cloud en moins d'une heure par David Gageot.

J'ai sans doute fait ce kata une centaine de fois depuis et je l'aime toujours autant ! Il m'a tellement appris ; et ces apprentissages me servent vraiment au quotidien depuis des années. Si vous voulez que pléthore de refactorings deviennent un réflexe, de la mémoire musculaire, je pense vraiment que c'est le meilleur kata à faire et refaire !

Trivia

Ce kata est intéressant car, contrairement aux autres katas de refactoring, la base de code est buggée. Il faudra comprendre l'intention des auteurs pour corriger les bugs une fois qu'ils auront été identifiés.

D'autres katas ?

Il existe, bien évidemment, énormément d'autres katas. S'ils ne sont pas dans cette liste c'est probablement parce que je ne les connais pas ou que je trouve qu'ils ne se démarquent pas vraiment.

N'hésitez pas à explorer, à expérimenter et à créer vos propres katas pour vous faire votre propre liste de favoris !