Nur was man aufschreiben kann, hat man richtig verstanden! Das Pattern-Format hilft, einen Lösungsansatz so zu verstehen, dass man ihn strukturiert niederschreiben kann.
Auch wenn der große Hype rund um das Thema Patterns schon länger vorbei ist, bleibt das Pattern-Format sehr hilfreich – nicht nur dann, wenn man nach einer Lösung für ein Problem sucht, sondern auch, wenn man schon eine Lösung hat und diese für andere dokumentieren möchte. Dieser Artikel gibt eine kurze Einführung, wie man sein erstes Pattern schreibt und was man dadurch gewinnt.
Warum Patterns schreiben?
In jedem Softwareprojekt lassen sich Beispiele finden, wie Anforderungen vorbildlich umgesetzt wurden. Vermutlich hat es jeweils unterschiedliche Lösungswege gegeben. Aber unter den gegebenen Rahmenbedingungen und unter Abwägen verschiedener Randbedingungen hat sich ein Lösungsansatz am besten bewährt.
Damit das Wissen um diese Lösungen innerhalb des Projektteams erhalten bleibt und weitergegeben werden kann, muss es dokumentiert werden. Eine reine Beschreibung der entstandenen Struktur hilft zu verstehen, wie die Lösung funktioniert. Um aber weiterzugeben, warum diese Lösung funktioniert und warum keine andere in Frage kam, braucht es mehr.
Hier hilft das Pattern-Format. Patterns zu schreiben ist mit etwas Übung kaum schwieriger als andere Formen der Dokumentation und schon gar nicht eine Domäne nur für Experten. Denn im Grunde genommen sind Patterns nur eine bestimmte Art und Weise, bewährtes Wissen zu strukturieren, um es weitergeben zu können. Und Patterns müssen auch nicht mit einem universellen Geltungsanspruch für die breite Öffentlichkeit geschrieben werden.
Ein Pattern beinhaltet dabei mehr als nur ein Kochrezept. Ein Pattern erläutert nicht nur, was zu tun ist, sondern betont auch das Warum? Warum ist es wichtig, gerade diese Lösung zu verwenden und warum ist es schwierig, eine andere gute Lösung zu finden. Gerade die (Hinter-)Gründe für bestimmte Vorgehensweisen und Strukturen werden sonst eher vernachlässigt.
Als Autor eines Patterns lernt man viel über die Dinge, von denen man glaubte, sie schon gut zu verstehen. Denn üblicherweise kennt man zunächst nur die entstandene Lösung sehr genau. Welches Problem dadurch aber wirklich gelöst wird und wann man die Lösung verwenden kann bzw. wann nicht, hat man seltener direkt parat. Beim Schreiben eines Patterns muss man sich aber mit genau diesen Fragen intensiv beschäftigen und erlebt nicht selten noch einen Aha!-Effekt.
Wie Patterns schreiben?
Die folgende kurze Zusammenfassung basiert auf dem Paper How to Write a Pattern? – A Rough Guide for First-Time Pattern Authors, das eine Schritt-für-Schritt-Anleitung zum ersten Pattern enthält. Alle Fragen, die dieser Blog-Artikel offen lässt, sollte das Paper beantworten können.
Woraus besteht ein Pattern?
Es gibt eine Reihe unterschiedlicher Patternformate, die sich im Laufe der Jahre herausgebildet haben. Glücklicherweise haben alle diese Formate einen gemeinsamen Kern. Es macht daher Sinn, sich beim ersten eigenen Pattern auf diesen Kern zu beschränken:
- Der Name ermöglicht es, über ein Pattern zu reden. Der vielleicht wichtigste Aspekt des Design Pattern-Buchs ist, dass es für die dokumentierten Muster Namen festgesetzt hat, die es heute ermöglichen, über Factories und Strategien zu reden, ohne erklären zu müssen, was man meint.
- Der Kontext setzt den Rahmen, wann das Pattern überhaupt verwendet werden kann. Wenn der dokumentierte Kontext nicht mit dem eigenen übereinstimmt, ist ein Pattern nicht anwendbar.
- Das Problem beschreibt eine Situation, die schwierig zu lösen ist.
- Die Forces (die Rahmenbedingungen) erläutern, warum das Problem schwierig ist und was man beachten muss, wenn man nach einer passenden Lösung sucht.
- Die Lösung schlägt ein Vorgehen vor, welches das Problem löst und dabei möglichst viele Forces berücksichtigt.
- Die Konsequenzen erläutern schließlich, welche Vorteile und Nachteile die Lösung mit sich bringt. Eine Lösung kann beispielsweise neue Probleme einführen oder nicht alle Forces zufriedenstellend auflösen.
Schritt für Schritt zum ersten Pattern
Die wichtigste Erkenntnis zu Beginn ist, dass man ein Pattern am besten in einer anderen Reihenfolge schreibt, als es gelesen wird. Insbesondere bedeutet dies, dass man mit der Beschreibung der Lösung beginnt! Die Lösung ist schließlich das, was man am genauesten kennt. Hilfreich ist dabei, sich zunächst auf nur zwei oder drei Sätze zu beschränken, um die Essenz der eigenen Lösung zu formulieren.
Als nächstes erläutert man das Problem, für das die Lösung geeignet ist. Dieser Schritt ist meistens sehr schwierig, da man leicht bei Trivialitäten landet (Im Sinne von: Wie erreiche ich X? Mache X!). Hier hilft es ebenso, die Beschreibung des Problems zunächst sehr kurz zu halten. Ein Trick ist nun, Problem und Lösung laut vorzulesen und sich zu fragen, ob beides wirklich zusammenpasst.
Hier wie an jeder folgenden Stelle hilft nur ein sehr iterativer Ansatz, immer wieder von vorne das schon Geschriebene zu überarbeiten, um zu einem in sich geschlossenen und konsistenten Stand zu gelangen.
Als nächstes überlegt man sich, welche Konsequenzen es hat, die beschriebene Lösung anzuwenden. Die positiven Konsequenzen lassen sich üblicherweise leicht finden. Jedoch bringt fast jede Lösung auch negative Konsequenzen mit sich, also neue Dinge, die man nun beachten muss. Parallel lohnt es sich, den Abschnitt mit der Lösung auszubauen und deren Details zu erklären.
Anschließend sind die Forces an der Reihe. Die Forces sollen dem Leser helfen, die Tragweite des Problems besser zu verstehen: Warum ist es schwierig? Warum gibt es keine einfachen oder offensichtlichen Lösungen? Was muss man beachten, wenn man eine Lösung sucht?
Ähnlich wie beim Problem und der Lösung hilft es auch bei den Forces und den Konsequenzen, beide Abschnitte gegenüber zu stellen: Eine gute Lösung für ein Problem balanciert alle Forces aus. Entsprechend sollten die Konsequenzen auch beschreiben, wie die Forces aufgelöst worden sind – im Guten wie im Schlechten.
Um das Pattern abzurunden, fehlt noch der Kontext, der ganz grundlegend erläutert, wann die Lösung überhaupt greift.
Schließlich braucht man noch einen griffigen Namen. Der Name sollte immer auf die Lösung verweisen und sich leicht in umgangssprachlichen Sätzen verwenden lassen. Meistens sind dazu Substantivformen besser geeignet als Verbformen/Handlungsanweisungen.
Wenn man die geschriebenen Abschnitte nun in der weiter oben beschriebenen Reihenfolge zusammensetzt, entsteht ein vollständiges Pattern.
Die nächsten Schritte
Pattern-Schreiben ist ein sehr iterativer Prozess und beschränkt sich dabei nicht auf die eigene Person. Denn damit ein Pattern von den potenziellen Lesern verstanden werden kann, ist es wichtig, Feedback einzuholen und einzuarbeiten.
Wenn das Ergebnis nicht nur intern verwendet werden soll, sondern eine Veröffentlichung der Arbeit in Frage kommt, gibt es dafür spezielle Pattern-Konferenzen. Diese Konferenzen, in Europa beispielsweise die EuroPLoP (die jedes Jahr in Bayern stattfindet), sind darauf ausgerichtet, Pattern-Autoren viel Feedback zu geben, um die eigene Arbeit weiter zu verbessern.
Was hat man vom Pattern-Schreiben?
Das Schreiben eines einzelnen Patterns macht mehr Arbeit, als nur einen Lösungsansatz in Form eines Kochrezeptes niederzuschreiben. Dafür gewinnt man tiefe Einsichten in die Thematik. Darüber hinaus gibt man sein Wissen in einer Form weiter, die es den Lesern ermöglicht, erheblich mehr über den Hintergrund des Problems und der Tragweite der Lösung zu verstehen.