Übersetzung: Programmieren stinkt!
Ein Essay von Peter Welch, ins Deutsche übersetzt von Christian N. Hofmann.
Peter Welch ist ein freier Autor aus Brooklyn, der auf seiner Webseite stilldrinking.org Essays über fast alles und jeden schreibt. Seine Meinungsäußerungen gibt es ebenfalls in geballter Ladung in Buchform (auch auf Papier!) unter dem Titel And Then I Thought I Was A Fish beim Medienriesen käuflich zu erwerben, allerdings nur für diejenigen, die des Englischen mächtig sind.
Programmieren stinkt
Jeder meiner Freunde - jeder mit einem Job, der auch nur im entferntesten etwas damit zu tun hat, mehr als zweimal pro Woche irgendetwas hochzuheben, das mehr wiegt als ein Laptop -, schafft es irgendwann, die folgende Aussage in eine Unterhaltung einfließen zu lassen: "Junge", denn es fängt immer mit "Junge" an, "deine Arbeit ist nicht hart. Ich habe gerade eine 4700-Stunden-Woche hinter mir, in der ich nur mit einem Schraubenzieher bewaffnet einen Tunnel unter Mordor gegraben habe."
Klar - keiner mag Mordor und es ist bestimmt körperlich wesentlich anstrengender, einen Tunnel zu graben, als eine Tastatur zu pieksen, es sei denn man ist eine Ameise. Aber könnten wir uns, nur für diese Abhandlung, darauf einigen, dass Stress und Irrsin ebenfalls schlechte Dinge sind? Klasse. Willkommen in der Welt der Softwareentwicklung.
Alle Softwareentwickler-Teams sind aus und von Verrückten zusammengestellt
Stell Dir vor, Du würdest in einem Ingenieursteam anfangen. Frisch von der Universität, aufgeregt und voller Enthusiasmus und neuer Ideen - gerade aus einer Welt aus sauberen, hübschen Entwürfen, die durch ihre Einheit aus Zweck und Design beinahe Erstaunen hervorrufen. Zuerst lernst Du Mary kennen. Mary leitet ein Brückenbauprojekt in einem wichtigen Metropolgebiet. Sie stellt Dir Fred vor, nachdem Du es durch die 15 Sicherheits-Checks geschafft hast, die Dave installiert hat, weil Daves Sweatshirt Einmal Und Nie Wieder von seinem Schreibtisch gestohlen wurde. Fred arbeitet nur mit Holz, daher fragst Du, warum er an einer Brücke arbeitet, die den Rush-Hour-Verkehr einer Großstadt über 60m Stromschnellen tragen soll. Keine Sorge, antwortet Mary. Er ist für die Gehwege verantwortlich. Welche Gehwege? Naja, Fred hat sich für die Einführung von Gehwegen stark gemacht, und sie machen auf der Brücke schon was her. Natürlich müssen sie ohne Geländer gebaut werden, denn es gibt eine strikte Keine-Geländer-Regel von Phil, der übrigens kein Ingenieur ist. Keiner weiß genau, was Phil eigentlich macht, aber es ist definitiv voller Synergie und hat etwas mit der Managementabteilung zu tun, und kein Ingenieur will sich mit dem Management beschäftigen, also lassen sie Phil einfach tun, was er will. Sara hat währenddessen einige Techniken zum Betonieren ausgegraben - allerallerneueste Bananentechnik!, und hat sie allesamt ins Brückendesign eingearbeitet, was bedeutet dass man sie alle irgendwie vermeiden muss, da jede Technik ihre eigenen Sicherheitsrisiken birgt. Tom und Harry arbeiten schon seit Jahren zusammen, und mindestens genauso lange streiten sie sich darum, ob sie jetzt das metrische oder das angloamerikanische Maßsystem benutzen. Mittlerweile bestimmt es einfach derjenige, der zuerst an einem Entwurfsteil arbeitet, was unglaubliche Kopfschmerzen bei alle denjenigen zur Folge hat, die tatsächlich versuchen, die Dinge zusammenzubauen, die die beiden zeichnen. Deswegen wird nun einfach ein Teil an das nächste geschraubt, gehämmert oder geschweißt, komme was da wolle. Ach, übrigens, das Projekt war ursprünglich eigentlich als Hängebrücke konzipiert, da aber keiner hier weiß, wie man eine Hängebrücke baut, wurden einfach irgendwann mal Unterstützungspfeiler dazugestellt, damit das Ding irgendwie stehen bleibt. Die Seile der Hängebrücke sind natürlich immernoch da - die halten schließlich auch noch Teile zusammen. Keiner weiß genau, welche Teile, aber jeder ist sich absolut sicher, dass es sehr wichtige Teile sind. Nachdem Du nun das ganze Team kennengelernt hast, darfst Du auch gerne eigene Ideen einbringen - leider hast Du keine Ideen, denn eigentlich bist Du Antriebstechniker und hast überhaupt keine Ahnung von Brücken.
Würdest Du über diese Brücke fahren? Nein. Falls sie irgendwie gebaut werden würde müsste man dafür wohl alle Beteiligten exekutieren. Und dennoch ist jedes Programm, das Du nutzt von irgendeiner Version dieses Teams geschrieben worden - Bankensoftware, Webseiten und ein universell eingesetztes Programm, dessen eigentlicher Zweck es war, Daten im Internet zu schützen und den es nie erfüllt hat.
Jedes Stück Quellcode ist schlecht
Jeder Programmierer tut es: wenn niemand zu Hause ist schaltet er die Lichter an, schenkt sich ein Glas schottischen Whiskys ein, schaltet etwas seichte deutsche Electronica ein, und öffnet eine Datei auf seinem Computer. Es ist nie die gleiche Datei, einige Entwickler haben sie selbst geschrieben, einige haben sie gefunden und wussten, dass sie sie abspeichern müssen. Sie lesen die Zeilen Zeichen für Zeichen und weinen vor Freude über ihre Schönheit, und dann vor Trauer, sobald sie einen Gedanken an all die anderen Dateien und den unausweichlichen Kollaps alles Guten in dieser Welt.
Diese Datei enthält Guten Code. Er hat sinnvolle und konsistente Namen für Funktionen und Variablen. Er ist knapp und prägnant. Er macht nichts offensichtlich dummes. Er musste nie in der Wildnis überleben oder sich gegenüber dem Sales-Team rechtfertigen. Er erledigt genau eine mundane, spezifische Aufgabe, und er erledigt sie gut. Er wurde von einer einzelnen Person geschrieben und niemals von einer anderen Person berührt. Er ließt sich wie Poesie, die jemand über 30 geschrieben hat.
Jeder Programmierer beginnt seine Karriere damit, eine perfekte kleine Schneeflocke wie diese zu schreiben. Dann erfährt er am Freitag, dass er bis Dienstag 600 solcher Schneeflocken geschrieben haben muss, also wird hier ein wenig gemogelt, und dort ein wenig kopiert, und dann muss das Ganze noch irgendwie zusammengeflickt werden, oder man muss einen Kollegen bitten, eine dieser Schneeflocken zu bearbeiten. Dieser schmilzt sie natürlich prompt ein, und zum Schluss sind alle dieser Schneeflocken zu einer undefinierbaren Masse zusammengepanscht und jemand lehnt einen Picasso dagegen, weil niemand die Katzenpisse sehen will, die in all die zerbrochenen Schneeflocken einsickert, die im Tageslicht dahinschmelzen. Kaum eine Woche später schaufelt irgendwer weiteren Schnee darauf, nur damit der Picasso nicht umfällt.
Es gibt eine Theorie, dass dafür eine Medizin existiert. Diese besteht daraus, Standards zu folgen, nur dass es mehr "Standards" gibt, als Dinge die ein Computer tun kann, und dass diese Standards beliebig durch die persönlichen Präferenzen derjenigen verbessert und verschlechtert werden, die versuchen, sie umzusetzen, sodass keine Ansammlung von Quellcode es jemals in die wirkliche Welt schafft, ohne ein paar dutzend identische Aktionen mit genauso vielen nichtmal ansatzweise ähnlichen Methoden zu erledigen. Die ersten paar Wochen an jedem unserer Arbeitsplätze bestehen einfach nur darin, herauszufinden, was ein Programm wie tut - selbst wenn man mit jeder einzelnen verwendeten Sprache, jedem Framework und jedem Standart so vertraut ist, wie mit seiner eigenen Hand, denn: Standards sind Einhörner.
Es wird immer dunkel sein
Ich bin einige Jahre mit einem Schrank in meinem Kinderzimmer aufgewachsen. Der Schrank hatte einen seltsamen Aufbau. Zuerst sah er ganz normal aus, dann setzte man sich hinein um Schrankdinge zu tun, und bemerkte, dass die Wand rechts einen Alkoven barg, der ein praktisches kleines Regal bildete. Dann sah man nochmal genauer hin, und bemerkte, dass die Wand des Alkoven nachgab, und einem Versteck Platz machte, in das kein Licht eindrang und das sofort als die Tagesbehausung jedes Monsters erkennbar war, dem man des Nachts mit Taschenlampe und Stofftier Paroli bot.
Genau so fühlt es sich an, Programmieren zu lernen. Man lernt all die nützlichen Werkzeuge kennen, nur um sich danach nach weiteren Werkzeugen umzuschauen, und darauf hin noch einige nützliche zu finden, und einige, die den bodenlosen Horror bergen, der immer in diesem Schrank lauerte.
Nehmen wir einmal an, Du wärst ein durchschnittlicher Webentwickler. Du kennst Dich mit einem Dutzend Programmiersprachen aus, jeder Menge hilfreicher Bibliotheken, Standards, Protokollen und was nicht sonst noch alles. Du musst Dein Repertoire immer noch wöchtentlich um etwa ein Sonst-Noch-Alles erweitern und die anderen hundert Dinge, die Du bereits kennst auf Neuerungen oder Fehler überprüfen, sicherstellen, dass sie alle zusammen passen, und dass niemand den Bug in einem davon gefixt hast, den Du ausnutzt, weil Du dachtest, das wäre eine echt klasse Idee als Du irgendwann mal an einem Wochenende ziemlich betrunken⦠naja, lassen wir das. Du bist mit allem auf dem neuesten Stand, und alles funktioniert - und dann bricht alles zusammen.
"We Te Eff?" fragst Du, und beginnst das Problem zu suchen. Du stellst fest, dass irgendwann mal ein Idiot sich gedacht hat, dass, weil ein anderer Idiot einmal festgelegt hat, dass 1/0 unendlich ist, man ja 1/0 als Abkürzung für "unendlich" benutzen könnte, um den Code zu vereinfachen. Dann hat ein Nichtidiot korrekterweise festgestellt, dass das dumm war, was eigentlich der erste Idiot festgestellt haben hätte sollen, aber weil er das nicht hat, hat der Nichtidiot beschlossen, ein Arsch zu sein und genau das in seinem neuen Compiler zu einem "failing error" zu machen, zu einem "unverzeihlicher Fehler". Weil er aber nun ein Arsch war, hat er beschlossen, keinem zu erzählen, dass das ein Fehler ist, und jetzt stehst Du da und alle deine Schneeflocken sind Katzenpisse, und Du kannst nicht einmal die Katze finden.
Du bist also ein Experte in all diesen Technologien, und das ist gut, denn die Erfahrung und das Wissen haben dir geholfen, das Problem in nur sechs Stunden zu lösen - die andere Option wäre gewesen, deinen Job zu verlieren. Und nun hast Du eine kleine Extrainformation, die Du irgendwo in diesen Millionen kleiner Informationen vergräbst und von der Du dir merken musst, wo und warum - denn fast alle deiner Werkzeuge wurden einmal von Ãrschen und Idioten geschrieben.
Und all das nur im Feld deiner Wahl, das nur einen winzigen Bruchteil all der Dinge darstellt, die es in der Informatik zu wissen gibt, einen so kleinen Bruchteil, dass Du genauso gut einfach gar nichts gelernt haben könntest. Niemand, nicht eine einzige Person auf der Welt, weiß, wie alles in deinem fünf Jahre alten MacBook funktioniert. Warum sagen wir Dir, dass Du es aus und einschalten sollst? Weil wir nicht die geringste Ahnung haben, an welcher Krankheit es leidet, und weil es wirklich einfach ist, einen Computer in ein Koma zu versetzen und seine eingebauten automatischen Ãrzte nach dem Problem suchen zu lassen. Der einzige Grund, warum die Computer von Programmierern besser laufen als die aller anderen ist, dass Programmierer wissen, dass Computer schizophrene kleine Kinder mit Autoimmunerkrankungen sind und wir sie nicht schlagen, wenn sie böse sind.
Viel Arbeit steckt im Internet, dem Internet als seine eigene spezielle Hölle
Erinnerst Du Dich an das Zeug mit den Verrückten und dem schlechten Code? Das Internet ist genau das - nur dass es sprichwörtlich eine Milliarde mal schlimmer ist. Webseiten, wie z.B. glorifizierte Einkaufswägen mit vielleicht drei dynamischen Seiten, werden von ganzen Entwicklerteams rund um die Uhr gewartet, denn die Wahrheit ist: alles bricht immer und überall zusammen. Gerade jetzt bekommt jemand bei Facebook zig tausende von Fehlermeldungen und versucht irgendwie den Fehler zu finden, bevor die ganze Scharade in sich zusammenbricht. Es gibt ein Team bei Google, das seit drei Tagen nicht geschlafen hat. Irgendwo sitzt eine Datenbank-Programmiererin umgeben von jeder Menge Mountain Dew-Flaschen, während ihr Ehemann glaubt, sie sei tot. Und wenn diese Menschen aufhören, bricht in der ganzen Welt ein Inferno los. Die meisten Menschen wissen nicht, was Systemadministratoren tun, aber glaube mir: wenn sie alle zur gleichen Zeit Mitagspause machen würden hätten sie nicht genug Zeit bis zum Griechen zu kommen, bevor Deine Munition zur Neige ginge, mit der Du Dein Hab und Gut vor marodierenden Banden von Mutanten zu schützen versuchst.
Man kann das Internet nicht neu starten. Abermilliarden von Dollars sind davon abhängig, dass ein klappriges Gestell aus den Spinnweben inoffizieller Vereinbarungen und "es reicht grad so fürs Release"-Code mit Kommentaren wie "TODO: RICHTIGE LÃSUNG FINDEN, DAS IST EIN WIRKLICH GEFÃHRLICHER HACK, ICH WEISS NICHT WAS EIGENTLICH FALSCH LÃUFT", die vor zehn Jahren geschrieben wurden. Und die Legionen von Menschen, die breite Teile des Internets angreifen, aus Gründen der Spionage, für Geld oder einfach nur weil ihnen langweilig ist. Schon jemals was von 4chan gehört? 4chan kann dein Leben und deine Firma zerstören, weil sie Dich für einen Nachmittag nicht mögen, und wir sind dadurch nichteinmal beunruhigt, denn was ist schon eine einzelne Atombombe in einem Nuklearkrieg.
Im Internet kann man leicht sagen "weißt Du, das funktioniert meistens, wenn man die richtige Technologie dafür benutzt", und BAM! ist es Teil des Internets. Jeder, der nur ein paar hundert Dollar und einen Computer hat, kann sich einen kleinen Teil des Internets schnappen und welchen grausamen Hack auch immer er gerade für genial hält hineinsetzen, und der kleine Hack kommt dann zu vielen anderen kleinen Hacks und alles wird ein wenig schlimmer. Selbst die guten Entwickler geben sich keine Mühe, die arkanen Regeln, die die Mitarbeiter der Organisation zum implementieren einiger Einhörner aufgestellt haben, zu erlernen, weswegen jeder die Hälfte seiner Zeit damit verbringt, darüber nachzudenken, dass nichts mit nichts zusammenpasst oder auch nur den geringsten Sinn ergibt, und jederzeit auseinander fallen könnte, und wir versuchen nur, es zu verschleiern und hoffen, dass es keiner bemerkt.
Hier sind die geheimen Regeln des Internet: Fünf Minuten, nachdem Du das erste Mal einen Webbrowser öffnest, hat ein Kind in Russland Deine Sozialversicherungsnummer. Hast Du dich für irgendetwas angemeldet? Ein Computer bei der NSA verfolgt Deine physikalische Position für den Rest Deines Lebens. Eine eMail verschickt? Deine Mailadresse ist gerade in Nigerien auf einer Reklametafel erschienen.
Das alles passiert nicht, weil es uns egal ist und wir nicht versuchen, es aufzuhalten. Es passiert, weil alles kaputt ist, weil es keinen guten Code gibt, und jeder nur versucht, es am Laufen zu halten. Das ist dein Job, wenn Du mit dem Internet arbeitest: hoffen, dass das, was Du zuletzt geschrieben hast stark genug ist, um Dir ein paar Stunden zum Essen und Schlafen zu verschaffen.
Wir waren nicht "schon immer" verrückt, wir werden erst verrückt gemacht
FEHLER: Versucht, HTML mit regulärem Ausdruck zu parsen; System gab "Cthulhu" zurück.
Lustig, nicht? Nein? Wie ist es mit dieser Unterhaltung:
"Heißt das da umkehrArray"?
"s/camel/_/"
"Danke."
War der Kerl nicht hilfreich? Mit dem Kamel? Wirkt das wie eine angemessene Antwort? Nein? Gut. Du kannst Jesus noch finden. Du hast noch nicht so viel Zeit Deines Lebens damit verbracht, Code zu lesen, dass Du anfängst in Code zu reden. Das menschliche Gehirn ist nicht sonderlich gut darin, auch nur grundlegende Logik zu verarbeiten, und wir arbeiten in einem Karrierezweig, dessen Aufgabengebiet ausschließlich aus Logik besteht - und zwar sehr, sehr komplexer Logik. Endlose Ketten abstrakter Bedingungen und Voraussetzungen müssen nach kleinen Dingen wie fehlenden Kommas durchforstet werden. Das den ganzen Tag zu tun bringt dich in einen Status milder Aphasie, wenn Du Leuten in die Augen schaust, während sie reden, und Du nicht weißt, wann sie fertig sind, weil sie nicht "Semikolon" sagen. Du tauchst in eine Welt der absoluten Bedeutungslosigkeit, in der alles was zählt eine kleine Folge von Zahlen in einem gigantischen Labyrinth aus Symbolen ist, nur um am anderen Ende eine völlig andere Folge von Zahlen oder ein Bild eines Kätzchens zu finden.
Der zerstörerische Einfluss auf das Gehirn wird dargestellt durch die Programmiersprachen, die die Menschen so schreiben.
Das hier ist ein Programm:
#include <iostream> int main( int argc, char** argv ) { std::cout << "Hello World!" << std::endl; return 0; }
Dieses Programm tut genau das gleiche:
`r```````````.H.e.l.l.o. .w.o.r.l.di
Genau wie dieses:
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-] >++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++ .------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.
Und dieses:
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.
Und irgendwann mal hat jemand eine Programmiersprache geschrieben, die jemand anderen dieses Programm schreiben ließ:
#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :|| open(Q,$0);while(){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/| /:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n"; #.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
Laut dem Autor, besteht das Programm aus "zwei Zeilen Code, die zwei Zeilen eingebetteter Kommentare auf die Mayazahlen durchsuchen, die die Nummern der ASCII-Zeichen des Titels des Magazines repräsentieren, dargestellt um 90 Grad gedreht und in ASCII-Art."
Das Programm hat einen Wettbewerb gewonnen, weil⦠natürlich hat es das. Möchtest Du in dieser Welt leben? Nein. Das ist eine Welt, in der Du eine Schachtel Zigaretten am Tag rauchst und niemand darüber auch nur nachdenkt. "Natürlich raucht er eine Schachtel am Tag, wer würde das nicht tun?" Irgendwann wacht jeder Entwickler einmal auf, und bevor er bei vollem Bewusstsein ist, sieht er die ganze Welt und jede Beziehung in ihr als Codefetzen, und er tauscht Geschichten darüber aus als wäre es das normalste auf der Welt, dass Müdigkeit Halluzinationen auslöst. Es ist eine Welt, in der Menschen auf Sex verzichten, um eine Programmiersprache für Orang-Utans zu entwickeln. Alle Entwickler zwingen Ihre Gehirne dazu etwas zu tun, wofür sie nie gemacht wurden, in einer Situation die sie nie verbessern können, acht bis fünfzehn Stunden am Tag, fünf bis sieben Tage die Woche, und jeder von ihnen wird langsam aber sicher verrückt.
</rant>
Also: nein. Ich muss keine 50 Kilo schweren Dinge heben können. Ich habe das für die Möglichkeit getauscht, Satans Schamhaare zu rasieren, während er aus meinem offenen Schädel speist, nur damit ein paar Teile des Internets ein paar Tage länger funktionieren können.
TL;DR: Professionelle Softwareentwicklung in 5 Schritten
Weitere empfehlenswerte Essays von Peter Welch: