A l l e s i s t K a p u t t Beschäftigt man sich intensiv mit Software und hat dabei noch ein bisschen Idealismus übrig, muss man notwendigerweise zum Zyniker werden, denn: alles ist kaputt. Ja - alles. So kaputt, dass es gar nicht mehr auffällt, dass man es gar nicht bemerkt, eine alternative Realität, deren Unwahrheit wir jeden Tag unbewusst wahrnehmen aber bewusst verdrängen, da die Alternativen zur Realität als zu fremd, zu schmerzhaft, zu banal empfunden werden, als dass man sie wirklich als Alternativen akzeptieren könnte. Wo soll man anfangen? Bei den ungenügenden, barocken und verwachsenen Programmiersprachen, diesen Unfällen der sogenannten "Informatik", diesen Notbehelfen autodidaktischer Ingenieure, die aus Mangel an vernünftigen Werkzeugen, für untermotorisierte Rechner, sich irgendeine junge, nett aussehende Sprache griffen, sie aller Originalität entkleideten, sie provisorisch implementierten, um letzten Endes dann Computerspiele darin schreiben zu können, nur damit diese so schon behelfsmässigen Sprachen dann von einem unterbeschäftigten Dänen stümperhaft eine ad-hoc Variante des gerade in Mode befindlichen Programmierparadigmas angeflanscht bekommen und vollends geschändet werden? Denn das ist C++ und nichts anderes, da ändert auch ein nachträglich erfundener Mythos vom angeblich ach so durchdachtem Design nichts mehr daran. Und das Drama ist damit hier noch lange nicht zu Ende, in einer Profession, in der Fehler im Entwurf einfach durch Aufaddieren neuer fehlerhafter Entwürfe wettzumachen versucht werden. Und das ist überall so - jede Unzulänglichkeit wird erst einmal durch ein neues Extra überdeckt, ein Spiel um die Aufmerksamkeit, Ablenkungsmanöver fürs hörige Volk der Softwareentwickler, die alles mitmachen, wenn es nur neu oder chic erscheint oder als solches verkauft wird. Überhaupt ist nur schwer zu begreifen warum Programmierer leichter zu beindrucken sind als 13-jährige Schulmädchen, sind ja auch erstere selten reifer oder erfahrener als diese. Oder soll man von den sogenannten Programmierparadigmen selber reden? Objektorientiert war ja mal sehr angesagt, es sollte alles einfacher, schöner, wahrer und besser machen. Hat aber auch nichts gebracht, ausser das heutige Software grösser, langsamer und fehleranfälliger geworden ist. Was soll dann erst passieren, wenn sich funktionale Programmierung durchsetzt? Man muss um jedes gescheiterte sogenannte Programmierparadigma froh sein, ist uns doch zumindest das eine oder andere Leiden auf diesem Wege erspart geblieben, oder zumindest einige der ermüdenden Kreisläufe im Leben der Programmiererhypes, der ewige Reigen von Uninformiertheit, Euphorie, Prahlerei, Zweifeln, Flügelkämpfen, Untergang und zuletzt Verachtung für eine Sprache, eine Architektur oder ein Modell. Immer das gleiche, denn es wird etwas gesucht, das es nicht gibt: DIE ANTWORT. Man muss es sich doch einmal vor Augen halten: so ungefähr ein halbes Jahrhundert Softwareentwicklung, und nie waren die Erzeugnisse dieser Industrie qualitativ schlechter, Ressourcenintensiver oder unzuverlässiger als heute, gerade wenn man bedenkt wieviel Energie, Lebenszeit und Hardware investiert wird, um diese Erzeugnisse halbwegs zum Laufen zubringen. Warum ist das so? Vielleicht ist es die Haltung, in einer Welt, in der Konsum unser physisches Dasein steuert und kontrolliert, in welcher dieselbe Einstellung sich auf jeden kreativen Akt ausbreitet - ein "Womit", anstatt ein "Wie" - welche Sprache, welches Framework, welche Methode, welches sogenannte Programmierparadigma kann erworben werden, dass mir die Lösung aller Probleme verspricht, ohne dass ich auch nur eine Minute meine Absichten und Ziele oder die Art und Weise, wie ich diese verwirklichen will, in Frage stelle. Eine völlige Überwältigung externer Reize und Waren, die das Denken und Nachdenken betäubt, Kreativität zur Verwaltung verkommen lässt und dem anerzogenen Trieb zur Bürokratisierung fröhnt. Und darin kann man sich suhlen, in APIs, in Schnittstellen, in Schichtenmodellen, in Infrastruktur, in Prozessen, in Werkzeugen, in Meta-Werkzeugen, da gibt es keine Grenze, kein Ende, da lässt sich dieser Trieb ausleben bin zum Exzess, da trifft sich die - immerhin verständliche - Unlust zur ständigen intellektuellen Anspannung mit dem schlechten Gewissen, unproduktiv zu sein und findet eine Ebene der Verständigung mit den Weltanschauungen der ahnungslosen Projektmanager und eingetrockneten und rückständigen Bürokraten. Aber wo sollte man es auch lernen? Im Sumpf des Internets, bei den Propheten der Selbstvermarktung, den Fowlers und Martins und Becks, die jedes Jahr ihre neueste Afterphilosophie als ultimative Antwort präsentieren nur um sie einige Jahre später wieder dzu denunzieren, um dann die nächste als Weltrettung zu propagieren? Oder bei den Vertretern einer Pseudowissenschaft, die, vom Mathematikneid geprägt, dem ganzen Improvisationstheater des Softwarezusammenklatschens die Aura der formellen Rigidität und Vernunft geben möchten und dies mithilfe herablassender Dozenten und durch Professoren, die irgendwann einmal beschlossen haben, dass sie schon alles wissen was man wissen muss, in Form von völlig überholten Praktiken in die Köpfe junger, formbarer Menschen einhämmert? Es ist geradezu dialektisch, wie jede menschliche Massnahme, die das Chaos und die Einfallslosigkeit beseitigen soll, sich durch mangelndes Verständnis des eigentlichen Problems letztendlich in sein Gegenteil verkehrt und wo die einst ehrfurchtsvoll angebeteten Rezepte zur Auflösung des Durcheinanders am Ende die Probleme nur verschieben und zusätzlich verstärken. Aber das kann ja schon ausreichen, das Verschieben, ist die Aufmerksamkeitsspanne des Menschen doch gering genug, und kurzfristige Erfolge waren schon immer gern gesehen und schnell respektiert, das haben wir ja von der Wirtschaft gelernt, wo langfristige Planung grundsätzlich nur dann stattfindet, wenn es um Monopolbildung geht. In diesem Sinne ist alles ganz logisch und richtig so wie es ist. Es geht schliesslich um Profit, und nicht um zuverlässige, robuste oder einfache Software, da wollen wir uns nicht romantischen Illusionen hingeben und schön auf dem Boden der Tatsachen bleiben. (Die Sachzwänge, Sie verstehen...) Die Hegemonie eines wirtschaftlichen Kreislaufes und verselbstständigter Bürokratien bestimmt unsere Sprache und Denken über technologische Vorgänge, und sie tut dies umso mehr, je neuer diese Technologien sind. Denken und Sprache werden heute von Vermarktung und Politik geprägt, von Werbung und Schein, denn es muss sich verkaufen. So wird ein selbsterlerntes und praktisches Handwerk im Nachhinein als strikte Ingenieurswissenschaft verklärt, in die man tiefe Prozesse und wundersame Architekturen hineinträumt, welche letztendlich auch entstehen; wo Komplexität erschaffen wird um der Komplexität willen, denn wir wollen uns als Herrscher über diese Komplexität sehen, das Gefühl geniessen, sie im Griff zu haben. Wenn schon Einfachheit, dann eine abstrakte, unbestimmte, der jeder gerne zustimmt, aber niemals wollen wir etwas mit dieser konkreten Einfachheit zu tun haben - das riecht nach Banalität, nach Hobby, nach mangelnder Professionalität, nach dicken Hornbrillen in abgedunkelten Kinderzimmern. Einfachheit hat einen schalen, ernüchternden Beigeschmack, klingt nach Askese, nach Verzicht, und Verzicht ist uns in der Konsumgesellschaft unerträglich geworden. Nein, es muss immer "mehr" sein, wir glauben alles durch weitere Schichten, Proxies, Gateways, Abstraktionen lösen zu können, aber die ungewünschten Nebeneffekte und problematischen Aspekte einer Technologie können nicht durch mehr Technologie behoben werden. Wir leben in einem technologischen Prekariat, und haben das Scheitern so sehr verinnerlicht, dass wir es gar nicht mehr wahrnehmen. Die Reaktion auf dieses Scheitern ist nur Ansporn, durch noch mehr Technologie das zu reparieren, was eigentlich nicht mehr zu reparieren ist, und nennen es "Optimierung", in blinder Verkennung der Situation. Die, die noch ohne Sarkasmus oder Hähme von einem Internet der Dinge sprechen können, die kurzweiligen Transhumanisten mit Gottkomplex in den Vorständen, die Fachpresse die nun mal von leeren Worthülsen und -blasen lebt, und die geistig und/oder körperlich vergreisten Mitglieder der wissenschaftlichen Einrichtungen, sowie die das Geschäft witternden Technokraten der Industrie, die doch immer technologische Kleinbürger und Kleinkinder bleiben werden, plappern weiterhin von unbegrenzten Möglichkeiten, von scheinbaren Innovationen, von den Wohltaten totaler Überwachung, kurz von Versprechungen vager und doch völlig abstrakter und unbestimmter Verbesserung trivialer Lebensumständen, während in Wirklichkeit die Tendenz zur allgemeinen Existenz im Schrott, in einem Meer von kaum funktionierenden Billigprodukten für jeden sichtbar sein muss, der sehen kann. Nein, alles ist kaputt. Die Industrialisierung einer Tätigkeit nimmt ihr die Seele, macht aus Kreativität Fliessbandarbeit, aus überlegtem Erschaffen tumbes Zusammenstöpseln. Selbst die Softwareentwicklung wurde taylorisiert, eine der letzten Bastionen introvertierter Geistesproduktivität ist mechanisiert, Pairprogramming und Scrum sind nur die letzten, die augenscheinlichsten Auswüchse, die jeden Gedankenschritt kontrollierbar machen, die alles in kleine, einfache, planbare Handgriffe zerlegt. Bloss nicht nachdenken, bloss nicht zurücklehnen, um eventuell das Ganze in Frage zu stellen, den Sinn des Zweckes zu hinterfragen, nein, immer produktiv sein, das die Tastatur nur so raucht. McIlroy's "Software-ICs", oder die "Objektorientierung" (die intellektuell anspruchsvollere, vergeistigtere Variante), dieses etwas naive, aber gutgemeinte Ideal frei kombinierbarer Komponenten, sind schon längst da, nur sind die Schnittstellen eben nicht so sauber und hygienisch, wie das damals auf dem Papier aussah, wir leben eben in einer schmutzigen Wirklichkeit, und die verlangt Konformität, nicht nur in unserem Aussehen und Verhalten, sondern auch in den sogenannten Standards und den erzwungenen, ach so "organisch gewachsenen" - ein Euphemisums, der verboten werden sollte - Protokollen, von denen wir denken, sie unterstützen zu müssen oder zu sollen. Die Wiederverwertbarkeit wird zum Fetisch, das Neuerfinden zum Tabu, und das in einer Welt der totalen Verschwendung von Ressourcen und Energie, speziell der geistigen, gibt es doch immer genug Menschenmaterial, welches endlose, sinnlose Arbeit als Produktivität und einen vagen Überblick über unzählige Softwarewerkzeuge und sogenannte Programmierparadigmen als Professionalität verkennt. Aber selbst ohne die kruden Protokolle, ohne die überholten Standards oder die Schnittstellen zu zweifelhafter Funktionalität zu unterstützen, selbst dann wäre es kaum besser - denn die Vorstellung von Programmieren als Montage fertiger Komponenten ist ein Irrtum. Software ist keine Elektronik, kein Haus, kein Auto und keine Powerpoint-Präsentation. Die wirklichen, die ganz wenigen Beispiele von effizienter, robuster und einfacher Software, sie wurden von einer einzigen Person geschrieben, oder von sehr kleinen, informellen Gruppen. Wir kennen solche Beispiele, jeder kennt sie - aber wir legen sie in die Schublade der Geschichte, als Anekdoten, kleine nutzlose Kunstwerke, die uns mal faszinierten, aber doch nicht richtig dem entsprechen, was wir uns unter "normaler" Software so vorstellen, "richtige" Software, die natürlich alle Protokolle, Betriebssystemversionen und Plattformen unterstützt, dem neuesten Schrei der Benutzerschnittstellenmode entspricht, Themable und Plug-in-fähig, die Workarounds für Betriebssystem-, Prozessor- und Compilerbugs hat, und die "skaliert", egal, ob das wirklich wichtig ist oder nicht, egal, ob das jemals auf etwas anderem als meiner eigenen Kiste läuft. Dazu ist unsere Eitelkeit zu gross, unsere Hoffnung dafür bewundert zu werden, nicht gering genug. Man muss sich nur ansehen, zu was die Programmiersprache C verkommen ist: Einst ein Beispiel von geradlinigstem Pragmatismus und handwerklicher Einfachheit, mit eingestandenen Mängeln, ist nun die Spielwiese spitzfindiger Scholastiker geworden, wo es Jahrzehnte an Erfahrung und das Studium geheimer (oder zumindest nicht frei zugänglicher) heiliger Schriften benötigt um die letztendlich wahre Bedeutung irgendeines Sprachkonstrukts zu ermitteln. Dies ist in C's letztem Bastard C++ nur zu offenkundlich, beschränkt sich aber nicht darauf, da man auch in C inzwischen schon präventiv dafür sorgen muss, dass der Übersetzer nicht die Ahnungslosigkeit des Benutzers ausnutzt um zu seinem eigenen Vorteil noch irrelevante Geschwindigkeitssteigerungen herauszuholen. Die Schicht zwischen Betriebssystem und Programmierkonstrukt hat sich aufgebläht, ist nahezu definitionsfrei und undokumentiert oder so hoffnungslos verwirrend und widersprüchlich dokumentiert, dass es am Ende auch keinen Unterschied mehr macht. Hier treffen sich die Unzulänglichkeiten der Betriebssysteme, der binären Schnittstellen, der Prozessorarchitekturen und der Programmiersprachen und werden gewaltsam zusammengefügt, hier ist man wieder pragmatisch, aber im negativen Sinne, hier wird zusammengestückelt und zusammengeleimt, was eigentlich nicht zusammengehört. Die Antwort darauf? Natürlich noch mehr Technologie, oft monopolisiert in Form von proprietären "Entwicklungsumgebungen", die den Unrat hinter vorgeblich "unintuitiven" Oberflächen verstecken. Ein Zustand in dem die Gefahr besteht, die Kontrolle zu verlieren wird isoliert, eingefriedet, indem unzuverlässige Werkzeuge durch weitere Werkzeuge, zusätzliche Schichten, abstraktere Notationen und Prozesse zur Eindämmung erfunden und umgesetzt werden. Denn hier handelt es sich um glorifizierte Schadensbegrenzung, um nichts anderes. Zum "Web" gibt es wohl nichts mehr zu sagen - da weiss selbst der eingefleischteste Webentwickler nur genug um die Scheisse mit der er oder sie sich tagtäglich auseinandersetzen muss. Browser stehen für alles was falsch ist in Sachen Softwaredesign. Aus einem provisorischen Hack wird ein Hype, und Markt und Kommitees sorgen dafür dass das Ergebnis kontinuierlich an Brauchbarkeit verliert. Das Web-Modell und Web-Sprachen verselbstständigen sich dann, bis sie alles vergiftet haben und wir mit sowas wie node.js übrigbleiben, der inofffiziellen Müllkippe der Softwareentwicklung, in der Horden von geistig minderbemittelten halbverstandene Ideen aus den 60er Jahren auf dilettantische Art und Weise neu implementieren und dann... vergessen. Und jetzt kommen die "UNIX-Hater", die Smalltalk-Enthusiasten, die Lispmaschinenfanatiker, die schon immer alles besser gewusst haben, die aber auch keine wirkliche Alternative bieten und eine verklärte und romantisierende Vorstellung von Zeiten haben, die nicht dadurch besser waren, weil sie vernünftigere technologische Ansätze hatten, sondern nur weil noch ein bisschen Pragmatismus und Askese vonnöten waren, zur Einfachheit zwingend, denn man lebte noch nicht im dekandenten Überfluss der Gigahertz-CPUs und Terabyte-Platten, kümmerte sich noch nicht um verhunzte Protokolle und Pseudo-Standards, die heute jeder denkt, einhalten zu müssen, obwohl sie nichts taugen und von unfähigen Bürokraten erdacht wurden, bzw. aufgeweichte und absurde Kompromisse darstellen. Larry Wall hatte ausnahmsweise mal Recht, als er von den drei Tugenden des Programmieres sprach: der Faulheit, der Ungeduld und der Anmassung. Natürlich ist das völliger Unsinn, aber Worte können nun mal alles bedeuten und drücken oft genau das Gegenteil dessen aus, was der Sprecher zu meinen vermutet. Denn Faulheit, Ungeduld und Anmassung sind in der Tat die drei herausragendsten Eigenschaften des Programmierers, aber es sind eben Laster und keine Tugenden, es sind die Grundübel, denen wir tagtäglich unterliegen. Nein, es besteht keine Hoffnung. Wir haben es verlernt, wie man das Notwendige herstellt, um das offensichtliche Angemessene umzusetzen. Da nützt auch kein Rückzug in eigene kleine Welten der Einfachheit (wenn es auch gut tut), denn jede Schicht ist schon beschädigt, und Isolation oder Abstraktion schafft die Probleme nicht aus der Welt, erzeugt nur neue, denn das "Darunter", das Betriebssystem, die Hardware, die ABIs, alles verändert sich, ob wir es wollen oder nicht. Denn Veränderung suggeriert Innovation, steigert die Chancen der Vermarktung und gibt uns die Möglichkeit, Produktivität vorzutäuschen. Auch sind unsere Ansprüche durch zu lange Gewöhnung deformiert worden, wir wollen nicht auf Irrelevantes verzichten, wie "Kompatibilität", oder "Abstraktion", das können wir uns nicht eingestehen, das bringen wir nicht fertig. Das Ende ist nah, relativ gesehen, nicht unbedingt absolut, denn wir können noch gut einige Jahrzehnte so weiter machen, wir sind ja jetzt schon enorm tolerant gegenüber versagender Technologie, und das kann noch weiter ausgereizt werden. Der Mensch kann durch Wahn und Gier viel ertragen, das ist es, was ihn vom Tier unterscheidet, denn Ideologie kann jeden noch so unerträglichen Zustand zumindest bis zu einem gewissen Maße den Anschein der Erträglichkeit geben. Was wir brauchen ist ein sehr grosser Meteorit. Und dann werden die Küchenschaben auf einer grünen Wiese von vorne anfangen, auch wenn diese Wiese eher einer radioaktiven Wüste gleichen wird, aber das ist den Küchenschaben egal. Und das ist das einzig richtige, denn wir Menschen sind nicht zum Programmieren geschaffen und wer denkt, dass von Menschen gemachte Maschinen geeigneter dafür wären als wir, ist im Irrtum, denn technischer Fortschritt ist keine ewig ansteigende Kurve, stattdessen er wird irgendwann rückläufig. Das ist leicht zu erkennen, wenn es einem gelingt, das wahnhafte Wunschdenken beiseite zu legen und sich den desolaten Zustand einzugestehen, in dem sich diese von uns geschaffene Welt befindet. Ja, DU bist schuld an allem. Du, und, ja, auch ich. Nur Demut oder Untergang kann da noch helfen...