Noch nie von Programmier-Katas gehört? Ich auch nicht. Das Wikipedia-Orakel lässt verlauten:
Die Mehrzahl der [Katas] in den Kampfkünsten sind Einzelformen, bei denen ein einzelner Kampfkünstler die Abfolge ausführt, die einen Kampf mit einem imaginären Gegner darstellen kann, aber auch einfach eine Aneinanderreihung verschiedener Bewegungen sein können
Was bedeutet dies nun bezogen auf den sterblichen Programmierer? Für ihn sind Katas kleine Programmier-Aufgaben, die er immer wieder Lösen kann. Dabei löst man nicht ein Kata nach dem anderen, sondern nur ein Kata immer wieder.
Das hört sich unsinnig an? Dieser Meinung war ich auch bis ich es selbst einmal probiert hatte.
Mein erstes Kata ist von Roy Osherove. Wer das mit dem Kata einmal ausprobieren möchte (und dies empfehle ich ausdrücklich), sollte auf der folgenden Seite erst einmal nur bis zum Beginn der Nummerierung lesen, denn dies stellt die Aufgabe dar. Außerdem empfehle ich, die Videos noch nicht anzuschauen. Der Link zum Kata befindet sich im letzten Wort dieses Satzes :D.
Wer damit dann fertig ist, sollte sich eines der Videos (in meinem Fall das Java Video) anschauen und mal die Schönheit, Sauberkeit und Lesbarkeit des eigenen Codes mit dem im Video vergleichen. Ich war echt überrascht und plötzlich vom Sinn solcher Programmier-Katas überzeugt: Manchmal macht Übung den Meister.
Im normalen Programmieralltag ist es schwer, überhaupt nur in die Nähe von Perfektion zu kommen. Das liegt vor allem daran, dass die meisten Probleme nur einmal auftreten und als erledigt gelten, sobald eine funktionierende Lösung vorliegt. Sich hier dann beim nächsten Auftreten eines ähnlichen Problems zu steigern wird schwer weil man entweder die alte Lösung noch im Kopf hat und sie einfach nachbaut (sie hat sich ja schon als funktionierend erwiesen), oder weil man sie nicht mehr weiß und damit wieder von vorne anfängt.
Bei einem Kata hat man dagegen die Möglichkeit, kontinuierlich an allem zu feilen, was das Problem hergibt, um schließlich eine annähernd perfekte Lösung zu kennen. Nur: Was bringt es mir eine perfekte (oder sehr sehr Gute) Lösung zu kennen? Die Antwort lautet: Um zu erfahren, wie sich guter Code anfühlt. Mit dem Sinn für guten Code kann man dann schnell schlechten Code (oder schlechtes Code-Design), der einem von den Fingern fließt, erkennen und hoffentlich schon während dem Entstehungsprozess verbessern. (Es gibt noch viele weitere Antworten, die mir hierzu einfallen würden, allerdings sei es jedem selbst überlassen, sie zu finden.)
Große Empfehlung: Probier das Kata aus, es sind nur 30 Minuten deines Lebens!
PS: Die meisten Katas sind speziell für Anwender des TDD (Test-Driven Development) geschrieben, was man auch ziemlich einfach an der Struktur der Katas erkennen kann. Nichts desto trotz kann man die Aufgaben natürlich auch mit normalem „Brute-Force“ programmieren lösen.