Chapter Content

Calculating...

Okay, let's do this. Ähm, hallo erstmal. Lass mich mal kurz überlegen, wo ich anfange... Also, es geht ja darum, dass wir mit unserer Technologie immer höher, weiter und schneller kommen, und dadurch versuchen wir, immer schwierigere Probleme zu lösen. Und klar, je schwieriger das Problem, desto mehr Teile brauchen wir auch, ne? Weil wir halt all die zusätzlichen Faktoren berücksichtigen müssen, die bei diesen komplexen Situationen so eine Rolle spielen. Denk mal an 'ne Brücke über 'nen kleinen Fluss. Die braucht nur ein paar Grundbauteile, damit sie hält. Aber wenn du jetzt 'ne Brücke über 'nen breiten Fluss bauen willst, dann ändert sich das Ganze. Brauchst du plötzlich viel mehr Fundamente, Säulen und Träger, um die Last richtig zu verteilen und abzustützen. Mehr Abschnitte, Segmente und Deckenmaterialien, damit da sicher Fahrzeuge und Fußgänger drüberkommen. Und dann noch zusätzliche Fugen und Lager, um die Wärmeausdehnung, den Wind und Erdbeben auszugleichen.

Das ist halt so bei schwierigen Problemen. Da gibt's einfach mehr Faktoren, die man beachten muss, und dafür braucht man eben mehr Teile. Das spiegelt sich auch in den Lösungen wider, die wir im Laufe der Geschichte so entwickelt haben. Die Sachen, die wir heute bauen, haben viel mehr Teile als alles, was früher mal gebaut wurde. Ein einziger moderner Passagierjet hat über eine Million Teile. Unsere Stromnetze haben Millionen von Verbindungspunkten. Und unsere Satelliten bestehen aus einem komplizierten Mix aus Antennen, Solarpaneelen und Antriebsmechanismen. Autos sind vollgepackt mit modernster Technologie und Komponenten, die die Leistung, Sicherheit und den Komfort verbessern sollen. Und auf einem einzigen Mikrochip sind Milliarden von Transistoren. Also, schwierigere Probleme brauchen einfach mehr Teile. Ganz klar.

Man könnte ja meinen, dass man mehr wissen muss, je mehr Details in den Dingen stecken, die wir bauen, oder? Klingt eigentlich logisch. Es scheint so, als müsste jemand, der heute was baut, viel mehr wissen als die Leute früher. Was auch immer so ein Brückenbauer vor 200 Jahren wissen musste, stell dir mal vor, wie viel man heute wissen muss!

Aber das wirft 'ne Frage auf: Wie schaffen wir es, in nur wenigen Generationen so 'ne krasse Komplexität zu entwickeln? Wie kann man all diese Details in einem einzigen Kopf behalten? Werden die Leute einfach schlauer? Arbeiten wir härter? Naja, wir wissen ja, dass das nicht stimmt. Das menschliche Gehirn hat sich seit 50.000 Jahren nicht verändert, und die Leute arbeiten heute ganz sicher nicht härter. Wie machen wir dann so enorme Fortschritte, ohne intelligenter zu sein oder uns mehr anzustrengen?

Tatsache ist, dass technologischer Fortschritt niemals möglich wäre, wenn das menschliche Wissen mit der zunehmenden Komplexität unserer Erfindungen mithalten müsste. Der Grund, warum wir technologisch vorankommen, ist, dass jede Generation mit einem fortschrittlicheren Ausgangspunkt beginnt. Die heutige Generation muss nur verstehen, wie man auf dem aktuellen Stand der Entwicklung arbeitet. Die menschliche Genialität wird immer weiter verbessert. Wir verbessern und verfeinern unsere Erfindungen ständig, indem wir die Ergebnisse der letzten Generation als Input für die nächste Generation verwenden. Fortschritt hat nichts mit intelligenteren Leuten oder besseren Ideen zu tun, sondern mit automatischem und unvermeidlichem Fortschritt, der dadurch erzielt wird, dass man die Arbeit der Vorgänger in neue Anfänge einfließen lässt. Nur wenn wir die Details der heutigen Lösungen in benutzerfreundlichere Werkzeuge verpacken, kann die Menschheit vorankommen. Der menschliche Fortschritt ist also eigentlich eine Geschichte der Abstraktion.

Denk mal an die riesigen Verbesserungen bei Software in den letzten 50 Jahren. Das ist doch 'ne Erfolgsgeschichte, wie man mit weniger Code das Gleiche einfacher machen kann. Alles begann mit dem mühsamsten Weg, dem Maschinencode. Maschinencode besteht aus binären Anweisungen, die direkt von der Computerhardware verarbeitet werden. Stell dir vor, du versuchst, einem Roboter zu sagen, wie er durch ein Labyrinth navigieren soll. Wir können keine Wörter wie "gehen" oder "links abbiegen" benutzen, weil der Roboter damit nichts anfangen kann. Da gehen nur Zeichenketten aus Nullen und Einsen.

Maschinencode ist halt das, was am nächsten am Mikrochip dran ist, also die niedrigste Abstraktionsebene. Auf der niedrigsten Abstraktionsebene zu arbeiten, dauert am längsten für eine bestimmte Aufgabe, weil jede Anweisung nur eine sehr einfache Operation ausführt. Das ist so, als würde man versuchen, ein Haus aus Rohstoffen zu bauen, anstatt vorgefertigte Teile zu verwenden.

Eine Stufe höher in der Abstraktion ist die Assemblersprache. Man kann sich das als 'ne für Menschen lesbare Version von Maschinencode vorstellen. Assemblersprache verwendet Symbole, die für Menschen vertrauter sind, was das Lesen erleichtert und das Programmieren beschleunigt. Man kann sich die Assemblersprache als 'ne Art Schnittstelle vorstellen, die auf dem Maschinencode sitzt. Diese Schnittstelle ermöglicht es Programmierern, schneller das zu erreichen, was die vorherige Generation viel länger gebraucht hat. Weil man mit einem "Hebel" in der Assemblersprache mehrere Hebel im Maschinencode betätigt.

Wenn wir jetzt noch höher auf der Abstraktionsleiter klettern, dann kommen wir zur prozeduralen Programmierung. Mit solchen Sprachen können Programmierer dem Computer Anweisungen geben, indem sie benannte Prozeduren und Funktionen verwenden. Das sind im Grunde vorverpackte Assemblersprachen-Schnipsel, also noch 'ne höhere Abstraktionsebene. Indem wir Assemblersprache in Blöcke verpacken, können Programmierer jetzt in Form von wiederverwendbaren Modulen über Computerfunktionen nachdenken. Jetzt sind unsere Materialien zum Hausbauen schon teilmontiert, was es einfacher macht, unser Haus zusammenzubauen.

Beim Bauen von Software erfordern schwierigere Aufgaben größere Teams und bessere Kommunikation. Unterschiedliche Anforderungen müssen verwaltet und in den Entwicklungsprozess einbezogen werden. Teams müssen mehr Möglichkeiten ausloten und mehr Prototypen erstellen, um das zu erreichen, was sie brauchen. Das macht die prozedurale Programmierung für viele moderne Anwendungen zu umständlich. Hier kommt die nächste Generation ins Spiel, die sich mit der objektorientierten Programmierung (OOP) über die prozeduralen Sprachen erhebt. Diese Innovation abstrahiert die Low-Level-Details, die in der prozeduralen Programmierung vorhanden waren, und führt Konzepte wie Objekte ein, die Daten und Verhalten in noch höherwertige, wiederverwendbare Komponenten kapseln.

Mit OOP sind unsere Hausbauteile noch vorgefertigter. OOP bringt Computerkonstrukte hervor, die besser darauf abgestimmt sind, wie Menschen über die Welt denken. Konzepte wie Vererbung, Polymorphie und Kapselung machen die Softwareerstellung zu einem übergeordneten Anliegen. Stell dir vor, wie vorgefertigte Baumaterialien das Hausbauen zu einem strategischeren und kreativeren Akt machen, weil man sich nicht mehr in den Details verliert. Im industriellen Maßstab bedeutet das mehr Fokus auf die Optimierung von Effizienz, Qualitätskontrolle, Skalierbarkeit und Nachhaltigkeit. Mit OOP erreicht die "Chunking"-Funktionalität, die mit der Assemblersprache begann, ein Maß an Modularität und Erweiterbarkeit, das die Computerprogrammierung schneller und für Leute, die sich für Computer interessieren, viel zugänglicher macht.

Aber warum sollte man da aufhören? Die Leute wollen dynamische Webanwendungen wie Online-Shops, Social-Media-Plattformen, Online-Banking, Lern- und Kollaborations-Tools, Reise- und Buchungswebseiten, Gaming-Systeme, Gesundheits- und Jobportale und verschiedene Online-Marktplätze. Scriptsprachen sind hier entscheidend geworden, weil sie es ermöglichen, interaktive und dynamische Benutzeroberflächen zu entwickeln. Herausforderungen wie asynchrone Operationen, Event-Handling und Browserkompatibilität erforderten die Entwicklung noch abstrakterer Sprachen. Indem wir die Art und Weise, wie Menschen Computern Anweisungen geben, einfacher und verständlicher machen, werden Dinge wie Speicherverwaltung und Pointer-Arithmetik abstrahiert und durch dynamische Typisierung, umfangreiche Bibliotheken und eine große Community und ein Ökosystem ersetzt, die die schnelle Entwicklung unterstützen. Mit Scripting wurde die Kluft zwischen Idee und funktionierender Software immer kleiner.

Auf der höchsten Abstraktionsebene finden wir visuelle und akustische Schnittstellen. Die grafische Benutzeroberfläche (GUI) abstrahiert die inneren Details der Maschineninteraktion, indem sie visuelle Darstellungen der zugrunde liegenden Daten und Funktionen bietet. Mittlerweile gibt es Drag-and-Drop-Tools zum Zusammenstellen von Software, und mit der Integration von künstlicher Intelligenz (KI) in die Entwicklungstools wird die komplett codefreie Entwicklung Realität. Sogar Menschen mit Behinderungen können jetzt mit Sprachbefehlen Code schreiben.

Heutzutage können ganze Anwendungen innerhalb von Wochen als Prototyp erstellt werden. Die Arbeitsorganisation, die das ermöglicht, sieht ganz anders aus als vor 50 Jahren. Viele nicht-technische Personen spielen jetzt eine wichtige Rolle bei der Realisierung der heutigen Softwareprodukte. Die Abgrenzung zwischen technischen und nicht-technischen Fachkräften verschwimmt, weil die heutigen Softwareentwicklungstools so hoch abstrahiert sind.

Das bedeutet, dass die Art von Herausforderungen, die jetzt mit Software gelöst werden können, alles übertrifft, was frühere Generationen bewältigen konnten. Wir können jetzt riesige Datenmengen wie nie zuvor analysieren. Wir können Maschinen bauen, die eine gewisse Form von Intelligenz zeigen und Aufgaben wie Spracherkennung, Bildklassifizierung und Verarbeitung natürlicher Sprache ausführen. Wir erstellen jetzt fortschrittliche Klimamodelle, analysieren und korrelieren Patientendaten, erforschen ferne Planeten, untersuchen kosmische Phänomene und verbinden Menschen weltweit durch Videokonferenzen.

Was als Nischenexperiment begann, ist wohl zum größten Player in unserer Wirtschaft geworden. Software bringt Zusammenarbeit und menschliche Vernetzung in einem noch nie dagewesenen Ausmaß hervor. Und das war und ist möglich dank der immer höheren Abstraktionsebenen. Jede Generation hatte die Möglichkeit, Software einfacher zusammenzusetzen als die Generation davor, und das bedeutet, dass sie schwierigere Probleme lösen kann als die vorherige Generation. Das bedeutet, dass sie in der Lage ist, die wachsende Anzahl von Teilen zu verwalten und zu steuern, die für schwierigere Probleme eingesetzt werden müssen.

Abstraktion entfernt keine Details, sondern fasst sie zu übergeordneten Konstrukten zusammen, die es ermöglichen, viele Teile mit weniger Hebeln zu bedienen. Abstraktion macht Fortschritt unvermeidlich, weil sie den menschlichen Erfindungsgeist vorantreibt, indem sie Details verpackt und Schnittstellen schafft; Schnittstellen, die den Ausgangspunkt für die nächste Generation darstellen.

Wenn wir uns umsehen und Wolkenkratzer, Satelliten, Supercomputer, Hochgeschwindigkeitszüge, Kernkraftwerke, Smartphones, Computer und biomedizinische Implantate sehen, dann ist es schwer vorstellbar, dass die Menschen so eine offensichtliche Komplexität erschaffen konnten. Das Innenleben der Objekte, die die Menschen geschaffen haben, ist sehr detailliert, erfordert eine komplizierte Koordination und ein gutes Timing und ist alles in allem recht zuverlässig. Aber wenn wir uns bewusst machen, dass jede Generation nur die vorherige Generation als Ausgangspunkt braucht, dann wird klar, wie Fortschritt entsteht. Die Erbauer einer Generation müssen nicht wissen, wie alles funktioniert, sie müssen nur ihre aktuelle Abstraktionsebene verstehen.

Das bedeutet, dass das überwältigende Wissen über das Innenleben der Dinge von niemandem gehalten wird, der heute lebt. Dieses Wissen wurde durch die immer weiter zunehmenden Abstraktionsebenen verschleiert, die jede Generation ihren Schöpfungen hinzufügt. Das gilt für alle Bereiche der menschlichen Innovation. Die heutigen Menschen sind nicht intelligenter als unsere Vorfahren. Wir arbeiten nicht härter. Wir wissen nicht einmal so viel mehr. Menschlicher Fortschritt lässt sich am besten als eine fortlaufende Geschichte von zunehmender Abstraktion und verbessertem Fortschritt verstehen.

Normalerweise denkt man bei Abstraktion an den kognitiven Bereich. Menschen schaffen übergeordnete Konzepte, die aus der Verwendung und Klassifizierung von konkreten Beispielen abgeleitet werden. Indem wir uns entscheiden, Spezifisches zu einer einzigen Kategorie zusammenzufassen, implementieren wir Abstraktion. Zu sagen, dass alle Hunderassen in die Kategorie "Hund" passen, bedeutet, die Abstraktion Hund zu schaffen. Ein abstraktes Gemälde zu malen bedeutet, sich nur die notwendigen, nicht detaillierten Teile vorzustellen, die nötig sind, um einen Eindruck zu erzeugen. Abstraktion im Gehirn ermöglicht es dem Menschen, seine komplexe Umwelt zu verstehen und sich in ihr zurechtzufinden, indem sie die kognitive Belastung reduziert, die nötig ist, um sich durch die Details des Lebens zu manövrieren.

Man könnte ja meinen, dass Abstraktion ein rein informationelles Phänomen ist. Schließlich sind die übergeordneten Konstrukte, die durch jede Generation von Programmierern entstehen, Informationsblöcke, mit denen auf informationeller Ebene interagiert wird. Ein Modul in der Programmierung zu erstellen ist wie die Kategorie "Hund" in der menschlichen Sprache zu erstellen. Es ist eine Tätigkeit, die die kognitive Belastung reduziert, die nötig ist, um die immense Anzahl an Details in der Software zu bewältigen.

Aber Abstraktion kann auch physisch sein. Die Analogie zum Hausbau war nicht nur eine Analogie. Wenn man größere, vorgefertigte Teile als Ausgangspunkt verwendet, dann arbeitet man mit Abstraktionen. So wie das Gehirn Spezifisches zu einer einzigen Kategorie zusammenfassen kann, so können auch physische Details zusammengefasst werden, um auf höherer Ebene einer einzigen Funktion zu dienen.

Wir können physische Abstraktion verstehen, wenn wir uns ansehen, wie Menschen Dinge nutzbar machen. Niemand hätte die Steinaxt benutzt, wenn er die Klinge beim Schwingen am Griff festhalten müsste. Die verwendete Bindung verbindet die Klinge und den Griff zu einem einzigen Objekt, sodass der Benutzer ihre Befestigung nicht mehr berücksichtigen muss. Dinge sind nur dann brauchbar, wenn der Aufwand für ihre Bedienung geringer ist als der Aufwand, der nötig wäre, wenn jedes Teil manuell koordiniert werden müsste.

Denk mal an das Auto. Wenn die Fahrer alle inneren Abläufe des Verbrennungsmotors, des Fahrgestells und des Getriebes manuell koordinieren müssten, dann könnte niemand Auto fahren. Die Schnittstellen, die einem Fahrer zur Verfügung gestellt werden, haben viel weniger Details als das Innenleben der Maschine. Sogar der Schalthebel in einem Schaltgetriebe ist eine physische Abstraktion. Er erreicht das, was alle Abstraktionen tun: Er bietet eine Schnittstelle, die die Anzahl der Hebel reduziert, die man zum Erreichen einer Aufgabe betätigen muss. Mit einem Schalthebel kann der Fahrer den gewünschten Gang wählen, indem er nur einen Hebel und eine Kupplung bewegt, wodurch er nicht mehr jeden Gang im Getriebe physisch einlegen muss. Die deutlich markierten Gangpositionen sind eine Schnittstelle, die es dem Fahrer ermöglicht, eine Auswahl zu treffen, ohne sich durch eine Reihe von internen Details bewegen zu müssen. Natürlich treibt das Automatikgetriebe die physische Abstraktion noch weiter voran und ermöglicht es uns, Gänge zu bedienen, ohne uns groß Gedanken darüber zu machen, wie sie intern funktionieren.

So wie wir mental unterschiedliche Dinge zu einzelnen Kategorien zusammenfassen, stellt der Schalthebel ein einzelnes physisches Konstrukt dar, das eine Reihe von inneren physischen Details umfasst, während das Automatikgetriebe dies sogar noch weiter treibt (dank einer nachfolgenden Generation). Die physische Version der Abstraktion, die mit dem menschlichen Erfindungsgeist einhergeht, ist ein entscheidender Teil des menschlichen Fortschritts.

Die Reihe von Best Practices, die in einer bestimmten Branche oder einem bestimmten Beruf implementiert werden, sind um die physischen Abstraktionen herum aufgebaut, die wir schaffen. Der MRT-Techniker koordiniert nicht die Magnetisierung, die HF-Impulsanregung, die Signalerfassung, die Datenerfassung und die Bildrekonstruktion. Der Barista erhitzt nicht manuell Wasser, baut Druck auf, mahlt Bohnen, extrahiert Aromen oder erzeugt Dampf. Der Asphaltierer beschafft weder Steine, Kies und Sand noch experimentiert er mit Bindemitteln. Fachleute in jedem Bereich arbeiten über dem Niveau der zuvor ausgearbeiteten Details durch physische Abstraktion. Das bedeutet, dass unsere Vorstellungen von Wissen und Können vollständig auf physische Abstraktionen ausgerichtet sind, da diese die Ausgangspunkte sind, die die Leute verwenden, um die Systeme in ihrem Bereich zu bedienen.

Der gesamte menschliche Fortschritt ist eine Geschichte davon, wie man die Menschheit voranbringt, ohne mehr Wissen oder Anstrengung als die vorherige Generation zu benötigen. Aber so automatisch und unvermeidlich dieser Fortschritt auch ist, die Erstellung von Schnittstellen erfordert ein bewusstes Nachdenken. Physische Abstraktionen zu schaffen ist ein intentionaler Akt, der ein langes und sorgfältiges Nachdenken erfordert. Die physischen Abstraktionen, die von Menschen geschaffen wurden, wurden in der Vergangenheit durch Design ermöglicht.

Der offensichtlichste Weg, physische Abstraktionen zu schaffen, ist das Design. Wir können bewusste Entscheidungen treffen, welche Teile wir einbeziehen, wie wir sie verbinden und wie wir ihre zugrunde liegenden Funktionen über eine Schnittstelle zugänglich machen. In dem Computerbeispiel entstand die prozedurale Programmierung dadurch, dass bewusste Entscheidungen darüber getroffen wurden, wie man Teile von Maschinencode in eine übergeordnete Syntax und Semantik bündelt. Das erfordert kalkuliertes Denken. Man muss in die Tiefen der aktuellen Abstraktionsebene eintauchen und entscheiden, wie man diese Teile miteinander verbindet und in eine höhere Ebene einbringt. Design schafft physische Abstraktionen, indem es das Innenleben eines Objekts verpackt. Das gruppiert unterschiedliche Funktionalitäten in einzelnen Konstrukten auf einer höheren Ebene. Es ist diese Bündelung, die es ermöglicht, die unterschiedlichen Funktionalitäten innerhalb eines Systems leichter von außen zu koordinieren.

Das zeigt uns, dass die informationelle und physische Version der Abstraktion eng miteinander verbunden sind. Das bewusste Denken, das im Design verwendet wird, lässt uns die Gemeinsamkeiten einer Gruppe von unterschiedlichen Dingen erkennen. Der Schalthebel funktioniert, weil er mit einer Reihe von tiefer liegenden, internen Teilen verbunden ist, die einen gemeinsamen Zweck haben. Ein solches physisches Konstrukt wurde erreicht, indem wir unsere mentale Fähigkeit genutzt haben, Muster zu erkennen und diese Muster in eine übergeordnete Form zu bringen. Physische Abstraktion ist ein Spiegelbild der bewussten Abstraktionen, die wir mit unserem Verstand vornehmen.

Wir können sehen, dass die Menschen ihren technologischen Fortschritt durch Abstraktion erreichen und dass Abstraktion durch Design realisiert werden kann. Das hat Design zu einem Kernbestandteil unseres historischen Fortschritts gemacht. Aber Design hat seinen Preis, denn man kann nicht designen, ohne zu sehen, wie die internen Teile eines Systems aneinanderstoßen.

Design hängt von Determinismus ab

Designen bedeutet, über explizite Verbindungen nachzudenken, die zwischen niedrigeren und höheren Abstraktionsebenen hergestellt werden. Deshalb hängt Design vom Determinismus ab. Design funktioniert nur, wenn wir beurteilen können, wie die Ausgaben eines Systems im deterministischen Sinne erzeugt werden. Wir können das Innenleben eines Getriebes nicht zu einem übergeordneten Schalthebel bündeln, wenn wir nicht sehen können, wie sich die verschiedenen Gänge gegenseitig beeinflussen. Wir können die C-Sprache nicht in C++-Module bündeln, wenn wir nicht explizit sehen können, wie die C-Sprache funktioniert. Das untermauert die gesamte Rechtfertigung für Design. Wenn wir nicht darüber nachdenken könnten, wie jedes interne Teil interagiert, um Ausgaben zu erzeugen, wären unsere Designs nicht mehr als bloße Vermutungen und Mutmaßungen.

Man könnte ja fast meinen, dass Design selbst eine hohe Ebene sein könnte. Könnte Design nicht eine allgemeine Reihe von Richtlinien sein, die dazu beitragen, Bemühungen in eine positive Richtung zu lenken? Würde das Design nicht von einem strengen Sinn für Determinismus entkoppeln? Aber das ist kein Design, das ist 'ne Methodik oder 'n Rahmen. Rahmen sind übergreifende Prinzipien, die den Leuten helfen, auf dem richtigen Weg zu bleiben, um bestimmte Ziele zu erreichen. Solche Dinge reichen nicht in das System hinein und denken über seine Interna nach. Designen bedeutet, absichtliche Entscheidungen darüber zu treffen, wie verschiedene Elemente interagieren und zueinander in Beziehung stehen. Design hängt vollständig von der Prämisse deterministischen Wissens ab.

Determinismus bezieht sich auf Systeme oder Prozesse, deren Verhalten aufgrund ihrer Eingaben und der Regeln, die ihre Funktionsweise bestimmen, vollständig vorhersehbar ist. Wenn man einem deterministischen System immer wieder die gleichen anfänglichen Eingaben gibt, dann erzeugt es immer die gleichen Ausgaben. Diese Vorstellung von Wiederholbarkeit, Vorhersagbarkeit und Abwesenheit von Zufall ist in der Vorstellung von Design verankert. Design arbeitet unter der Annahme, dass es eine Reihe von expliziten Schritten gibt, die von der Eingabe zur Ausgabe fließen. Wenn das nicht der Fall wäre, dann wäre die Auswahl bestimmter Teile und Verbindungen sinnlos.

Es ist wichtig, noch einmal zwischen deterministischen und nichtdeterministischen Systemen/Prozessen zu unterscheiden. Ein nichtdeterministisches System ist ein System, dessen Verhalten nicht vollständig vorhersehbar ist. Im Gegensatz zu deterministischen Systemen, die für einen bestimmten Satz von Eingaben jedes Mal die gleiche Ausgabe erzeugen, ist bei nichtdeterministischen Systemen zu erwarten, dass sie unterschiedliche Verhaltensweisen oder Ergebnisse erzeugen, selbst wenn sie mit den gleichen Eingaben und Anfangsbedingungen versorgt werden. Der gleiche Satz von Autos und Fahrern, die mit der gleichen Geschwindigkeit fahren und an eine Kreuzung ohne Stoppschilder oder Ampeln kommen, wird keinen rein vorhersehbaren Verkehrsfluss erzeugen. Es wird eine große Variation in der Reihenfolge der Bewegungen und dem Fluss der Fahrzeuge geben. Ein System, das unterschiedliche Ergebnisse erzeugt, obwohl es mit den gleichen Eingaben versorgt wird, kann nicht designed werden.

Einige Leser werden hier vielleicht eine Pause einlegen und verkünden, dass das vorherige Beispiel falsch sein muss. Denn wir wissen, dass Verkehrssysteme tatsächlich designed werden können und sie dem Verkehrsfluss offensichtlich ein vorhersehbares Verhalten hinzufügen. Aber das designed nicht den Verkehr selbst, sondern einen äußeren Rahmen, der ein nichtdeterministisches System (Verkehr) regelt. Die aktuellen Verkehrssysteme versuchen nicht, die spezifischen Interaktionen zwischen den Fahrzeugen zu kontrollieren, sondern legen lediglich äußere Beschränkungen fest, die für alle Fahrzeuge gelten. Das ist so, als würde eine Regierung Rahmenbedingungen schaffen, die freie Märkte regulieren. Jeder Versuch, das System selbst zu designen, z. B. die spezifischen Interaktionen zwischen Autos oder zwischen Kunden und Verkäufern zu diktieren, würde voraussichtlich die Funktionsweise eines nichtdeterministischen Systems beeinträchtigen.

Nichtdeterminismus hängt direkt damit zusammen, wie schwierig ein Problem ist. So wie man ein nichtdeterministisches System nicht (intern) designen kann, so können auch schwierige Probleme nicht durch Determinismus gelöst werden. Schwierige Probleme, wie wir in Kapitel 4 sehen werden, sind Probleme, die Trial-and-Error und Heuristik erfordern, um sie zu lösen. Wie in der Einleitung gesagt, ist ein schwieriges Problem nicht etwas, das im Vergleich zu einfachen Problemen schwieriger ist, sondern eine kategorisch unterschiedliche Situation, die eine ganz andere Art von Lösung erfordert.

Wir können verstehen, wie unterschiedlich eine Lösung sein muss, wenn es darum geht, schwierige Probleme zu lösen, indem wir uns die Natur ansehen. Wie bereits gesagt, löst die Natur die schwierigsten Probleme überhaupt. Diese natürlich schwierigen Probleme werden durch natürliche Umgebungen dargestellt und durch Objekte gelöst, die Eingaben nicht mit einer einfachen Mischung aus deterministisch verbundenen Teilen in Ausgaben umwandeln. Die Natur löst ihre Herausforderungen durch die Verwirklichung von emergenten Strukturen. Das bedeutet, dass die Natur keine Lösungen schafft, die wohldefinierte Schritte zwischen Eingaben und Ausgaben haben. Ein solches Konstrukt könnte natürlich schwierige Probleme nicht lösen, weil die Situationen der Natur aus unzähligen Faktoren und Interaktionen bestehen, die sie definieren. Es ist keine Frage des Sammelns von genügend Regeln, um die Komplexität der Natur zu berücksichtigen; tatsächlich ist es überhaupt kein Spiel der Regeln. Selbst wenn wir ein Objekt mit einer Regel für jede mögliche Eventualität herstellen könnten, würde es scheitern, ein schwieriges Problem zu lösen.

Schwierige Probleme so zu betrachten, als wären sie schwierigere Versionen von regelbasierten Systemen, ist so, als würde man versuchen, die Quantenmechanik mit der klassischen Mechanik zu beschreiben. Eine klassische Beschreibung ist nicht annähernd das, was passiert, weil die Quantenwelt grundlegend nicht klassisch ist. Es ist keine Frage des Grades oder der Annäherung, sondern eine Frage, etwas völlig anderes zu sein.

Die Lösungen der Natur bergen eine wahre Komplexität, was bedeutet, dass ihre Ausgaben kein Produkt von summierten Interaktionen oder einem Pfad von sequenziellen Prozeduren sind. Die Natur erschafft Konfigurationen von Materie, die die benötigten Ausgaben auf eine völlig andere Weise erzeugen als die regelbasierte Verarbeitung. Wir werden uns diesen anderen Mechanismus später ansehen, aber im Moment ist es wichtig zu erkennen, dass sich die Lösungen der Natur grundlegend von den einfachen Systemen unterscheiden, die von Menschen hergestellt werden. Die Lösungen der Natur haben nicht nur einen großen Grad an Nichtdeterminismus, sondern sie benötigen diesen Nichtdeterminismus auch, um so zu funktionieren, wie sie es tun.

