Coding-Kata: Definitiv mehr als nur langweiliges Heruntergetippe!

von Matthias Streidel | 13. April 2021 | Allgemein, Deutsch, Software Engineering

Matthias Streidel

Senior Developer

Immer wieder wird Coding-Kata als Übung für sich selbst oder für das Team von Software-EntwicklerInnen negativ kommentiert. Die Kritik lässt sich wie folgt zusammenfassen: Coding-Kata bringe doch nichts und sei nur Zeitverschwendung. In der Zeit könne man besser etwas Sinnvolles machen, zum Beispiel an der Story weiterarbeiten. Andere wiederum scheinen Coding-Kata regelrecht zu huldigen, als wäre sie die einzig notwendige Form der Übung, um professionelle Softwareentwicklung zu erlernen. Stichwort Silverbullet
Beidem kann man aber nur teilweise zustimmen, denn die Wahrheit liegt – wie so oft – in der Mitte. Doch von Anfang an: Was ist Coding-Kata?

Begriff

Zuerst sollte ein generelles Verständnis des Begriffs Coding-Kata geschaffen werden: Kata[1] stellt eine wichtige Säule aus dem Curriculum des Karate dar. In einer einzelnen Karate-Kata führt der bzw. die Übende eine fest vorgeschriebene Bewegungsabfolge aus. Diese Übung wird immer wieder wiederholt, um Bewegungen, Bewegungssequenzen, Kraftfluss, Gewichtsverlagerung und vieles mehr zu verinnerlichen. Je nach Erfahrungsgrad und Skill kommen immer mehr Aspekte als das ‘bloße Aneinanderreihen von Bewegungen’ hinzu. Wichtig ist hierbei die „Bedeutung von Praxis und häufiger Wiederholung für das Lernen.“[2] Im Allgemeinen reicht es aus zu wissen, dass bei der Ausführung einer Karate-Kata Bewegungen/Muster zur Übung wiederholt werden.
In einer Coding-Kata wird eine vordefinierte Programmierübung durchexerziert. Am bekanntesten ist Fizz Buzz[3], dessen Grundregeln einfach zu verstehen sind: Gib alle natürlichen Zahlen von 1 bis 100 aus. Ist die Zahl durch 3 teilbar, ersetze sie mit ‘Fizz’. Ist sie durch 5 teilbar, ersetze sie durch ‘Buzz’. Treffen beide Eigenschaften zu, dann gib ‘FizzBuzz’ statt der Zahl aus.

Die Lösung des Problems kann mit unterschiedlichen Sprachen oder Technologien, aber auch mit der gleichen Sprache auf unterschiedliche Art und Weise erreicht werden. So kann beispielsweise auf die Unterstützung einer IDE verzichtet werden – die Umsetzung erfolgt dann innerhalb eines einfachen Texteditors. Natürlich gibt es noch viele weitere ‘Settings’, die in einem später erscheinenden Blog-Post erläutert werden.
An dieser Stelle seien die Lektüre der entsprechenden Wikipedia-Artikel für Coding-Kata[4] und Karate-Kata[5] ans Herz gelegt.

Kritik

Auch online zeigen sich bloggende EntwicklerInnen von Coding-Kata oft nicht begeistert. Im Folgenden ein Beispiel von John Sonmez zur Veranschaulichung. Er kritisiert in seinem Beitrag[6] (berechtigterweise) die Auffassung vieler begeisterter AnhängerInnen von Coding-Kata, dass nur durch das hundertfache und repetitive Heruntertippen des immer gleichen Codes nennenswerte Fortschritte gemacht werden können:

This is Jennifer Dewalt’s blog; she decided to learn to code by building 180 websites in 180 days. While you are sitting at your keyboard typing the same 20 lines of code into your IDE over and over again, Jennifer is creating a new thing every single day and facing a brand-new challenge. Who do you think will improve their skills more after 180 days, you or Jennifer? I know who I’d hire without even thinking twice.

John’s Beispiel ist anschaulich, enthält aber auch einen groben Denkfehler, dem viele Coding-Kata-Ablehnende verfallen. Seiner Ansicht nach hat Jennifer keine Coding-Kata exerziert, jedoch hat sie eben genau das gemacht. Sie hat die Aufgabe zur Erfüllung eines fest definierten Ziels 180 mal wiederholt und ausgeführt. Dabei hat sie jedes Mal etwas dazugelernt und in die nachfolgenden Wiederholungen einfließen lassen. John verkennt: Eine Coding-Kata stellt mehr ein Konzept dar, als eine feste Regel, die man irgendwo nachschlagen kann oder die durch eine höhere Institution legitimiert wird. Es gibt keine festen Abläufe bei der Durchführung einer Coding-Kata: Keine Regel besagt, wie beispielsweise das Ergebnis einer FizzBuzz-Implementierung auszusehen hat – außer natürlich der bzw. die EntwicklerIn setzt sich selbst entsprechende Einschränkungen. Kurzum wird in dem Beitrag nicht erwähnt, dass niemand vorschreibt, die Aufgabe einer Coding-Kata dürfe nicht angepasst oder verändert werden.

