Software-Entwicklung: Evolution ist Mutation und Selektion.

Was hat Software-Entwicklung mit der Evolution zu tun?

Heute habe ich mit meinen Söhnen das großartige Museum für Naturkunde in Berlin besucht. Zwei Stunden haben wir an einer Führung durch das Haus teilgenommen und dabei von den größten erhaltenen Dinosaurierskeletten, wie den Brachiosaurus oder T.Rex, bis hin zu den in 250.000 Gläsern konservierten Arten eine umfangreiche Sammlung von Exponaten und Studienobjekten erlebt. Es war sehr beeindruckend. In jedem Fall war es einen Besuch wert.

Der rote Faden, der sich durch die Führung spann, war das Thema Evolution, die uns die wissenschaftliche Mitarbeiterin in immer neuen Beispielen sehr anschaulich und in einfachen Worten nahe brachte: Evolution ist Mutation und Selektion. Evolution ist ein stetiger und kontinuierlicher Prozeß. Mutation erzeugt stetig neue Varianten des Bestehenden. Kein Individuum gleicht völlig dem anderen. Selektion wählt aus diesen Mutationen die jeweiligen an ihre Lebensbedingungen am besten angepassten Individuen aus, die wiederum Nachkommen erzeugen und damit ihre Gene weitergeben, während die weniger gut angepassten Individuen weniger oder keine Nachkommen erzeugen und ihre Gene nicht gut weitervererben können.

Das erinnerte mich an ein Gespräch im Jahr 1981 mit Ken Thompson, der mit dem mittlerweile verstorbenen Dennis Ritchie, u.a. das UNIX-Betriebssystem erfunden und geschrieben hat. Beide arbeiteten damals bei den Bell Labs. Ken schrieb in seiner Freizeit Computer-Schach-Programme, wie ich damals auch, und sah mit seinem langen schwarzen Pferdeschwanz wie ein total cooler Hippie aus. Das Thema Schachprogrammierung war einer der Vorboten der Künstlichen Intelligenz zu der Zeit. Ich traf Ken in Travemünde bei einer der ersten Computer-Schach-Weltmeisterschaften. Wir haben uns den ganzen späten Abend über Softwareentwicklung unterhalten und er erzählte mir, mit welcher Taktik er vorging: Evolution.

Schachprogramme hatten damals eine Komponente, die Bewertungsfunktion genannt wurde. Die Bewertungsfunktion bewertete bestimmte Konstellationen und Stellungsmuster auf dem Schachbrett und diente der Gewichtung der verschiedenen Zugoptionen, vereinfacht gesagt. Das Fatale war dabei, dass die vielen Gewichte und deren Faktoren in der Funktion sich nicht berechnen ließen, sondern experimentell gefunden werden mussten. Kens Lösung dafür war verblüffend einfach.

Er ließ nach seiner täglichen bezahlten Arbeit, nachts auf den unbeschäftigten Rechnern des Bell Labs seine Schach-Programme mit jeweils unterschiedlichen Bewertungsfunktionen automatisch gegeneinander spielen. Am nächsten Morgen nahm er dann das Gewinnerprogramm, bildete aus seiner Bewertungsfunktion neue Mutationen und ließ diese Programme in der nächsten Nacht wieder gegeneinander spielen. Und so fort. Bis er eine gute Variante des Programms hatte. Smart und einfach. Eine echte evolutionäre Software-Entwicklung nach dem Prinzip “Evolution ist Mutation von Individuen und Selektion von erfolgreichen Individuen”.

Software-Entwicklung ist eine der komplexesten Aktivitäten im technologischen Bereich. Es ist eine Ingenieurs-Wissenschaft, die vorrangig aus der Erfahrung gespeist wird, und sich nicht wirklich mechanisch reproduzieren lässt. Es gibt einfach zu viele Faktoren, die dabei eine Rolle spielen. Das Ganze ist nicht wirklich berechenbar oder im Aufwand wirklich vorab kalkulierbar, was Auftraggeber nie hören wollen. Grobe Schätzungen sind das Maß der Dinge. Oder eben etwas willkürliche Deckelung von Budgets in Zeit und Geld. Es gibt im Laufe der Jahrzehnte im Software-Engineering unzählige Theorien, wie man es machen sollte, um ein gutes Ergebnis zu erzielen. Die Agile Softwareentwicklung ist aktuell in aller Munde.

Mich würde die Evolutionäre Softwareentwicklung interessieren. Natürlich sind die Rahmenbedingungen recht unterschiedlich zur vergleichsweise “simplen” Schachprogrammierung. Es hätte aber seinen Reiz, darüber nachzudenken und Wege zu finden…

Für mich sind Agile Softwareentwicklung, Continuous Beta (oder auch Perpetual Beta) und Minimum Viable Product (MVP) in der Herangehensweise an eine gute Lösung nur Vorstufen einer Evolutionären Softwareentwicklung. Ließen sich diese Verfahren weiter verbessern, professionalisieren, automatisieren und vereinheitlichen? Können wir Software schreiben, die eigenständig lernt, sich ständig zu verbessern?

Ich glaube, das ist keine Utopie. Schließlich sind aus Mikroben Menschen entstanden. Nicht am Reißbrett von Ingenieuren, sondern in der Natur durch die Evolution.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ photo

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s