Denk mal an die Gesichtserkennung; eine Leistung, die von Menschen und fortschrittlichen KI-Systemen auf natürliche Weise erbracht wird. Was die Gesichtserkennung zu einem schwierigen Problem macht, ist nicht nur die schiere Anzahl von Faktoren, die mit dem Phänomen zusammenhängen, sondern auch, dass das Wort "lösen" etwas anderes bedeutet als unsere übliche deterministische Darstellung. Unter Determinismus bedeutet lösen das, was es in der Mathematik bedeutet, nämlich eine spezifische, definitive Antwort oder eine Reihe von Antworten zu finden. Aber nichtdeterministische Systeme sind eher mit der Vorstellung von probabilistischen Antworten verbunden, mit einem gewissen Grad an Richtigkeit; eine weichere Version von dem, was wir im Determinismus sehen.

Aber obwohl diese Weichheitsanalogie dem Geist des Nichtdeterminismus näher kommt, stellt sie den Nichtdeterminismus immer noch als eine ungefähre Version von dem dar, was wir in deterministischen Systemen sehen. Zum Beispiel verwenden die meisten rechnergestützten Ansätze, die eine Lösung für rechenintensive Probleme suchen, Techniken wie die Optimierung, um ein zufriedenstellendes oder akzeptables Ergebnis zu finden, das bestimmte Kriterien oder Ziele erfüllt. Aber, wie ich später argumentieren werde, ist die Vorstellung, dass Nichtdeterminismus eine zweitklassige oder ungefähre Version des Determinismus ist, falsch.

Das Lösen, das unter Komplexität stattfindet, ist keine schwächere oder ungefähre Lösung, sondern eine völlig andere Art von Lösung. Darüber hinaus ist die Art von Lösung, die unter Komplexität gefunden wird, viel mächtiger und realistischer als alles, was eine präzise und deterministische Lösung sein könnte. Allein die Vorstellung von Annäherung ist nur ein weiteres Nebenprodukt davon, dass man komplexe Dinge fälschlicherweise durch die Linse der Einfachheit betrachtet. Echte Lösungen für schwierige Probleme nähern sich nicht an, sondern berechnen direkt die benötigte Antwort, indem sie einen grundlegend anderen Begriff des Rechnens verwenden. Die gravierende Unterscheidung zwischen der Durchführung einer mathematischen Berechnung und der Lösung eines realen Problems wird später näher erläutert.

Das Fehlen von kausalen Mechanismen im Herzen der Komplexität schließt jede Chance aus, dass Design in der Lage ist, die Art von Lösungen zu produzieren, die Komplexität handhabbar machen. Es gibt keine Bündel, die geschaffen werden können, um deterministisch verbundene Schnittstellen für Benutzer zugänglich zu machen. Die Abhängigkeit des Designs vom Determinismus bedeutet, dass Design nur Lösungen für kategorisch einfache Probleme finden kann.

Das bringt uns zu einem entscheidenden Scheideweg, der durch unseren historischen Ansatz zur Lösung von Problemen durch das Bauen von Dingen aufgeworfen wird: 1) Wir müssen physische Abstraktionen schaffen, um Fortschritt zu machen, 2) die Schaffung physischer Abstraktionen wurde immer durch Design gemacht, 3) Design kann keine schwierigen Probleme lösen und 4) schwierige Probleme sind das, was wir jetzt mit den Dingen lösen müssen, die wir bauen.

Die Art und Weise, wie wir derzeit physische Abstraktionen schaffen, wird bald zu Ende gehen. Design kann nicht die Dinge schaffen, die wir brauchen, um Lösungen zu bauen. Die inhärente Komplexität der Situationen, denen wir uns jetzt gegenübersehen, erfordert etwas, das Design nicht liefern kann. Wir können nicht über die Teile und die Verbindungen nachdenken, weil der Mechanismus, mit dem die Lösungen der Natur Probleme lösen, grundlegend anders ist.

Es war schon immer eine Art fehlplatzierte Konkretheit, von der Natur so zu sprechen, als wäre sie eine deterministische Maschine. Manchmal ist es nur eine naive Art, die Welt zu betrachten, manchmal spielt sich diese Übertretung auf gefährliche Weise in Gesellschaft und Politik ab. Aber jetzt behindert die Vorstellung, dass die Natur einer regelbasierten Maschinerie ähnelt, den Fortschritt direkt. Nur durch eine drastische Neugestaltung dessen, was es bedeutet, Dinge zu bauen, wird die Zukunft handhabbar bleiben.

Die grundlegende Veränderung der Problemklasse und die Lösungen, die zur Lösung benötigt werden, untermauern den philosophischen Wandel, der erforderlich ist, um im Zeitalter der Komplexität effektiv zu arbeiten. Die Herausforderung besteht nicht nur darin, die Verschlechterung des kausalen Verständnisses zu akzeptieren, sondern unsere Konzepte von Wissen, Können und unseren Ansatz zur menschlichen Innovation neu zu definieren. Wir müssen anders bauen.

Abstraktion ist für Fortschritt erforderlich

Die Tatsache, dass der Fortschritt nicht über Design fortgesetzt werden kann, negiert nicht die Tatsache, dass Abstraktion für den Fortschritt erforderlich ist. Ein schwierigeres Problem kann nicht gelöst werden, indem man einfach mehr Teile zu einem anderen Objekt verbindet. Teile müssen zu übergeordneten Konstrukten zusammengefasst werden, die von der nächsten Generation verwendet werden können. So werden eine große Anzahl von Teilen korrekt in kompliziertere Objekte platziert. Es ist zu rechenaufwändig, Tausende oder Millionen von Teilen einzeln, absichtlich und mit der richtigen Koordination anzuordnen. Niedriger liegende Teile müssen den informationellen Zusammenhalt finden, der nötig ist, um das Problem eine Ebene höher zu lösen, und Abstraktion ist das Mittel, mit dem dieser Zusammenhalt erreicht wird.

Das gilt für jede Vorstellung von Fortschritt. Denk mal darüber nach, wie das menschliche Gehirn Abstraktionen schafft, um unsere Welt zu verstehen. Wir können nicht durch das Leben navigieren, ohne das, was wir sehen und hören, in übergeordnete Entitäten einzuordnen. Wenn wir Dinge nicht als Bedrohungen gegenüber Chancen, Freunde gegenüber Feinden, Nahrung, Gefahr, Unterschlupf usw. kategorisieren könnten, dann könnten wir nicht überleben. Indem wir mentale Abstraktionen im Gehirn schaffen, die oberflächlich unterschiedliche Dinge zu einzelnen Kategorien zusammenfassen, reduzieren wir die kognitive Belastung, die nötig ist, um sich durch das Leben zu manövrieren, drastisch.

Diese Fähigkeit, Verbindungen zwischen verschiedenen Dingen zu erkennen, erstreckt sich auf alle unsere Innovationen. Alles, von neuen Philosophien bis hin zu neuen Technologien, entsteht, weil wir sowohl Informationen als auch physische Dinge zu neuen Entitäten verbinden können. Es ist die Abstraktion, die schwierige Herausforderungen rechnerisch machbar macht, weil die Abstraktion neue informationelle und physische Strukturen hervorbringt, die rechnen, ohne dass eine Eins-zu-eins-Entsprechung zwischen den Details eines Problems und dem Ablauf einer Lösung nötig ist. Es ist die Abstraktion, die die Dinge so anordnet, dass die nötige interne Koordination von Teilen die Vielzahl von Faktoren innerhalb schwierigerer Herausforderungen berücksichtigen kann. Kurz gesagt, es gibt keinen Fortschritt ohne Abstraktion.

Das gilt für die Natur genauso wie für den Menschen. Die Natur schreitet durch ihren Prozess der Veränderung und Entwicklung im Laufe der Zeit voran. Die Lösungen der Natur lösen ständig Probleme angesichts sich ändernder Umweltbelastungen. Wenn wir einen Schritt zurücktreten und die menschliche Innovation insgesamt betrachten, dann ist das ein Problem, das von der Natur gelöst wird, da die Menschen Organismen sind, die in großer Zahl interagieren, um Probleme zu lösen. Aber wenn es um unsere spezifischen Erfindungen geht, dann schaffen die Menschen ihre neuen Abstraktionen durch Design, wie bereits erwähnt. Die Teile, die zusammengefügt werden, werden absichtlich zusammengefügt, wobei kausale Informationen darüber verwendet werden, wie diese Teile interagieren. So kann die Natur ihre Abstraktionen nicht schaffen. Die Natur verwendet keine bewusste Überlegung, um Teile zu übergeordneten Konstrukten zu verbinden. Und doch löst die Natur Probleme, die viel schwieriger sind als alles, was der Mensch mit seinen Brücken und Raketentriebwerken in Angriff nimmt.

Das wirft eine entscheidende Frage auf. Wenn Fortschritt durch Abstraktion eine universelle Eigenschaft ist, die von jedem System gehortet wird, das sich entwickelt, um schwierigere Probleme zu lösen, wie schafft die Natur dann ihre Abstraktionen?

Physische Abstraktion ist in beiden Fällen immer noch die Zusammenführung von Funktionalitäten zu übergeordneten Gruppen und die Bereitstellung einer Schnittstelle, aber das Bündel in der Natur ist keine deterministisch entworfene Aggregation, sondern eine statistisch automatische Manifestation von Materie. Wenn sich das alles zu sehr nach Wischiwaschi anhört, dann sei versichert, dass der Rest dieses Buches beschreiben wird, was ich meine. Aber was an diesem Punkt zählt, ist das Eingeständnis, dass die physischen Abstraktionen der Natur, obwohl sie für den Fortschritt entscheidend sind, nicht designed sind. Es gibt keine bewusste Anstrengung der Natur, zu wählen, welche Teile und Interaktionen ein Bündel ausmachen, und daher muss Abstraktion in der Natur einen grundlegend anderen Mechanismus haben.

Das wirft die Frage auf: Woher "weiß" die Natur, welche Teile sie zu übergeordneten Konstrukten kombinieren soll, wenn sie nicht darüber nachdenken kann, welche Teile sie einbeziehen und wie sie diese verbinden soll? Wie schafft die Natur ihre Bündel? Wie kann der gedankenlose Prozess der natürlichen Selektion die Ähnlichkeiten erkennen, die eine Ebene der Materie im Dienste der nächsten verbinden?

Go Back Print Chapter