Warum wird Conways "Game of Life" für Code-Retreats verwendet?


15

Code Retreat ist eine ganztägige Schulungsveranstaltung, die sich auf die Grundlagen der Softwareentwicklung konzentriert. Es steht ein "globaler" Code-Retreat-Tag an und ich freue mich darauf. Das heißt, ich war schon einmal in einem und muss sagen, dass es eine Menge Chaos gab ... was in Ordnung ist.

Eine Sache, die ich immer noch nicht verstehe, ist, warum das "Game of Life" ein gutes Problem für TDD ist und wie sich gutes und schlechtes TDD dafür anfühlt.

Stellen Sie fest, dass dies eine ziemlich offene Frage ist. Sie können sich also gerne dazu äußern.


Dies scheint eine sehr diskussionsorientierte Frage zu sein, die Sie am besten in unserem Software Engineering Chat beantworten können .
Adam Lear

@Anna Lear: Danke, aber nicht um zu chatten, nach Antworten zu suchen. Wenn es keine gute Frage ist, ist es in Ordnung.
Fehler

3
@AnnaLear Ich denke, die Frage ist mehr thematisch, als OP sich zutraut.
Tom Squires

1
@ Tom Ich habe alleine darüber nachgedacht und bin froh, dass es gut läuft. Ich bin froh, falsch zu liegen. :)
Adam Lear

Antworten:


26

Ursprünglich wurde Conways Spiel des Lebens ausgewählt, weil wir beim allerersten Codetreat im Januar 2009 ein Java-Applet zur Hand hatten. Das Ziel des Tages war es, mit einigen Ideen rund um das Üben mit der Zeitbox zu experimentieren, und wir entschieden uns dafür das GoL-Applet, weil wir es hatten.

Danach untersuchten einige aktive Moderatoren (insbesondere ich während meiner Gesellenreise 2009 und Alex Bolboaca in Bukarest) die Verwendung von GoL als Lernwerkzeug. Gleichzeitig haben wir das Coderetreat-Format so weiterentwickelt, wie es heute ist. Im Jahr 2009 versuchte Alex mindestens ein anderes Problem (Pokerhand-Wertung), fand es aber nicht so nützlich wie GoL. Weitere Informationen zur Geschichte finden Sie unter http://coderetreat.org/history

Coderetreat konzentriert sich auf die Verbesserung unseres Verständnisses von einfachem Design (insbesondere der 4 Regeln für einfaches Design), testgetriebener Entwicklung und anderen grundlegenden Aspekten der Softwareentwicklung. GoL hat den Vorteil, dass es ein sehr einfach zu verstehendes Problem ist, während es aus struktureller Sicht immer noch sehr reich ist. Es stellt leicht Teile des Systems bereit, die als Beispiele für alle Themen verwendet werden können, die wir bei coderetreat praktizieren. Beispielsweise ist eine gemeinsame Implementierung, die (x, y) -Parameter in mehreren Methoden verwendet, eine gute Gelegenheit, über das DRY-Prinzip (jedes Wissen sollte nur eine einzige Darstellung in Ihrem System haben) in Bezug auf die Topologie von zu sprechen System. Es gibt viele andere Aspekte, die als Beispiele für die Erstellung eines Entwurfs verwendet werden können, der die Änderungskosten minimiert.

Es gibt mittlerweile einige Leute, die mehrere Codetreats durchgeführt haben, und sie finden immer noch interessante Aspekte des Problems, die sie als Übung verwenden können.


10

Conways Game of Life würde gut passen, da es sich um ein relativ einfaches Coding-Set handelt, das tiefgreifende Ergebnisse liefert. Was die Verwendung für die Test-gesteuerte Entwicklung angeht, würde ich wetten, dass die Tests ziemlich schwierig zu schreiben sind, da die gesuchten Ergebnisse aus dem Code, den Sie schreiben, nicht ersichtlich sind. Das Schreiben von Code, mit dem Sie ein Segelflugzeug erhalten, ist ein ziemlicher Trick, wenn Sie ihn noch nicht oder schon lange nicht mehr geschrieben haben. Somit ist es geeignet, die Kunst der Disziplin zu erweitern, insbesondere wenn es in der Paarprogrammierung ausgeführt wird, wie dies normalerweise bei TDD der Fall ist.

Was das Unterrichten von nützlichen Dingen betrifft; es ist eine Übung in einer Art Querdenken. Sie müssen sich vorstellen, wie Ihr Code funktioniert, ihn ausführen, Fehler feststellen, Daten sammeln, Änderungen vornehmen und die Iteration fortsetzen. All diese Dinge sind für TDD von entscheidender Bedeutung. Wenn Sie es mit der realen Welt verknüpfen, ist es vergleichbar mit einem Kunden, der Ihnen ein vages Anforderungsdokument mit der Aufschrift "Ich möchte X" aushändigt. Also gibst du ihnen X, aber es könnte schwierig sein, an X zu kommen. Conways Spiel des Lebens ist gut darin, das zu lehren. Es ist auch ziemlich einfach zu codieren und erfordert normalerweise nicht viel Code. ( APL ist eines der extremeren Beispiele für die Implementierung.) Es eignet sich daher sehr gut für kurze Sitzungen, in denen ein Retreat statt einer ein bis zweiwöchigen Iteration durchgeführt wird, wie dies normalerweise in einer Produktionsumgebung der Fall ist.


