Code Katas / Coding Dojos / Code Retreats – So lernen Software Crafter #Mein Ziel23

Im Rahmen des CLC-Projektes habe ich mir vorgenommen, die Software Craftsmanship Bewegung unter Lern-Gesichtspunkten zu erkunden. In diesem Beitrag geht es um typische Lern-Methoden der Software-Handwerker.

Mein Hauptquelle für diesen Beitrag ist der Podcast Macht der Craft von Alexandre Soler Sanandres und Matthias Alt. Diese erste Episode des Podcasts beschäftigt sich mit dem Lernen mit Code Katas (individuell), mit Coding Dojos (im Team) und Code Retreats (mit Vielen).

Zum Podcast gibt es erfreulicherweise ein gutes Transkript, aus dem ich in der nachfolgenden Zusammenfassung einige Zitate entnehmen konnte.

„Das Zauberwort heißt Übung. Übung macht den Meister!“ (Min 0:14)

Bei Software kann man innere und äußere Qualität unterscheiden:
Äußere Qualität: Das was der Kunde, der User; mit der Software erlebt.
Innere Qualität: Wie verständlich und klar der Code geschrieben ist.
Dabei geht es immer ums Abwägen, wie viel Aufwand jeweils unbedingt erforderlich ist.

Software-Qualität setzt Üben und Können voraus. Eine Möglichkeit des selbständigen Lernens und Übens sind Code Katas.

Code Katas

  • Der Begriff Katas kommt aus dem Karate. Da werden Bewegungsabläufe so verinnerlicht, dass sie ins Muskelgedächtnis übergehen.
  • Katas beim Programmieren sind ganz ähnlich: Das sind kleine Programmieraufgaben, die wiederholt ausgeführt werden, um das Handwerk als Softwareentwickler zu beherrschen.
  • Der Kern ist das Üben: „Wir müssen die Sachen öfter machen, öfter wiederholen, damit sie auch ins Blut übergehen können und wir uns keine Gedanken machen müssen, wie bestimmte Methoden oder Praktiken funktionieren“ (Min 14:55). Das hilft auch ähnliche Probleme zu erkennen und bringt auf Ideen zu deren Lösung.
  • Zum Üben gibt es Online-Plattformen mit vielen Übungsaufgaben für Softwareentwickler, zum Beispiel:
    • https://exercism.org/:
      Develop fluency in 67 programming languages with our unique blend of learning, practice and mentoring. Exercism is fun, effective and 100% free, forever.
    • https://www.codewars.com/:
      Achieve mastery through challenge. Improve your development skills by training with your peers on code kata that continuously challenge and push your coding practice.
  • Beide Experten sprechen von einer halben Stunde üben pro Tag. Aus eigenem Antrieb und regelmäßig wiederholend, damit sich das auch wirklich festsetzt.
  • „Wichtig ist erst einen Weg zu versuchen, eine Lösung zu finden und dann kannst du auch versuchen, andere Variationen zu finden, wie man das Problem anders lösen kann und wie gesagt, es ist völlig in Ordnung, wenn es nicht auf Anhieb klappt.“ (Min 18:30)
  • Sogar eine neue Programmiersprache erarbeiten sie sich über Katas.

