Das Aufschreiben von Schritt-für-Schritt-Anweisungen für die Zubereitung eines kulinarischen Gerichts ist kein neues Konzept. Laut Wikipedia stammen die frühesten bekannten Rezepte aus der Zeit um 1600 v. Chr. und stammen von einer akkadischen Tafel aus Südbabylonien.
Schritt-für-Schritt-Verfahren für Berechnungen, Algorithmen, gehen zurück auf den Mathematiker Al-Khwarizmi aus dem 9. Jahrhundert. Rezepte und Algorithmen erreichen in unterschiedlichen Kontexten das gleiche Ziel: Sie geben Anweisungen, um eine Aufgabe wiederholbar zu machen.
Die Mitglieder eines Software-Entwicklungsteams wählen aus einer Vielzahl von Methoden aus, um ihren Prozess zu definieren: ihre wiederholbare Art, Software zu produzieren.
Die Zubereitung köstlicher kulinarischer Gerichte hat, zumindest metaphorisch, mehr mit der Entwicklung hochwertiger Software gemeinsam, als Sie vielleicht denken.
Als professioneller Koch wollen Sie zum Beispiel Ihre Restaurantküche blitzblank halten. Reinigungsaufgaben wie das Bürsten des Grills zwischen dem Garen von rotem Fleisch, Geflügel und Fisch müssen mehrmals am Tag erledigt werden. Fettablagerungen stellen eine große Brandgefahr dar. Deshalb sollten Fettabscheider täglich gereinigt werden, Spülbecken und Wasserhähne wöchentlich entkalkt werden, und Sie sollten jeden Monat hinter der heißen Linie (Ofen, Herd, Fritteusen) waschen.
Diese Reinigungsaufgaben brauchen Zeit. Zeit, in der das Küchenpersonal keine Speisen zubereitet und keine Einnahmen generiert.
Stellen Sie sich nun vor, dass der Besitzer des Restaurants Ihnen sagt, Sie sollen die Zeit, die Ihr Personal für die Reinigung der Küche aufwendet, reduzieren. Kurzfristig mag das funktionieren. Aber auf lange Sicht werden Sie unfreundliche Besuche vom Gesundheitsamt bekommen. Oder das Fett fängt Feuer, und Ihre Küche geht in Flammen auf.
Das Äquivalent zu diesen Reinigungsaufgaben in der Welt der Software-Entwicklung sind Aktivitäten wie das Refactoring des Codes, um ihn wartbar zu halten, und das Schreiben von Unit-Tests für ihn.
Stellen Sie sich vor, Sie sind der Chefkoch eines Restaurants, das dafür bekannt ist, die besten Steaks der Stadt zu servieren. Sie haben sich Ihren Ruf auf der Grundlage eines Leitsatzes erarbeitet: niemals Kompromisse eingehen. Sie wählen das Rindfleisch für Ihre Steaks von Hand aus, zum Beispiel in einer Metzgerei Ihres Vertrauens. Sie setzen Ihre Erfahrung leidenschaftlich ein und bereiten die Steaks perfekt zu.
Stellen Sie sich nun vor, der Besitzer des Restaurants sagt Ihnen, dass Sie Ihr Fleisch stattdessen im Supermarkt kaufen sollen (und zwar nicht nur in der Metzgerei im Supermarkt, sondern vorverpackte Stücke aus dem Kühlregal).
Was tun Sie dann? Einen Kompromiss eingehen? Oder stellen Sie sich Ihrem Chef entgegen und sagen ihm, dass Qualität nicht verhandelbar ist?
Das kann durchaus zu einer Situation führen, in der das berühmte Zitat von Martin Fowler zutrifft:
If you can't change your organization, change your organization!
Wenn Sie nicht wissen, woher Ihre Zutaten kommen, können Sie nicht genau sicher sein, was sie enthalten. Mit diesen Zutaten zu kochen ist kein Problem, solange Sie in Ihrem Restaurant keine Menschen mit Lebensmittelallergien bedienen.
Wenn Sie keine frischen Produkte, Kräuter und Gewürze verwenden, um zum Beispiel eine Tomatensoße zuzubereiten, können Sie einem Gast, der beispielsweise gegen Knoblauch allergisch ist, nicht mit gutem Gewissen eine Soße aus dem Supermarkt servieren. Auf dem Etikett des Glases, in dem die Soße verkauft wird, kann Knoblauch als Zutat aufgeführt sein, muss aber nicht. Aber nur weil er nicht als Zutat aufgeführt ist, heißt das nicht, dass die Soße keine Spuren von Knoblauch enthält; das kann reichen, um eine Anaphylaxie auszulösen.
Es ist sehr sinnvoll, bei der Entwicklung Ihrer Software Komponenten von Drittanbietern zu verwenden. Wenn Sie jedoch eine Komponente verwenden, die nicht (ausreichend) getestet ist, gehen Sie das gleiche Risiko ein wie der Koch, der eine Fertigsauce aus dem Supermarkt verwendet. Sie wissen nicht genau, was der Code der Komponente tut. Für den „Happy Path“ mag sie gut funktionieren. Aber was ist mit den Randfällen? Noch schlimmer ist es, eine Komponente eines Drittanbieters zu verwenden, die nicht mehr gewartet wird. Sie mag heute gut funktionieren. Aber wird sie auch noch funktionieren, wenn beispielsweise eine neue Version von PHP veröffentlicht wird?
Ich möchte Sie mit einem Zitat von Julia Child verlassen:
The only time to eat diet food is while you're waiting for the steak to cook.
Bon appétit!
Die in diesem Artikel gezeigten Folien wurden ursprünglich in einer Präsentation auf dem San Francisco PHP Meetup verwendet.