Code Kata Bunkai: Prime Factors


Bernd Schiffer has published a screencast of the Prime Factors Code Kata that we prepared.
When a programmer new to TDD watches such a code kata he has the same problem that an unexperiences karate student has when he watches a karate kata. He can see what’s happening but he has no idea why.
In karate there is a second kata flavour: Bunkai:

Bunkai literally meaning “analysis” or “disassembly”, is a term used in Japanese martial arts referring to the application of fighting techniques extracted from the moves of a “form” (kata) (see Wikipedia).

When watching a kata bunkai it becomes pretty obvious why the moves of the kata are done.
The same should be possible with code katas. Therefore we tried to transfer the bunkai concept to code katas. For now that simply means that the non obvious parts of the code kata are explained. I published the result for the prime factors code kata on YouTube.

I have to confess that I simply cut Bernds video. I think the real code kata bunkai should include the explanation in the kata – like it is in karate. We will work on that.

13 Comments

  1. Sehr schönes Beispiel. Die Kata Idee begeistert mich von Tag zu Tag mehr. In einem ersten Selbstversuch konnten wir zwar nicht soforf alle Geheimnisse von TDD erkunden, dafür hatte die Kata aber eine sehr motivierende Wirkung. Kann ich jedem sehr empfehlen!

    Aber ein nettes Datum habt Ihr Euch da ausgesucht – schon interessant was manche Leute so am 24.12. alles treiben 😉

    Grüße Heiko

  2. HI Sebastian, danke für den Link zu Bob’s annotated version. Seine Erklärung von Kata an sich gefällt mir sehr gut, denn er trennt die Kata ab vom Programmieren.

    Das war mir bisher nicht so klar. Er erklärt das ja eher wie das Üben bei Musik 8das auch immer ein bisschen Musik ist, aber eben nicht das selbe wie Musik machen). Er sieht also, glaube ich, eher eine Analogie zum Üben von Arpeggios, Scalen, Turn-Arounds usw. um die muscle memorization zu verbessern und damit irgendwann zu einer neuen Intuition zu bekommen.

    So sagt mir das noch viel mehr als vorher!

    Und ja, das Beispiel zeigt mir wie schön so ein voice-over ist. 🙂

    LG

    Markus

  3. @Markus: Code Katas sind durchaus unterschiedlich interpretierbar: einerseits als Problemlösung, andererseits als reine Übung.

    “Over time, the concept of katas grew from a problem to solve to a solution to practice.” siehe http://katas.softwarecraftsmanship.org/?page_id=2

    Wenn Du eine Kata startest, dann typischer- und empfehlenswerterweise ohne (!) vorher die Lösung zu kennen. Je öfter Du die Kata dann wiederholst, desto mehr kommst Du vom Problemlösen zum Üben.

    Aus meiner Erfahrung wirst Du aber beim reinen Üben nie ganz ankommen: Katas sind per Definition nie zu Ende oder abgeschlossen, nie perfekt. Das bedeutet, dass man immer noch wieder Verbesserungen findet, auch nach der dutzendsten Wiederholung.

    Was Du ständig wiederholst, sind bestimmte Tastenanschläge, vergleichbar Akkorden üben auf einer Gitarre. Hier sehe ich durchaus ein reines Üben, kein Problemlösen.

    Von daher würde ich nicht zustimmen, dass Katas sich weiterentwickelt haben vom Problemlösen zum Üben. Beides ist auf zwei unterschiedlichen Ebenen ständig vorhanden. Und von daher sehe ich auch nicht, dass Katas vom Programmieren abgetrennt sind.

  4. Wie schon getwittert fand ich besonders schön, die Kata selbst als “Aufführung” von dem Weg dorthin abzutrennen.

    Denn das ist ja das schöne, der Weg dort hin, das Problemlösen, das Üben, die muscle memorization ist Notwendig um die Illusion zu kreieren, alles sei ein leichtes Spiel.

    Tatsächlich kann bei der Aufführung noch einiges schief gehen. (Mehr Üben). Im Laufe der zeit fallen einem Verbesserungsmöglichkeiten ein -> noch mehr Üben.

    Aber, die eigentliche Kata als kleines aufgeführtes Kunstwerk von der eigentlichen Arbeit abzugrenzen und gerade dadurch darüber zu erheben finde ich eine sehr schöne Idee!

    @Bernd ich denke wir meinen sogar das gleiche 🙂

  5. Danke für die Erläuterung der Kata, das hilft wirklich zum Verständnis.

    Noch besser hätte es mir auch gefallen, wenn die Erläuterung gesprochen wäre, wenn sie ausführlicher gewesen wäre und wenn das Autoradio dabei erhalten geblieben wäre.

  6. Der Link zu Uncle Bobs Kata ist ebenfalls klasse (Danke, Sebastian) und lehrreich.

    Was mir auffällt: In Katas kommen die Ausführenden öfter an Punkte, an denen sie sowas sagen wie “Das sieht jetzt seltsam aus, aber ich weiß schon, dass ich das später so gut brauchen kann”. Durch die Wiederholung einer Katas weiß man ja wirklich “wo man hinwill”, aber ist das nicht genau falsch? Sind das nicht trügerische Optimierungen?

    Wenn man mit Katas seinen Fingern gute Bewegungen beibringen (und vielleicht auch anderen einen guten Weg zeigen) will, dann sind Abkürzungen, weil man ja schon weiß, wo man hinwill, genau verkehrt.

    Höchstens wenn man (sich) beibringen will, dass man bei diesem konkreten Problem größere Schritte gehen kann und soll, dann scheinen mir solche Abkürzungen hilfreich. Ansonsten sind sie das genaue Gegenteil: schädlich.

Leave a Comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s