Testbericht

Buchvorstellung: Design Patterns für die Spieleprogrammierung

Geschrieben von Oliver Baumann

Na? Schonmal mit dem Gedanken gespielt ein eigenes Spiel zu entwickeln? Einfach mal ein Buch über Unity oder einige Tutorials zum RPG Maker oder zur Unreal Engine angeschaut und dann loslegen wollen? Das ist alles toll und eine durchaus löbliche Sache. Und damit man auch noch Herr über seinen eigenen Code bleibt und nicht irgendwann in Mitten des Projektes sich die Haare rauft hat der mitp-Verlag in unserem Sprachraum das Buch “Design Patterns für die Spieleprogrammierung” veröffentlicht. Dann werfen wir doch mal einen Blick rein und schauen ob das Buch eine wertvolle Bereicherung ist oder nur eines von vielen lieblos zusammengewürfelten Büchern über Designpatterns ist.

9783958450905

Disclaimer

Bevor ich damit beginne auf das Werk einzugehen möchte ich noch ein paar Worte zur Klarstellung verkünden. Als erster und für mich persönlich wichtigster Grund möchte ich mich beim mitp-Verlag dafür bedanken, dass sie ein Exemplar der Redaktion zur Verfügung gestellt hat.

Die Rezension wurde aus der Perspektive eines Programmierers verfasst, der sich in der Materie schon auskennt. Es wird versucht sich in der Ausdrucksweise auch für Fachfremde deutlich zu formulieren, dies ist allerdings nicht immer möglich. Sollte etwas unverständlich sein, einfach in den Kommentaren nachfragen.

Der Inhalt

Die deutsche Fassung des Buches “Design Patterns für die Spieleprogrammierung” erschien erstmals am 31. August 2015 und wird durch den mitp-Verlag vertrieben. In diesem Sachbuch behandelt der amerikanische Autor Robert Nystrom verschiedene Design Patterns (Entwurfsmuster), welche sich für die Entwicklung von Videospielen als Wertvoll erwiesen haben. Zu berücksichtigen gilt, dass dieses 400 Seiten umfassende Werk eine Selektion von Mustern enthält.

Der Autor selbst, welcher gebürtiger US-Bürger ist, arbeitet laut Angaben seit 8 Jahren bei Electronic Arts und hat dort an verschiedenen Spielen mitgearbeitet. Zu den berühmteren Beispielen dürfte unter anderem die Madden-Serie gehören.

Das Buch umfasst insgesamt 6 Kapitel, welche sich thematisch in 3 Themen aufgliedern lassen. Der erste Teil stellt die Einleitung dar, in welcher das Buch und dessen Aufbau genauer beschrieben wird. Der Autor beschreibt was er mit diesem Sachbuch beabsichtigt. Thematisch werden die Designpatterns über den Aspekt der Softwarearchitektur eingeleitet. Dabei wird nicht nur beschrieben was das ist sondern auch wieso diese wichtig ist und auch einige Punkte wie das Thema lose Kopplung vs. Enge Kopplung werden behandelt.

Im zweiten Teil „Design Patterns überdacht“ nimmt der Autor einige der klassischen Patterns heraus und interpretiert sie neu im Kontext der Spieleentwicklung.

Der Hauptteil des Buches stellen die 13 Design-Patterns dar, welche der Autor im Rahmen des Buches analysiert. Dieser Themenblock umfasst die Abschnitte 3 bis 6. Die Abschnitte sind so angelegt, dass sie die jeweiligen Entwurfsmuster gliedern. So sind beispielsweise in Teil 3 sogenannte Sequenzierungsmuster untergebracht. Den einzelnen Mustern sind jeweils ein eigenes Kapitel gewidmet in dem es vorgestellt, analysiert und diskutiert wird.

Neben den Sequenzierungsmustern werden Verhaltensmuster und Entkopplungsmuster vorgestellt. Der finale Teil fokussiert sich auf Muster, die für die Optimierung der (Spiele-)Performance zuständig sind. Es geht also um Themen wie dem optimalen Umgang mit Systemressourcen.

Ab dem achten Kapitel stellt jedes ein gewisses Entwurfsmuster dar. Der Aufbau ist dabei jeweils identisch. Zu Beginn wird anhand eines Szenarios ein Problem dargestellt. Dies ist die Motivation für das zu beschreibende Pattern. Anschließend wird es genau vorgestellt. Was macht es? Wofür kann ich es anwenden? Welche Folgen hat dies für mich und den Code? Das Pattern wird mittels C++-Code in Beispielen implementiert. Im anschließenden Punkt Designentscheidungen werden auf alternative Implementierungen des Patterns eingegangen bzw. auf Varianten, in denen sich das Pattern umsetzten lässt. Der Finale Punkt referenziert andere Pattern, die mit dem vorliegenden im Zusammenhang stehen, sei dies durch eine mögliche Konfliktsituation oder durch Synergien. Zudem wird auch auf Open-Source-Code verwiesen, welcher das Pattern umsetzt.

Die Kritik

Eine komische Beschreibung des Inhaltes, oder? Anstatt die konkreten Inhalte zu nennen wird der Aufbau der Inhalte beschrieben. Der Grund dafür liegt an der Art des Buches. Würde ich genauer auf den Inhalt eingehen, so müsste ich größere Teile des Buches mehr oder weniger direkt wiedergeben. Warum? Nachdem eine Grundlage geschaffen wird, werden die Pattern der Reihe nach beschrieben. Den konkreten Inhalt zu nennen würde einer Auflistung der Pattern gleich kommen.

Auf den ersten Blick bietet das Buch nicht unbedingt was neues. Es gibt viele Bücher über Design Patterns. Sie haben in der Regel einen „Katalogcharakter“. Sie wirken wie eine Auflistung. Dies macht dieses Buch auch. Aber was macht dieses Buch besonders?

Betrachtet man sich den Titel, so sticht der Begriff „Spieleprogrammierung“ hervor. Und tatsächlich sind Pattern darin enthalten, die für diesen Anwendungsbereich zu erwarten sind. Dazu gehören unter anderem neben Flywheight und State Machine auch Object Pooling und die Game Loop. Die Selektion der Pattern macht durchaus Sinn. Wer sie jedoch kennt, und bedenkt man die Zielgruppe, so ist dies nicht abwegig, wird nicht unbedingt etwas komplett neues lernen. Vielmehr ist es die Vorgehensweise, bei der Pro und Kontra abgewägt werden. Dass die sich daraus folgenden Konsequenzen, die sich durch das Anwenden des Patterns ergeben können, ebenfalls besprochen werden, sticht genauso positiv hervor.

Der Autor betet einen nicht einfach die Muster vor und predigt, dass man sie für bestimmte Fälle anwenden soll. Es ist viel mehr eine Analyse gefolgt von einer Diskussion. Ein interessantes Beispiel dafür ist das Singleton-Pattern. Normalerweise würde der Kommentar dazu lauten: Das ist Böse, PUNKT! Im Falle eines Java-Entwicklers könnte es sogar passieren, dass einem ein Blutbad bevor steht. Zugegeben: Ein bisschen übertrieben. Die Java-Community ist allerdings ziemlich gruselig, wenn man deren Doktrine nicht blind folgt. Der Autor geht an dieser Stelle auf das Pattern ein. Er gibt an was das Gute an dem Pattern ist (theoretisch betrachtet ist es durchaus nützlich) und warum genau es so problematisch ist (Theorie ist das eine. In der Praxis schaut die Sache schon mal anders aus). Hinzu kommt, dass auch noch ein alternativer Lösungsansatz vorgestellt wird.

Das Singleton-Pattern mag jetzt ein eigenartiges Beispiel sein. Es stellt aber auch ein Kapitel dar in dem deutlich hervorgeht, dass der Autor sich in erster Linie auf seine Erfahrungen bezieht. Es wird auch einem nicht verbietet, dass man es einsetzt. Vielmehr wird davon abgeraten. Was ist der Unterschied? Eine Erklärung warum mit stichhaltigen Argumenten. Diese Vorgehensweise zieht sich durch das komplette Buch durch.

Das Buch ist übrigens aus der Ich-Perspektive geschrieben und hat diesen typisch ungezwungenen Stil, in dem die Persönlichkeit des Autors und Anekdoten von ihm mit einfließen, so wie man es von Sachbüchern aus den USA kennt. Der mitp-Verlag vertreibt die deutschsprachige Übersetzung des Werkes von Robert Nystrom und denjenigen, die bei der Übersetzung involviert waren, kann man an dieser Stelle ein Lob aussprechen. Das Buch ist verständlich. Die Zusammenhänge sind noch erhalten. Und es liegt immer noch ein gewisser Charme vor, den dieser Schreibstil mit sich bringt. Man hat nicht das Gefühl als ob die Persönlichkeit des Autors verloren gegangen sei. Der Verlag hat hier eine bessere Arbeit für ein Sachbuch abgeliefert als bei dem einen oder anderen „Schandwerk“, welches beispielsweise „Der Herr der Ringe“ durch die Übersetzung ruiniert hat. Was ich damit sagen will: Gute Arbeit! Die deutsche Übersetzung macht genauso Spaß wie das englische Original.

Neben Programmcode werden Inhalte anhand von Skizzen näher gebracht.

Neben Programmcode werden Inhalte anhand von Skizzen näher gebracht.

Der C++-Code in diesem Buch macht vieles Verständlich und die Skizzen illustrieren gut die abstrakten Konzepte ohne unnötig aufgebläht zu wirken. An dieser Stelle muss ich auch zugeben, dass ich ein bisschen am Schwanken bin. Auf der einen Seite hätte ich mich durchaus über mehr Skizzen gefreut. Auf der anderen macht es keinen Sinn welche zu verwenden, wenn es nicht notwendig ist. Kommen sie vor, so sind sie definitiv hilfreich und tragen zum Verständnis bei. Der Code ist ebenfalls nur als Verständnishilfe zu betrachten. Er ist nicht falsch. Der Autor gibt aber direkt zu Beginn an, dass der Code nur als Beispielimplementierung dient um Verständnis für die praktische Umsetzung zu machen. Leider hat mir der Autor damit etwas Angriffsfläche für Kritik genommen. Der Code ist nicht optimiert und auf sprachspezifische Features, die beispielsweise mit C++ 11 eingeführt wurden, wird bewusst verzichtet. Der Code ist auch wenn man kein C++ kann verständlich. Die Verwendung von aktuellem Code gegenüber Pseudocode ist, dass der Code nicht zu abstrakt ist.

Bei all dem Lob muss es doch aber auch was zu nörgeln geben, oder? Das Buch ist gut. Ich denke, dass es sogar ein recht nützliches Buch ist. Aber ist es wirklich für Spieleprogrammierer? Jein. Das Problem ist, dass die Zielgruppe aus Programmierern besteht, die bereits Erfahrung haben müssen. Wer bei null anfängt, der wird vieles in diesem Buch nicht wirklich umsetzen können. Auch wird nicht zwingend klar, wie sich die Pattern anwenden lassen unter der Berücksichtigung einer Physik-Engine oder dem Code, der für die KI zuständig ist. Wer die Erfahrungen hat, die für dies notwendig ist, der dürfte die Pattern schon kennen und unter Umständen weniger Nutzen aus dem Buch ziehen als erhofft. Ein weiteres „Problem“ ergibt sich aus dem Fakt, dass Spiele heutzutage mit Engines erstellt werden. Einige davon haben einen hohen (Unitiy) bis sehr hohen (RPG Maker) Abstraktionsgrad. Die Entwickler haben nicht unbedingt die Möglichkeit bzw. den Bedarf die Pattern anzuwenden, da die Engine schon ein Entwicklungsmodell vorgibt, welches die Pattern unter der Haube integriert. Wäre hingegen XNA nicht bereits ein totes Projekt, so könnte man dieses Buch jedem XNA-Entwickler in die Hand drücken. Außerhalb der Spieleprogammierung ist dieses Buch ebenfalls zu empfehlen. Dies liegt vor allem daran, dass das Buch sich mit Themen wie Speichereffizienz auseinander setzen.

Wem würde ich das Buch empfehlen?

Wer von Programmierung keine Ahnung hat, der kann mit dem Buch nichts anfangen. Dass man Code schreiben kann ist eine Grundvoraussetzung. Allerdings dürfte schon der Titel dies klar machen. Wer weiß was ein Design Pattern ist und sich mit der Spieleentwicklung auseinander setzten will, für den dürfte das Buch durchaus interessant sein.

Allerdings würde ich auch jenen Programmieren ein Exemplar empfehlen, welche andere Software erstellen. Patterns wie Object-Pooling, Event Queue, Statemachine und Observer dürften bei der angestrebten Zielgruppe schon bekannt sein. Hier werden sie allerdings analysiert und abgewogen.

Berücksicht man Engines wie den RPG Maker und zu einem gewissen Grad Unity, dann sind die Inhalte zwar interessant, allerdings durch die Restriktionen und Vorgaben des Entwicklungsprozesses nicht anwendbar.

Als Programmierer macht das Buch aber auch durchaus Spaß zum Lesen. Von daher könnte es auch durchaus eine Option sein für jene, die eine unterhaltsam geschriebene Fachlektüre genießen wollen. (Oder bin ich der einzige mit dieser Macke?)

[amazon box=”3958450903″]

Fazit

Fachlich gut verfasst ohne dabei zu langweilen. Dieses Buch füllt eine Lücke im literarischen Bereich der Spieleentwicklung aus, die von vielen Autoren gerne mal übersehen wird, und bereichert als solches das Regal eines Entwicklers, auch wenn er nicht unbedingt an Videospielen arbeitet. Wer nicht direkt auf Quellcodeebene arbeitet sondern eine Engine mit hohem Abstraktionsniveau verwendet, der kann die vorgestellten Konzepte jedoch nicht umsetzten. Zudem gibt es auf dem Markt schon viele Bücher zu Design Patterns wie beispielsweise das Standardwerk der „Gang of Four“.

Wer schon einige Bücher zu Design Patterns hat, der wird vermutlich nur wenig neues entdecken. Was dieses Buch so gut macht sind nicht etwa die Pattern, die vorgestellt werden, sondern wie diese analysiert werden und die Diskussion, die der Autor zu ihnen führt. Es gibt zu viele Bücher, die dies eher stiefmütterlich behandeln, so dass man das Gefühl hat, dass man eher durch einen Katalog blättert. Und unterm Strich wäre dies wohl das Hauptargument, das für dieses Buch spricht: Der Autor gibt sich nicht damit zufrieden eine Hand voll Patterns runter zu leiern sondern bespricht diese auch.

gold