10
Ich würde ein Segelflugzeug als "aufstrebendes" Verhalten betrachten. Ihre Unit-Tests müssen nur die Regeln für Leben und Tod von Zellen bei einer bestimmten Anzahl von Nachbarn kodieren.
Robert Harvey

1
Der Schirm ist definitiv ein auftauchendes Verhalten. Einige Teilnehmer an Coderetreats werden einige größere Tests erstellen, die Dinge wie das Segelflugzeug beinhalten, aber dies sind Führungstests, keine Unit / Tdd-orientierten Tests. Das Verhalten ergibt sich aus der Erstellung der Regeln, die gut definiert sind.
Coreyhaines

3

Game of Life ist auf der einen Seite ein sehr einfaches Regelwerk, auf der anderen Seite enthält es einige der schlimmsten Einschränkungen der fortgeschrittenen Programmierung in Bezug auf die Skalierbarkeit . Während die Ergebnisse deterministisch sind, gibt es die Herausforderung des unendlichen Spielfelds und der unendlichen Anzahl von zu verarbeitenden Zellen.

Wenn die Herausforderungsspezifikationen enthalten minimale Leistung und einen maximalen Speicherbedarf beinhalten , umfassen die Tests schnell wachsende Muster oder Muster, die sich weit und breit in verschiedene Richtungen ausbreiten. Dies kann zu einer sehr frustrierenden Herausforderung werden.

Sie haben die bekannte Eingabe und die bekannte Ausgabe nach X-Iterationen erhalten, und Sie kennen alle Schritte, um dorthin zu gelangen ... mit der Ausnahme, dass die Schritte zu viel und zu lange dauern. Sie müssen einige ziemlich extreme Optimierungen durchführen, um in die Spezifikationen zu passen. Der triviale Algorithmus zum Scannen eines doppelt gepufferten 2d-Bit-Arrays mit fester Größe wird völlig unangemessen, da sich seine Leistung mit 0 (n ^ 2) der Größe verschlechtert. Das Behandeln von gefüllten Blöcken als neue hervorgebrachte Objekte verbraucht plötzlich Tonnen von Speicher und wird langsam. Es funktioniert manchmal, manchmal scheitert es ...

Und da die meisten "globalen" Tests den Leistungsstandard nicht erfüllen, müssen Sie kleinere Ziele entwickeln, kleinere Untertests, mit denen die Vorbehalte ausgeräumt werden ...


2

Es hängt alles davon ab, für welchen Aspekt Ihres Prozesses Sie üben / trainieren möchten.

Ein einziger Tag reicht nicht aus, um alle Aspekte des Software-Engineerings abzudecken, unabhängig vom gewählten Ansatz / Projektmanagement-Paradigma. Um es effektiv zu machen, sollten Sie sich wahrscheinlich auf einen kleinen Teil des Ganzen konzentrieren.

Wenn Sie sich zum Beispiel auf die technischen Aspekte von TDD konzentrieren, möchten Sie möglicherweise die großen Grauzonen um Anforderungen und Beziehungen zum Kunden loslassen und direkt zur Codierung einer Lösung gelangen.

In dieser Hinsicht ist das Spiel des Lebens ein guter Kandidat, da es einfach und verständlich ist und nicht viele Grauzonen enthält, die zur Diskussion stehen werden. So können Sie sofort mit dem Schreiben Ihres Tests beginnen und gegen sie programmieren.

Wenn andererseits das Ziel gewesen wäre, herauszufinden, wie wir TDD nutzen können, um die Anforderungen zu verbessern, hätte ich vielleicht das Spiel des Lebens gewählt, aber ich hätte den Entwicklern nicht gesagt, dass ich das wünsche. Stattdessen wäre ich herumgekreist, um Hinweise und Ideen zu liefern, ohne sie tatsächlich beim Namen zu nennen. Trotzdem könnte sich das Spiel des Lebens für diese Art von Übung als etwas zu einfach erweisen, da die Teilnehmer den Trick höchstwahrscheinlich ziemlich schnell durchschauen würden.

Beispiele für solche synthetischen Übungen sind nicht immer leicht zu finden. Es muss einfach sein, um an einem Tag fertig zu werden, aber nicht zu einfach, um den Tag zu überstehen. Es muss Spaß machen, aber nicht bedeutungslos ... Aber für mich muss es ein bisschen originell sein, ich kann mich nicht erinnern, wie oft ich gebeten wurde, die Schüler dazu zu bringen, ein Videoclub-Verwaltungssystem für Hausaufgaben zu erstellen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.