Was ist überhaupt eine Coding Kata?
Kata ist ein Begriff aus den japanischen Kampfkünsten und benennt eine Übung beziehungsweise einen Bewegungsablauf. Der Sinn einer Kata ist, eine Übung durch ständige Wiederholung immer weiter zu perfektionieren. Eine Coding Kata hat den gleichen Sinn: Eine bestimmte Aufgabe soll immer wieder von neuem erledigt werden, um sich bei jeder weiteren Durchführung auf immer kleinere Details konzentrieren zu können, die einen am Anfang überfordern würden. Dabei steht nicht die Lösung des Problems im Vordergrund, sondern vielmehr der Weg dort hin.
Ziele können beispielsweise sein:
- Erlernung oder Vertiefung einer bestimmten Entwicklungsmethode, z. B. Test-Driven-Development (TDD)
- Verinnerlichung von Clean-Code-Prinzipien
- Vergleich zwischen verschiedenen Umsetzungsarten, z. B. iterativ vs. rekursiv
- Vergleich unterschiedlicher Programmiersprachen
- Test von Rahmenbedingungen, z. B. Remote Pair Programming
Oft werden für die Durchführung einer Kata enge Grenzen oder Einschränkungen gemacht, beispielsweise:
- Einschränkung der Zeilen pro Methode oder Funktion
- Festlegung der maximalen Anzahl an Parametern pro Methode oder Funktion
- Verbot bestimmer Sprachkonstrukte, z. B.
else
-Keyword darf nicht verwendet werden - Beschränkung der logischen Komplexität innerhalb einer Methode („Einrückungsstufen“)
- Festlegung der Entwicklungsmethode, z. B. TDD
Die Aufgabe: Römische Zahlen
Schreibe ein Programm, das Römische Zahlen in Dezimalzahlen übersetzt.
Variationen
- Erkenne syntaktische (z. B. „I X“) und semantische (z. B. „IC“) Fehler in Römischen Zahlen
- Konvertierung in die andere Richtung (dezimal → römisch)
Die Regeln
- Es soll in Paaren unter Verwendung von TDD entwickelt werden.
- Eine Person fungiert als „Driver“ und führt am Rechner die mündlichen Anweisungen der anderen Person, des „Navigators“, aus.
- Alle 15 Minuten tauschen Driver und Navigator ihre Rollen.
Der Ablauf
Es wurden drei Runden mit je einer Stunde Zeit durchgeführt. In jeder Runde haben sich neue Paare gebildet und die Kata wurde von vorn begonnen. Zwischen den Runden gab es kurze Pausen mit regem Austausch: Welche Lösungen haben die Pairs gefunden, welche Probleme gab es?
Wir haben bewusst relativ lange Runden gemacht, üblich sind sonst oft nur 20-30 Minuten. Dadurch hatten wir genug Zeit um kleinere technische Probleme wie beispielsweise starten von Remote-Sitzungen, auszugleichen und uns noch etwas mehr mit dem fachlichen Problem zu beschäftigen.
Ziele
Für uns standen sowohl das gegenseitige Lernen als auch das Ausprobieren von TDD im Fokus. Und der Spaß sollte natürlich auch nicht zu kurz kommen!
Das sagen die Teilnehmer der Kata
Ich habe insbesondere den Erfahrungsaustausch untereinander als großartig empfunden. Am Ende unserer Session hatten wir einige richtig gute, aber vollkommen unterschiedliche Lösungen entwickelt, die ich unbedingt auch mit mir noch neuen Programmiersprachen ausprobieren möchte.
Hannes
Für mich war es schön zu erleben, wie TDD Schritt für Schritt ein immer engeres Fallnetz erzeugt hat, sodass ein Refactoring jederzeit möglich ist, ohne Furcht bestehende Funktionalität zu zerstören, da nur Funktionalität entsteht, die auch getestet ist. Diese Methodik wird sich sicherlich in unserem Alltag weiter ausbreiten und die Qualität unserer Produkte weiter verbessern.
Andreas
Ich fand die Zusammenarbeit mit Kollegen, mit denen man im Entwicklungsalltag eher weniger im Austausch ist, sehr erfrischend, ebenso die interessanten Diskussionen über die verschiedensten Lösungsansätze der Aufgabe.
Jo
Quellen für Coding Katas
Es gibt viele Websites, die fertige Katas bereithalten: