Perspektivenwechsel

Im Coding Dojo

Bob und Jens, zwei alte Freunde, treffen sich abends in ihrer Stammkneipe.

Jens: Hi Bob! Wie siehst du denn aus? Du bist ja total durchnässt.

Bob: Hallo Jens! Das ist Schweiß. Ich komme gerade vom Karatetraining und hatte keine Zeit mehr zum Duschen.

Jens (rümpft die Nase und rückt etwas von Bob weg): Äh, ach so. Naja, so sehr hättest du dich dann ja auch wieder nicht beeilen müssen, um pünktlich zu kommen.

Bob (grinst): Du legst doch immer so viel Wert darauf, dass sich niemand verspätet.

Schon gut. Aber was habt ihr denn gemacht, dass du so sehr geschwitzt hast? Bretter durchgeschlagen? Autos poliert? Oder wieder Fliegen mit Essstäbchen gefangen?

Sehr witzig! Nein, wir haben Kata geübt. Heute war Gangaku dran – das bedeutet „Kranich auf dem Felsen“. Eine sehr schöne Kata. Da steht man auf einem Bein, und dann…

Moment, ganz langsam. Was ist denn ein Kata?

Eine Kata ist ein stark formalisierter und stilisierter Kampf gegen mehrere imaginäre Gegner. Da ist genau festgelegt, wann man welche Technik machen muss, in welche Richtung man sich zu bewegwn und welchen Stand man einzunehmen hat. Sogar die Form der Atmung und der Körperspannung ist geregelt – mal atmet man gleichmäßig aus und steigert die Körperspannung kontinuierlich an, mal atmet man explosionsartig aus und spannt alle Muskeln gleichzeitig an, und zwei Mal in jeder Kata macht man einen Kiai, das ist ein Kampfschrei.

Und wozu soll das gut sein? Wenn mich jemand auf der Straße angreift, weiß ich doch vorher auch nicht, wie genau der jetzt zuschlägt.

Das stimmt. Kata hat auch zuerst einmal sehr wenig mit Selbstverteidigung zu tun. Es geht darum, wichtige Grundprinzipien des Karate zu lernen: Spannung und Entspannung, die richtige Atmung, einen festen Stand, den korrekten Abstand zum Gegner, Wachsamkeit – und natürlich die korrekte Ausführung von Schlag- und Tritttechniken. Wenn man diese Prinzipien verinnerlicht hat, dann helfen sie einem auch bei der Selbstverteidigung.

Aha, das hört sich logisch an. Aber warum braucht man dafür eine genau festgelegte Form? Reicht es nicht, die Techniken einfach isoliert zu üben? Im Vorgehen oder einfach im Stand?

Das machen wir auch – nennt sich dann Kihon. Aber Kata ist anders. Jede Kata hat einen ganz eigenen Charakter. In jeder Kata werden ganz spezielle Aspekte des Karate geübt. Außerdem macht es Spaß, so eine Kata zu üben, die sind nämlich teilweise schon sehr alt. Katas werden auch auf Wettkämpfen und bei Gurtprüfungen vorgeführt. Weil die Bewegungsabläufe genau festgelegt sind, kann man dadurch unterschiedliche Karateka sehr gut vergleichen. Als fortgeschrittener Schüler macht man sich dann übrigens daran, diese festen Formen wieder etwas aufzulösen und verschiedene Anwendungen auszuprobieren. Das nennt man dann Bunkai.

Moment mal. Wie viele Katas gibt es denn? Das müssen doch hunderte sein, wenn man die jahrelang übt?!

27.

Du meinst 270?

Nein, im Shotokan-Karate gibt es tatsächlich nur 27 Katas. Und während der ersten acht bis zehn Jahre seiner Karatelaufbahn lernt man nicht mehr als etwa zehn davon.

Im Ernst? Das hört sich ja total öde an.

Das ist ja gerade der Witz: Man soll die Bewegungsabläufe immer und immer wieder üben. Irgendwann sind sie in Fleisch und Blut übergegangen, und man kann sie ausführen, ohne nachzudenken. Dann kann man sich daran machen, die Feinheiten zu üben und verschiedene Variationen auszuprobieren. Aber das Streben nach Perfektion geht nie zu Ende. Auch ein großer Karatemeister wird niemals behaupten, er würde eine Kata wirklich beherrschen. Zum Beispiel hat Gichin Funakoshin mal gesagt…Hallo? Jens? Hörst du mir noch zu? Du siehst so abwesend aus.

[ header = Seite 2 ]Ich überlege gerade, ob sich diese Konzepte nicht auch auf die Softwareentwicklung übertragen lassen. „Coding-Katas“ so zu sagen.

Hört sich absurd an. Wo sollen denn da die Gemeinsamkeiten liegen?

So wie beim Karate spielen beim Programmieren unterschiedliche Techniken zusammen. Das geht damit los, dass man seine Werkzeuge beherrschen muss, allen voran die IDE, geht weiter über so etwas wie testgetriebene Entwicklung bis dahin, dass man die Gesamtarchitektur nach SOLIDen Prinzipien schrittweise entwickelt.

Und diese Dinge üben Softwareentwickler auch alle regelmäßig?

Nun, ja.

Ach deswegen stürzt mir mein Rechner ständig…

Jetzt fang nicht wieder damit an! Tatsächlich üben wir diese ganzen Dinge vor allem während der normalen Arbeit, man wendet sie ständig an und wird damit besser. Aber dabei nimmt man sich ganz selten die Zeit, auch mal darüber zu reflektieren, was man noch wie verbessern kann. Da kam mir gerade die Idee mit den Coding-Katas.

Und Softwareentwicklung ist ein Kampf gegen einen Gegner?

Nun, gewissermaßen schon. Man programmiert ja nicht ziellos vor sich hin, sondern es gilt, gewisse Probleme zu knacken. Und diese Aufgabe kann man sich als Gegner vorstellen, den es niederzuringen gilt.

Aber einen Gegner niederringen, ist ein Kampf, keine Kata.

Genau, da kommt jetzt der Clou: Softwareentwickler lösen auch mal „einfach so“ Aufgaben, um etwas auszuprobieren. Das ist keine Coding-Kata. Bei der Coding-Kata soll es darum gehen, eine Programmieraufgabe noch mal und noch mal und noch mal zu lösen. Das Lösen der Aufgabe ist dabei nur das Mittel, um einen Programmierweg wiederholt zu beschreiten und dabei das Zusammenspiel der Techniken beim Programmieren einzuüben und zu verinnerlichen.

Gut, das klingt jetzt schon mehr nach den Katas, die ich kenne. Aber woher hast du bei einer Coding-Kata die festgelegten Bewegungsabläufe, nach denen du vorgehst?

Ja, das ist wirklich schwierig. Testgetriebene Entwicklung kann einem gewisse Bewegungsmuster vorgeben, aber so einen formalisierten Ablauf wie bei einer Kata im Karate haben wir bei der Programmierung nicht. Noch nicht, denn unsere Katas sind ja auch noch nicht so alt wie eure. Deswegen gehört es bei uns zu einer Kata, dass man unterschiedliche Wege ausprobiert und auf ihre Tauglichkeit prüft.

Und macht ihr beim Programmieren auch einen Kiai?

Rituelle Kampfschreie? Das hört sich ja nach spontanen Gefühlsausbrüchen an. Oder wozu dient das beim Karate?

Zum einen erschreckt man dadurch seinen Gegner: Er soll kurz zusammenzucken, die Augen zusammenkneifen und unachtsam sein. Zum anderen dient der Kampfschrei der eigenen Fokussierung: Für einen kurzen Moment sammelt man all seine Kräfte und bündelt sie in seinem Angriff. Und man wird durch den Kiai für einen kurzen Zeitpunkt unempfindlich gegen Schmerz.

Nach besonders gut gelungenem Code machen wir beim Pair Programming schon mal einen High-Five. Vielleicht sollten wir das um Kampfschreie zu Beginn ergänzen. Uns geht eh zu sehr der Status als Sonderlinge verloren.

Das glaubst aber auch nur du!

[ header = Seite 3 ]

Was sind Coding-Katas?

Jens hat Coding-Katas nicht wirklich erfunden. Aber viele entdecken Coding-Katas gerade neu, nachdem diese vor mehreren Jahren durch den Pragmatic Programmer Dave Thomas erstmals bekannt gemacht wurden. Das grundsätzliche Vorgehen bei Coding-Katas ist schlicht: Man…

  • sucht sich eine Aufgabe
  • versucht diese Aufgabe zu lösen (wobei das bewusste Abbrechen des Versuchs eine valide Option ist)
  • reflektiert über den Versuch
  • nimmt in den folgenden Tagen den nächsten Lösungsversuch mit anschließender Reflexion vor

Die wichtigste Regel einer Coding-Kata ist die Wiederholung. Im Gegensatz zu einer Programmierübungsaufgabe, die man einmal möglichst geschickt löst, wiederholt man in der Kata das Lösen mit gewissen Variationen und lernt so bessere Wege besser kennen.

Für eine Kata sollte man sich regelmäßig geschützte Zeit nehmen. Über mehrere Wochen, mindestens alle paar Tage, 30 bis 60 Minuten, in denen man keinen Zeitdruck hat und E-Mail, Twitter und Telefon stumm schaltet.

Man benötigt Ausdauer für eine Kata. Die Wiederholung entspricht nicht dem gewohnten Programmieren, und dennoch muss man die Kata so oft wiederholen wie nötig. Man sollte dabei akzeptieren, dass man auch Fehler macht oder gar in Sackgassen läuft. Auch muss man variieren können: anstatt immer nur die gleichen Lösungsmuster anzuwenden, muss man diese sowohl abwandeln als auch gänzlich neue Wege ausprobieren.

Um seine Kata immer wieder zu verbessern, sollte man über die Ausführung reflektieren und auch von Anderen Feedback einholen. Hierfür ist es besonders hilfreich, die Ausführung der Kata per Bildschirmaufnahme aufzuzeichnen. Die Aufnahme kann man auch im Internet hochladen, um darüber in seinem Blog oder auf einer Plattform wie http://www.katacasts.com zu diskutieren. Oder man führt die Kata direkt im Web durch und teilt die Ergebnisse mit Kollegen/Freunden.

Für Coding-Katas gibt es noch keine festen „Kata-Läufe“, deswegen muss man sich eine bestimmte Aufgabe suchen, deren Lösungswege man erkunden will. Die Aufgabe sollte interessant sein, sodass man Lust hat, sie zu bearbeiten. Sie sollte aber auch einfach genug sein, denn gerade in den ersten Durchläufen wird man noch recht lange brauchen, was einen sonst zu schnell demotiviert. Gute Quellen für Kata-Aufgaben sind http://www.codekata.com, http://www.rubyquiz.com (auch für andere Programmiersprachen als Ruby geeignet),http://sites.google.com/site/tddproblems und http://www.codingkata.org.

Bei einer Coding-Kata kommt es nicht darauf an, eine richtige Lösung zu programmieren. Es geht darum, entlang des Weges etwas zu lernen.

Marko Schulz arbeitet als Senior Softwareentwickler bei it-agile. Ihm ist eine ganzheitliche Sicht wichtig, bei der gute Programmierung, Architekturentwicklung und Prozessverbesserung Hand in Hand gehen und dabei – wenn auch in unterschiedlichen Anteilen – in der Verantwortung jedes Teammitglieds liegen. Kontakt: marko.schulz[at]it-agile.de.

Arne Roock arbeitet bei der it-agile GmbH in Hamburg. Als studierter Germanist interessiert er sich für informative, leicht verständliche und kooperative Kommunikation. Außerdem beschäftigt er sich seit Längerem mit den Themen Selbstorganisation und Zeitmanagement in der IT.

Geschrieben von
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.