Natürlich ist es zwecklos immer und immer wieder dasselbe zu machen und eine Veränderung oder Verbesserung zu erwarten.[7] Wenn nie etwas Neues passiert, schaltet das Gehirn irgendwann auf Autopilot und ein ernstzunehmender Lerneffekt bleibt aus.

Wozu dann Coding-Kata?

Ist das Ziel eine verbesserte Fertigkeit (z.B. eine verbesserte Geschicklichkeit/Geschwindigkeit im Umgang mit der IDE), kann es hilfreich sein eine Übung sehr oft und wie einen Drill zu wiederholen. Professionalität, in Form z.B. von Wissen darüber, wie die IDE funktioniert, wird dabei jedoch nicht aufgebaut. Laut David Bradley reicht es nicht aus, sich 10.000 Stunden mit dem immer gleichen Thema auf die immer gleiche Art und Weise zu beschäftigen – will der bzw. die Übende jene Professionalität erreichen, ist es vielmehr wichtig, sich stetig und bewusst mit einem Thema zu beschäftigen und sich täglich neuen Herausforderungen zu stellen.[8]
Auch diese Aussagen von Bradley sollten nicht dogmatisch befolgt werden: Coding-Kata muss nicht strikt regelmäßig, zum Beispiel jeden Abend, stattfinden. Auch ist eine Coding-Kata generell kein Ersatz für praktische Entwicklungserfahrung, im Falle eine/r Software-EntwicklerIn also die Arbeit am Produkt.

Auch das Kata Manifesto[9] umfasst die oben genannten Punkte und hebt zusätzlich sicheres Experimentieren, Vielfalt und gemeinsames Lernen als wichtige Aspekte hervor. Gerade beim Experimentieren und gemeinsamen Lernen wird nicht 20 mal hintereinander exakt dasselbe gemacht wie die Male davor. Diese Lernformen leben davon, dass man vom Plan abweicht, Fehler macht und im besten Fall etwas dazulernt. Die Coding-Kata bietet hier dann einen sicheren Rahmen, in welchem Fehler ohne Konsequenzen gemacht werden dürfen. Das Kata Manifesto spricht hier von einer „eigenen privaten, virtuellen Sandbox“.
Es wird das Resümee gezogen, dass nicht die Durchführung der Kata selbst, sondern die sich akkumulierende Masse des Lernens zum Erfolg führt. Es findet sich dort übrigens kein Hinweis darauf, dass die gleiche Übung immer gleich wiederholt werden sollte, sondern im Gegenteil: Es können verschiedene Lösungsansätze ausprobiert werden. Geschieht dies gemeinsam in einem Team statt im Alleingang, bekommt man dann auch gleich die Möglichkeit, einen Blick über den eigenen Tellerrand hinauszuwagen.

Schließlich darf bei der übergreifenden Bewertung von Coding-Kata auch nicht vergessen werden, dass es unterschiedliche Lerntypen gibt: Manch einer bevorzugt das Lernen aus Büchern, während andere zu Videos oder Schritt-für-Schritt-Tutorials oder Übungen wie Coding-Kata neigen. Am Ende ist es egal wie man lernt – die Hauptsache ist, dass man lernt, sich weiterentwickelt und dafür das für sich passende Lernformat findet.

Kata as Competition

Es gibt im übrigen noch eine weitere Variante von Coding-Kata: Kata als Wettbewerb.[10] Auch bei Senacor haben wir schon einen Code-Kata-Wettbewerb ausgelobt, bei dem Entwickler gegeneinander angetreten sind und um den Pokal gekämpft haben. Der Vorteil hierbei ist, dass man nie demselben Problem zweimal begegnet, verschiedene Lösungswege für dasselbe Problem erarbeitet und unbekannte Probleme schnell zu erfassen übt.

TL;DR

Coding-Kata wird häufig kritisiert – oft sogar zu Recht. Allerdings ist eine pauschale Verurteilung nicht gerechtfertigt, denn die Sinnhaftigkeit hängt auch davon ab, auf welche Art und Weise und mit welchem Ziel im Hinterkopf die Coding-Kata exerziert wird. Außerdem kommt es auf den Lerntyp an: Nicht jeder möchte Coding-Kata zum Lernen nutzen – manchmal steht auch der Wettbewerb im Vordergrund.

[1]: Das Wort Kata hat keinen Plural.
[2]: Coding-Kata (DE).
[3]: Fizz-Buzz-Kata.
[4]: Coding-Kata (EN).
[5]: Karate-Kata.
[6]: John Sonmez’ Blog Post.
[7]: Far Cry 3 lässt grüßen.
[8]: Siehe hierzu den tollen Beitrag von David Bradley.
[9]: Kata Manifesto.
[10]: Zum Beispiel CondinGame oder Codewars.