Coding Dojos

  • „Der Begriff Dojo kommt, genauso wie die Kata, aus den  japanischen Kampfsportarten wie Karate, Aikido, Judo und so weiter. Ein Dojo ist der Ort, an dem man zum Trainieren zusammentrifft.“ (Min 23:02)
  • „Ein Dojo ist für mich ein sicherer Ort, in dem man zusammenarbeiten kann, ohne sich Gedanken über die Arbeit zu machen, wo man Sachen ausprobieren kann, wo kein Konkurrenzdenken da ist. Wir arbeiten alle zusammen, um besser zu werden.“ (Min 23:45)
  • Beim Coding Dojo kommt ein Gruppe zusammen, etwa 10, die immer paarweise zusammen an gestellten Aufgaben arbeiten. Nach der ersten Aufgabe stellen die Teams sich ihre Lösungen gegenseitig vor und diskutieren die Lösungswege. Bei diesem Austausch entstehen die wesentlichen Learnings. Coding Dojos dauern 30 Minuten bis maximal 2 Stunden.
  • Es gibt verschiedene Varianten des Zusammenarbeitens bei den Coding Dojos. Zum Beispiel kann einer den Job des Navigators und ein anderer den Job des Drivers bekommen. Der Navigator gibt an, was zu schreiben ist, der Driver setzt um, und alle anderen hören zu. Nach wenigen Minuten wird gewechselt: Der Navigator übernimmt die Tastatur und ein anderer aus der Gruppe wird jetzt Navigator. Und das alle paar Minuten wieder neu.
  • „Also bei sowas wie einen Dojo geht es für mich in erster Linie darum, mit anderen Leuten zusammenzuarbeiten und nicht immer nur sich selbst zu sehen und seinen eigenen Code und wie man selbst entwickelt, sondern in so einem Dojo lernt man auch wunderbar mit Programmierstilen anderer Entwickler umzugehen. Man kann unglaublich viel lernen, vor allem, wenn in diesen Dojos erfahrenere Entwickler als man selbst mit dabei sind. Wenn unerfahrene Entwickler dabei sind, kann man natürlich genau die andere Rolle einnehmen und Wissen vermitteln.“ (Min 29:37)
  • „Einer der wichtigsten Gründe sowas zu machen ist, dass es Spaß macht. Zumindest mir. Mir macht es Spaß. Du bist weg von dem Alltag. Du hast keinen Druck irgendwas fertig zu machen. Du bist nur da, um mit anderen Menschen zu programmieren, zu codieren. Fehler gibt es nicht. Es gibt nur Wege, die nicht dorthin führten, wo du dachtest. Aber mein Gott, da hast du was gelernt. Und du musst nicht fertig werden. Du lernst eine ganze Menge von anderen Leuten und zwar nicht nur besser zu programmieren, was natürlich eine der Hauptkomponenten ist. Einfach das voneinander Lernen. …. Aber auch, wie kommuniziere ich meine Gedanken besser? Wenn du zum Beispiel in der Senior Rolle bist, wie kann ich meinem Kollegen oder meinem Pair beibringen oder erklären, was ich will? So dass er es auch versteht. Ja auch zuhören, ausreden lassen. Man übt Kritik geben, aber auch Kritik nehmen. Also auch für die Kommunikation innerhalb des Teams oder die Gruppe ist es eine gute Sache, finde ich.“ (Min 30:37)
  • Eine weitere Definition von Coding Katas: https://t2informatik.de/wissen-kompakt/coding-dojo/
  • Es gibt sogar eine eigene Webseite für Coding Dojos: https://codingdojo.org/
  • Speziell für Kinder von 7 bis 17 Jahren gibt es diese Angebote: https://www.coderdojo-deutschland.de/ und auch diese: https://coderdojo.com/de-DE.

Code Retreats

  • „Ja, der Coderetreat, ein Super-Erlebnis. Man kommt an einen Ort, wo ganz viele Gleichgesinnte auftauchen. Lauter Entwickler und Entwicklerinnen, die sich einen ganzen Tag eigentlich die Aufgabe setzen, Code zu produzieren, aber ihn auch wieder wegzuwerfen und zwar sehr häufig. Das ist für viele sehr, sehr ungewohnt.“ (Min 33:02)
  • Allen wird eine Programmieraufgabe gestellt, die sie in 45 Minuten lösen sollen
  • Wieder arbeitet man in Zweier-Teams zusammen
  • Nach den 45 Minuten hört man auf (auch wenn man nicht fertig ist) und reflektiert seine Arbeit
  • Danach löscht man den geschriebenen Code
  • Jetzt werden die Paare neu zusammengesetzt
  • Man geht an die gleiche Aufgabe mit neuem Partner
  • Und das bis zu 6 mal am Tag!
  • „Und es gibt unglaublich tiefe Einblicke in die Arbeitsweise anderer Leute. In andere Programmiersprachen kann man wunderbar Einblicke bekommen, weil auf so einer Veranstaltung sind natürlich auch nicht nur z.B. Java Entwickler, sondern da kommen dann auch mal ein Cobol Entwickler oder eine JavaScript Entwicklerinnen oder ich habe tatsächlich auch schon mit einem Manager zusammen programmiert. Also da kommen die interessantesten Konstellationen zusammen.“ (Min 34:00)
  • Code Retreats finden meistens Samstags statt. „Aber gut ich habe meistens kein Problem damit, private Zeit dafür aufzubringen. Weil ich denke, dass all das mir hilft, besser zu werden, in dem Beruf, den ich ausübe. Und das ist eine Aufgabe, die mich betrifft, nicht nur meinen Arbeitgeber. Ich finde es super, wenn mein Arbeitgeber mir Möglichkeiten zur Weiterbildung gibt. Aber auch wenn es nicht so wäre, finde ich, es liegt an jedem, sich weiterbilden zu wollen.“ (Min 36:10)
  • „Das Wort Code Retreat besteht aus zwei Worten eigentlich, aus Code und auf Retreat. Code wegen des Code schreibens. Das Retreat ist aber wichtig, das ist ein Rückzugsort, wo man außerhalb des Jobs, das mal tatsächlich machen kann. Das ist wichtig. Das gibt es etwa seit 2009, soweit ich mich erinnere, von Corey Haines und anderen Softwareentwicklern vorbereitet. Und mittlerweile gibt es jedes Jahr den sogenannten Global Day of Coderetreat, in dem innerhalb eines Tages überall auf der Welt Code Retreats gehalten werden.“ (Min 37:23)
  • Damit die 5 oder 6 Wiederholungen der gleichen Aufgabe nicht langweilig werden, kann man für jeden Durchgang besondere Bedingungen setzen. Zum Beispiel: Die Pairs dürfen nicht reden, nur über den Code kommunizieren. Oder: Die Maus darf nicht verwendet werden. Oder: Es darf nicht objektorientiert gearbeitet werden. …
  • Eine Definition von Code Retreats: https://www.it-agile.de/agiles-wissen/agile-entwicklung/was-ist-ein-code-retreat/
  • Auch hier gibt es eine internationale Webseite https://www.coderetreat.org/?seed=1234 mit Anleitungen fürs Durchführen von Code Retreats. Dass es bei den Code Retreats wirklich ums Lernen geht, wird an der Antwort auf die Frage „Warum muss ich meinen Code löschen?“ deutlich:
    „Das Ergebnis jeder Session sind die gemeinsamen Learnings, die du erlebt hast mit Deinem Session-Partner.“

Fazit

„Ich würde das nun so zusammenfassen: Es sind drei von den Methoden, die mir am besten gefallen haben, mir am besten geholfen haben mich qualitativ in meinen Entwicklungsfähigkeiten zu verbessern. Weil du die Möglichkeit hast, entweder alleine mit den Katas, mit deinem Team in einem Coding Dojo, oder mit vielen andere Menschen in einen Coderetreat Erfahrungen auszutauschen. Sehen wie andere andere Sachen machen, wie man programmieren kann, wie man Probleme lösen kann. Und das in regelmäßigen Abständen zu machen, hat mir zumindest total viel geholfen.“ (Min 44:20)

Die offenbar ganz selbstverständliche Einstellung zur eigenen Weiterentwicklung beeindruckt mich in diesem Podcast schon sehr. Die drei Formate scheinen wirklich von Vielen mit dieser Haltung genutzt zu werden. Mir gefällt auch der Gedanke des intensiven Übens. Den haben wir in den allermeisten Weiterbildungen völlig verdrängt. „Gebt den Leuten Zeit und Gelegenheit zum Üben, sonst üben sie im echten Projekt.“ Diesen einleuchtenden Satz kann man auf alle Branchen übertragen!


Ergänzung weiterer Lernanregungen für Software Crafter auf die ich bei meinem Recherchen gestoßen bin (13.04.2023)

Advent of Code

Advent of Code ist eine jährliche, vorweihnachtliche Serie von Programmieraufgaben, die als Adventskalender verpackt sind. Hinter dessen Türen verbergen sich täglich neue – von Tag zu Tag schwierigere – Herausforderungen. Die Aufgaben können in einer beliebigen Programmiersprache gelöst werden und bestehen jeweils aus zwei Teilaufgaben.

Retrospektiven

Retrospektiven sind Teamtreffen, deren Ziel es ist, aus der Vergangenheit zu lernen. „Retrospektiv“ bedeutet „rückblickend“. Die Teammitglieder schauen also gemeinsam zurück und bewerten, was gut und was schlecht gelaufen ist. Sie analysieren, warum Dinge gut liefen oder von Erwartungen abwichen, um so Maßnahmen zur Verbesserung zu formulieren und anzugehen. (Quelle: it-agile.de)

Craftsman Swap

Die Software Craftsmanship-Bewegung nimmt so manche Anleihen bei den Gebräuchen mittelalterlicher Handwerkergilden; ein solcher Gebrauch ist die Walz, oder international der “Craftsman Swap”. Hierbei geht es darum, dass zwei Craftsmen ihre Arbeitsplätze miteinander tauschen (üblicherweise zeitversetzt), um beim jeweils anderen sowohl Erfahrungen sammeln als auch sein Wissen einfließen lassen zu können. (Quelle xpdays.de)

Pet-Projekte

Reale Projekte ohne Auftraggeber, ohne Zeit- und Kostendruck. Das kann die Beteiligung an Open Source Projekten sein, aber auch ein privates Projekt. Das trainiert die eigenen Fähigkeiten. (Beitrag von medium.com.)

Open Source Projekte

Das Übernehmen von Teilbereichen eines Open Source-Projektes ist ein gutes Training der eigenen Fähigkeiten. Man kann später darauf hinweisen, an dem Projekt beteiligt gewesen zu sein. Zudem kommt man mit anderen Entwicklern in Kontakt.

Netzwerken

Anderen Experten in relevanten sozialen Medien folgen, sich mit anderen austauschen, eigene Beiträge schreiben.

Bücher lesen, Blogs abonnieren, Videos schauen

Das gilt nicht nur für Softwareentwickler.

Lernzeit einplanen!

Wer Neues lernen will braucht Zeit. Die muss im Kalender eingetragen sein, sonst wird meist nichts draus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert