Global Day of Code Retreat

Am 14. November war der Global Day of Code Retreat (gdcr) und Mathema hat mich eingeladen bei Ihnen teilzunehmen.
Die Idee hinter dem gdcr ist genial einfach: Entwickler stecken paarweise die Köpfe zusammen um „Conway’s Game of Life“ testgetrieben zu implementieren. Aber: Am Ende jeder Session wird der Code gelöscht und gemeinsam in der Gruppe über die Session, die Probleme und die Lösungansätze reflektiert. Danach startet eine neue Runde mit neuen Teams: Anstrengend aber lehrreich!

Conway’s Game of Life

In Conway’s Game of Life wird das Leben von Zellen in einer 2D-Welt simuliert. Deren Fortpflanzung ist anhand einfacher Regeln bestimmt und die Generation n+1 ist eine eindeutige1 Funktion der Generation n:

  • Eine Zelle stirbt, wenn sie von weniger als 2 oder mehr als 3 lebenden Zellen umgeben ist.
  • In einem leeren Feld entsteht Leben, wenn es von genau drei lebenden Zellen umgeben ist.

Setzt man willkürlich Leben auf die 2D-Welt, kann man zusehen wie es sich fortpflanzt, stagniert oder gar ausstirbt. Früher oder später findet man aber auch eines der vielen wiederkehrenden Muster, wie etwa den Glider.

Idee hinter gdcr

Die Idee hinter dem gdcr ist, dass man durch das Löschen von Code, Spielcode, eine neue Session ganz ohne Ballast beginnen kann. Der Kopf ist frei für neue Lösungsansätze. Jede Runde kann man sich einem neuen Teilproblem zuwenden: Wie mache ich die Datenstruktur? Programmiere ich diesmal funktional? Wie gestalte ich die Ausgabe? Stelle ich die verschiedenen Stati einer Zelle anhand Vererbung da? Wie initialisiere ich die Welt?
Jede Runde bringt zudem neues kreatives Potential: Wie arbeite ich mit dem neuen Partner zusammen? Was sind seine Ideen und Vorschläge? Wie organisieren wir uns?

Wie war’s denn nun?

Nun ja, sehr interessant! Denn, an sich ist das Problem sehr einfach zu überblicken und die fehlende Spezifikation, wie geht man mit dem Rand der Welt um, lässt sich im Team schnell festlegen.
Kniffliger wird es allerdings bei einer guten Idee für die Datenstrukturen. Denn ich möchte z.B. über die Zellen der Welt iterieren können, einfach die Nachbarn finden und die Welt in die nächste Generation bringen ohne die aktuelle Generation zu beeinflussen!

Ich habe das Problem zuerst Ruby, dann in Groovy, dann in Clojure, dann wieder in Ruby gelöst und zuletzt sogar SQL genutzt. Eigentlich habe ich das Problem nur in Ruby gelöst. Aber dazu gleich mehr.

Erstaunlich war, dass in der ersten Session bei kaum einem Teilnehmer groß etwas rumgekommen ist. Zu neu war die Situation sich auf einen Partner einzustellen und zügig einen Durchstich zu haben. Es hat sich aber herausgestellt, dass es wichtig ist schnell ein Projekt inkl. Tests erstellen zu können. Nur so kommt man schnell in Fahrt kann Code schreiben und Tests ausführen. In der zweiten Session, Groovy, haben wir nämlich rund 20 Minuten gebraucht um ein halbwegs passendes Projekt zu haben. In der dritten Session, Clojure, konnten wir schnell starten, scheiterten dann aber an ungenügenden Kenntnissen in Clojure. In der vierten Session, wieder mit Ruby, habe ich meinem Partner die Programmiersprache gezeigt und wir sind sogar fertig geworden: Ein Glider lieft über den Bildschirm. SQL in der letzten Session war eher ein Gag. :-)

Den Code der vierten Session habe ich aber nicht gelöscht und zuhause noch um eine Initialisierung der Welt anhand einem Muster erweitert und die Welt als Kugel modelliert.

Fazit

Es hat sehr viel Spaß gemacht! Möchte man jedoch richtig vom gdcr profitieren, sollte man in der gewählten Sprache sattelfest sein und zügig ein Projekt erstellen können.
Code löschen, rm -rf session-1, ist gar nicht so einfach. Befreit aber wirklich.

  1. Eindeutig, sobald klar ist, wie man den Rand der Welt verarbeitet.