Freitag, 8. Juli 2011

Zündet die Savanne an


Ein Beitrag aus der beliebten Reihe „Time Machine“: Eine nicht ganz ernst gemeinte Betrachtung der Softwareentwicklung, ursprünglich erschienen im Juli 2011 im Blog phphatesme.com. 

Zündet die Savanne an!


Wie hat mein Urgroßvater, ein leidenschaftlicher Großwildjäger immer so schön gesagt: “Und wenn Du den Löwen nicht aus seinem Versteck locken kannst, dann zünde die Savanne an”.
Natürlich war mein Urgroßvater kein Großwildjäger. Und eigentlich wäre dieser Beitrag auch eher passend für den “Developers Shame Day”, aber es geht hier eben nicht um Code, sondern um Methoden und Arbeitsweisen.


Und so möchte ich mich outen: Normalerweise versuche ich meine Programme effizient zu halten, Prozesse schlank und sauber abzubilden, fehlertolerant zu programmieren. Nur manchmal will das einfach nicht funktionieren. Der Teufel steckt dann zu tief im Detail, oft sogar in den unzähligen Sonderfällen oder -wünschen, die berücksichtigt werden müssen und als Vorgaben nicht veränderlich sind. Manchmal arbeiten andere Systeme nicht so sauber zu, wie sie es tun sollten.
Und leider sind “Sonderfälle”, “schlank, effizient”, sowie “fehlertolerant” nach meiner leidigen Erfahrung Dinge, die sich ab einer gewissen Größe fast magisch ausschließen. Die Zauberworte lauten “Komplexität” und “Zeitdruck”.

Schönheit löst keine Probleme


Das sind die Fälle, in denen ich sehr tief einatme und dann programmtechnisch die Savanne in Brand stecke. Da werden nicht einzelne Dateien auf Fehler, Unstimmigkeiten oder Zugriffsrechte hin untersucht, sondern ganze Ordner radikal gelöscht und ganze Prozesse komplett neu und von vorne gestartet. Da werden nicht in den Tiefen irgendwelcher Dateisysteme oder Datenbanken passende Informationsteilchen in einem komplizierten Puzzle gesucht, sondern quasi mit dem Dampfhammer reguläre Ausdrücke über ganze Herden bestehender Dateien gejagt – bis das passende Element dann doch gefunden wurde. Übrigens nicht nur unter PHP, sondern auch unter Java oder anderen Sprachen.

Natürlich könnte man in solchen Fällen auch ins Detail und die Klärung gehen – aber Hand aufs Herz: Wer hat dazu immer die Zeit? Und was macht man, wenn die Probleme unerreichbar außerhalb der eigenen Kontrolle liegen? Wer setzt in solchen Fällten nicht auch ab und zu radikale Methoden ein – auch wenn Prozessoren heiß laufen und Festplatten quietschen? Oder wie es Rasmus Lerdorf einmal angeblich und wohl augenzwinkernd gesagt hat: “…I’ll just restart apache every 10 requests.”

Nur das Ergebnis zählt - The Wooden Mallet Manifesto


Man könnte es vielleicht auch lautmalerisch als “Brute-Force Development” bezeichnen. Vielleicht als neu entdeckte Richtung in der Programmierung mit eigenem Manifest? Mit solchen Punkten wie
  • “Nicht kleckern, klotzen” oder 
  • “Nur das Ergebnis zählt”
  • “Feinheiten sind Fehlerquellen”,
  • “Kopieren ist sicherer als Verschieben”,
  • “Schönheit löst keine Probleme”?

Ein konkretes Beispiel?


Es gab bei Dateizugriffen auf einen externen Server immer wieder unerklärliche Locks auf einzelne Daten. Die Holzhammermethode bestand darin, dass riesige Datenmengen zuerst lokal kopiert wurden (ja, natürlich über eine sichere Leitung, wir reden hier vom Holzhammer, nicht vom Klammerbeutel). Sicherlich keine schöne, ressourcenschonende Lösung. Der Code selbst war aber dennoch sauber geschrieben, getestet und läuft seit Jahren - in tiefer Nacht wenn die Server ansonsten nur gelangweilt Däumchen drehen. Übrigens: Die Locks treten nach all den Jahren nach wie vor auf und die zuständige Firma kann sich das nach wie vor immer noch nicht erklären: Willkommen in der Service-Hölle.

Ein letztes Wort


Nein, ich rede nicht von schlechtem, unsauberen Code oder dem Verzicht von Dokumentationen, Kommentaren oder Tests. Manchmal bildet man Prozesse ab, die eben nicht nicht fein, filigran, prozessorschonend, sondern eher “grobschlächtig” sind. Und nein, gerade mobil ist das natürlich kein erstrebenswerter Weg, schließlich ist mobil nichts so weit entfernt wie das nächste Ladegerät.

Keine Kommentare:

Kommentar veröffentlichen