Dem Computer ins Hirn geschaut: Im Licht der Evolution
Überblick
In diesem letzten Kapitel steht die Software im Mittelpunkt, genauer gesagt: die Software-Technik. Wir werden sie aus drei Blickwinkeln beleuchten und dabei die Evolution als thematisches Grundgerüst einsetzen. Zuerst geht es um das Entstehen: wie sich die Rolle der Software verändert hat und sich schichtenartig immer leistungsfähigere und komplexere Software-Strukturen gebildet haben. Dabei werden wir unter dem Stichwort der Schad-Software auch negative Entwicklungen diskutieren. Danach ist das Entwickeln an der Reihe: Sie lernen die Prinzipien kennen, nach denen Verarbeitungsabläufe als Programme formuliert und große Programmsysteme gebaut werden. Und schließlich dreht es sich um das Entdecken, nämlich wie speziell zugeschnittene Software-Systeme helfen, die biologische Evolution zu verstehen. Sie werden eine Vorstellung davon bekommen, wie genetische Stammbäume mithilfe von Computern rekonstruiert werden können. Dass zudem die Evolution als Vorbild für Software dienen kann, sehen Sie dann am Ende des Kapitels.
Der Erfolg des Computers liegt in seiner Universalität begründet. Weil Verarbeitungsabläufe mittels eines Maschinencodes dargestellt und – wie sonstige Daten – flexibel im Hauptspeicher abgelegt werden können, lässt er sich in verschiedensten Anwendungsszenarien einsetzen. Die Software stellt also die Hardware für eine bestimmte Aufgabe ein, allerdings muss sie entsprechend konstruiert werden: Die zu verarbeitenden Informationen sind zu codieren, die resultierenden Daten intern zu strukturieren und für die Berechnungen müssen adäquate Algorithmen gefunden werden. Mit den konzeptuellen Grundlagen dafür haben wir uns in den vorangegangenen Kapiteln beschäftigt. Doch letztlich müssen all diese Überlegungen in ein konkretes Programm gegossen und in eine Folge von Maschineninstruktionen umgesetzt werden. Und je komplexer die Anwendung ist, desto weniger kann man von einem Programm sprechen und desto mehr hat man es mit einem Software-System zu tun, das aus einer Vielzahl von Programmen besteht. Daher haben sich bestimmte Vorgehensweisen etabliert.
Das Gebiet, welches sich mit der systematischen Erstellung von Software-Systemen auseinandersetzt, wird mit dem Begriff Software-Technik bezeichnet, im Englischen »Software Engineering«. Seine Methoden erstrecken sich auf weit mehr als die reine Programmierung, es geht auch um Spezifizieren, Konzipieren, Evaluieren und Dokumentieren. Im Folgenden erhalten Sie einen Einblick in die Grundlagen. Zunächst sehen wir uns die Evolution der Software an, u. a. auch zu welchen Problemen und Herausforderungen sie geführt hat. Anschließend widmen wir uns dem Handwerk der Programmierung und dem Bau großer Software-Systeme, insbesondere behandeln wir die verschiedenen Phasen der Systementwicklung. Zum Schluss demonstriere ich Ihnen die Umsetzung dieser Ideen in zwei realen Anwendungen, die sich um die biologische Evolution drehen. Dort werden Sie sehen, wie Biologie und Informatik sich konkret gegenseitig befruchten.
Vom Entstehen
Komplexe Software-Systeme entstehen nicht, indem man eine Folge von Maschinenbefehlen von oben nach unten niederschreibt. Da könnten Sie genauso gut eine Turing-Maschine programmieren und aus unzähligen Kartonbögen Schritt für Schritt einzelne Lochkarten herausschneiden und stanzen. Es bedarf einer gestuften Komposition, denn komplex heißt so viel wie vielschichtig, viele verschiedene Dinge umfassend. Schauen wir uns also an, wie Komplexität entsteht, und beginnen bei einem der vielschichtigsten Organismen überhaupt: dem Menschen.
Schicht für Schicht zur Komplexität
Der Homo sapiens hat eine lange Entwicklungsgeschichte hinter sich, und die begann schon, lange bevor die ersten Menschenartigen vor knapp 2 Mio. Jahren Afrika verließen. In verschiedenen Stufen der Evolution mussten zahlreiche Voraussetzungen geschaffen werden bzw. sich einstellen, und in jeder Stufe unterlagen den Veränderungsprozessen andere Mechanismen (siehe Abb. 9.1, in dieser Leseprobe nicht enthalten). Die Elementarteilchen schlossen sich zu Atomen und zu den Elementen zusammen, Atome wiederum verbanden sich miteinander zu Molekülen. Als sich dann die Grundmoleküle des Lebens, u. a. DNA, RNA und Proteine, bildeten und sich ihr Zusammenspiel etablierte, war der Weg zu den ersten Organismen vorbereitet. Es sollte zwar noch etwas dauern, bis die Urzellen entstanden, doch ab da wurde aus der chemischen eine biologische Evolution . Aus Zellen entwickelten sich Zellverbände und Vielzeller mit spezialisierten Zellen, und aus diesen wiederum komplexe Lebewesen wie der Mensch. Grundlage dafür waren unzählige Veränderungen unseres genetischen Erbguts durch Mutationen und Rekombinationen, die sich in diversen Auslesevorgängen durchgesetzt haben. Schließlich brachte die kulturelle Evolution eine weitere Dynamik ins Spiel. Die Entwicklung einer Kultur im allgemeinen Sinne fußt auf unserer Fähigkeit, Verhaltensweisen durch Erfahrungen, Nachahmungen und Einsichten zu erlernen und zu verändern. Menschliche Gemeinschaften erfanden Hilfsmittel, bildeten Symbolsysteme wie Sprache und Schrift für die Vermittlung von Informationen und schufen auf deren Basis Traditionen für das Zusammenleben. Die Flexibilität, die unser Gehirn ermöglicht, hat unsere Entwicklung drastisch beschleunigt, denn durch sie können Verhaltensänderungen nicht nur von Generation zu Generation, sondern bereits auf individueller Ebene weitergereicht werden.
In all diesen Veränderungsprozessen finden wir dieselben Grundprinzipien. Da ist zum Beispiel das Prinzip des Zusammenschlusses: Elemente interagieren miteinander, schließen sich zusammen und bilden ein Ganzes mit neuen Eigenschaften. So entwickelten sich aus Einzellern mehrzellige Organismen. Das Prinzip der Kapselung ist eng damit verknüpft: Häufig grenzen sich solche Verbunde gegenüber der Umwelt ab – um sich vor störenden Einflüssen zu schützen und den Selbsterhalt zu ermöglichen. Bei der Zelle ist es die Zellwand, die das Innen vom Außen trennt. Und schließlich ist da noch das Prinzip der Differenzierung, d. h., ganz unterschiedliche Systeme entstehen, obwohl ihre Elemente möglicherweise ähnlich sind. Vielzeller haben mit der Zeit immer differenziertere Substrukturen – Gewebearten oder Organe – entwickelt, die auf bestimme Funktionen spezialisiert sind. Auf diese Weise gehen aus Elementen neue Systeme hervor, die eine neue Stufe der Komplexität schaffen. Das langfristige Resultat ist eine Komplexitätshierarchie. Die einzelnen Stufen sind nicht unbedingt klar trennbar, doch sie helfen uns, die Entstehungsgeschichte zu strukturieren und besser zu verstehen. Oder wie die Ameisenforscher Hölldobler und Wilson es formulieren (Holldöber und Wilson 2010, S. 8): »Alles Leben umfasst eine sich selbst reproduzierende Hierarchie von Ebenen. Biologie ist die Wissenschaft von den verschiedenen Ebenen.«
So wie komplexe natürliche Systeme entstehen, so werden auch komplexe künstliche Systeme geschaffen. Bei der Computer-Hardware haben wir das bereits mehrfach gesehen: Aus den Grundelementen elektrischer Stromkreise ergaben sich logische Gatterbausteine, aus diesen wiederum Bausteine zum Rechnen und Speichern, und letztere bildeten schließlich die Hauptbestandteile für einen Prozessor; aus einzelnen Computern wurde durch das Internet schließlich ein arbeitsteiliger Rechnerverbund. Bei der Entwicklung von Computer-Software gibt es ebenso allgemeine Entwurfsprinzipien , wie Bsp. 9.1 aufzeigt. Denn komplexe Programmsysteme können so umfangreich sein, dass sie Abermillionen von Verarbeitungsschritten umfassen und ein einzelner Mensch mehrere Hundert Jahre zu ihrer Erstellung benötigte. Sie lassen sich nur realisieren, wenn sie stufenweise aus überschaubaren und handhabbaren Programmteilen zusammengesetzt werden. Informatiker orientieren sich also an der natürlichen Vorgehensweise, auch wenn beim Entwurf von Software-Systemen weitere Aspekte wie z. B. Wartbarkeit oder Erweiterbarkeit hineinspielen.
Beispiel 9.1: Prinzipien der Software-Entwicklung
Dem Entwurfsprozess von Software -Systemen liegen verschiedene Grundsätze zugrunde, die sich im Laufe der Zeit aus Erfahrungen und Erkenntnissen herausgebildet haben. Drei zentrale Prinzipien, die an die vorher erwähnten Evolutionsprinzipien erinnern, sind folgende:
Modularisierung Ein System wird in eine möglichst übersichtliche Anzahl von Komponenten untergliedert, die auf eine vordefinierte Art und Weise miteinander kommunizieren. Dabei versucht man die Module so zu wählen, dass jedes für andere Aufgaben verantwortlich ist und die Zuständigkeiten klar getrennt sind.
Kapselung Eine Komponente präsentiert sich gegenüber den restlichen Systembestandteilen als eine BlackBox, in der Details der konkreten Umsetzung verborgen sind. Einzig das Verhalten und die Kommunikationskanäle zum Außen sind bekannt; was genau im Inneren der BlackBox geschieht, ist für die anderen Komponenten nicht ersichtlich.
Hierarchisierung Die Komponenten selbst werden – sofern es ihr Umfang erfordert – sukzessive verfeinert und in weitere, miteinander verflochtene Untereinheiten aufgeteilt. Auf diese Weise ergibt sich eine Rangordnung von ineinander verschachtelten Systemkomponenten.
Wenn Sie inhaltliche Anmerkungen zu diesem Artikel haben, können Sie die Redaktion per E-Mail informieren. Wir lesen Ihre Zuschrift, bitten jedoch um Verständnis, dass wir nicht jede beantworten können.