Heute soll es einmal um ein ganz anderes Thema gehen, nämlich darum, wie die Theorien der Genetik und Memetik auf die Welt der Computerprogramme angewandt werden können. Aber Achtung – der folgende Text entspricht meiner persönlichen Meinung, stellt gewissermaßen eine (unbewiesene) Theorie dar – es sollte sich also niemand mit Sicherheit darauf berufen. Eine Diskussion darüber würde mich aber wie immer freuen.
Genetik
Mit den grundlegenden Prinzipien der (in erster Linie durch Charles Darwin allgemein bekannt gewordenen) Evolution kennen sich ja sicherlich die meisten der Leser hier aus. Die “Grundeinheit” der Evolution ist ja das Gen oder genauer eigentlich, die DNA, jene Doppelhelix aus Nukleinsäuren, die unsere Erbgutinformationen repräsentiert. Mittelbar mit der DNA verbunden sind so wichtige Begriffe wie Mutation, Selektion und Fitness. Das Grundkonzept der Evolution – soweit man hier im wissenschaftlichen Sinne überhaupt von einem Konzept reden kann – ist, dass die Lebewesen mit der besten Angepasstheit an ihre Umwelt auch die größte Chance haben, zu überleben und sich zu reproduzieren. Weniger gut angepasste Arten müssen sich entweder anpassen und damit neue Arten hervorbringen (was natürlich kein aktiver Vorgang ist) oder werden über kurz oder lang aussterben; da sich aber die Umwelt ständig ändert, sind auch die meisten Lebewesen dem Druck der Veränderung ausgesetzt. Umweltänderungen können zum einen auf Grund langsamer klimatischer und geografischer Änderungen stattfinden, aber auch durch “spontane” Änderungen (gern auch “Katastrophen” genannt), wie etwa große Vulkanausbrüche oder Meteoriteneinschläge (manch einer mag auch die Menschheit an sich zu diesen Katastrophen rechnen, da sie innerhalb sehr kurzer Zeit gewaltige Änderungen auf unserem Planeten hervorgerufen hat). Ein weiterer wichtiger Umwelteinfluss ist aber auch die Entwicklung der anderen Arten in der Umgebung; findet bei einem Beutetier/Prädator eine Änderung statt, so muss sich auch der Jäger/Gejagte anpassen, um auf die geänderten Umweltbedingungen zu reagieren (auch das ist natürlich kein aktiver Vorgang – kein Lebewesen kann sich dazu entscheiden, sich zu ändern, sondern es geschieht rein passiv über Mutation und Selektion!).
Für den folgenden Text gilt: ich bin kein Evolutionsforscher, hoffe jedoch, mit meinen Aussagen in Bezug auf die Evolution nicht allzu sehr daneben zu liegen.
Memetik
Eine modernere, 1976 von Richard Dawkins beschriebene Theorie ist die Mem-Theorie. Dabei werden Meme als grundlegende Gedankeneinheiten bzw. Informationseinheiten definiert und beschreiben im Grunde bestimmte kulturelle Konzepte und Informationen. Die Theorie geht davon aus, dass sich diese Meme durch Kommunikation verbreiten und dabei – ähnlich den Genen der Evolution – veränderlich und einem Selektionsdruck unterworfen sind. Der wichtige Punkt hierbei ist meiner Meinung nach übrigens die Kommunikation, ein im Gegensatz zur Mutation bewusst ausgeführter Vorgang, der zur Verbreitung von Informationen führt. Man mag von der Mem-Theorie und ihrem Nutzen halten, was man mag; im Folgenden möchte ich mich dennoch des Begriffs des Mems bedienen und ihn auf die Welt der Informatik anwenden.
Anwendung der Theorien auf Computerprogramme
Betrachtet man die Entwicklung von Computerprogrammen über die letzten Jahr(zehnt)e hinweg, so lassen sich einige (vorsichtige) Analogien zur Genetik und Memetik finden. Bezogen auf die Genetik gibt es da natürlich die “triviale” Sichtweise, dass Computerprogramme ständigen Mutationen unterliegen, wobei ihr zugrundeliegender Programmcode gewissermaßen das Erbgut, also die DNA darstellt, welche (durch Programmierer) verändert wird. Inwieweit hier allerdings noch eine Analogie zur Genetik vorliegt, ist zumindest diskussionswürdig, da sich Programmcode nicht zufällig ändert, sondern zielgerichtet modifiziert wird (etwas, das genau gegensätzlich zur Mutation von Genen stattfindet). Auf der anderen Seite hat man aber auch den Effekt der Rekombination (der zweigeschlechtlichen Fortpflanzung in der Tier- und Pflanzenwelt), wenn nämlich mehrere Programme miteinander verschmelzen (etwa bei der Ausnutzung von Programmbibliotheken).
Interessanter als die Betrachtung der Analogien auf Ebene der Gene sind meiner Meinung nach aber die Gemeinsamkeiten zwischen der Selektion der Evolution und den Mechanismen des “Überlebens” von Computerprogrammen. Genauso wie jedes Lebewesen mit seiner Umwelt interagiert und dort einem Selektionsdruck unterworfen ist, reagieren Computerprogramme auf veränderte Einflüsse in der IT-Umgebung. Und genauso, wie sich Lebewesen auf langsame und plötzliche Änderungen ihrer Umwelt sowie bei ihren Beutetieren, Jägern und Nahrungskonkurrenten einstellen müssen, reagieren Computerprogramme auf die gleichen Änderungen. Lebewesen benötigen zudem irgendeine Form von Nahrung und eine Gelegenheit zur Fortpflanzung, um zu überstehen; für Programme gilt das gleiche, wobei hier “Nahrung” und “Fortpflanzungsgelegenheit” in einer Einheit kombiniert werden, nämlich in uns, dem Nutzer, da ein Programm dadurch überlebt, dass es genutzt wird.
Änderungen in der Umwelt
Was nun die Änderungen der Umwelt betrifft: die “Umwelt” eines Computerprogramms besteht zum einen natürlich aus der Hardware, auf der das Programm läuft (die Geografie und das Klima), dem Betriebssystem (welches ich auch fast zum Klima und zur Geografie rechnen möchte) und den anderen Programmen, die entweder auf dem gleichen System laufen (wobei es hier meist ein mehr oder weniger friedliches Miteinander gibt) oder generell existieren und eine ähnliche Aufgabe erfüllen wie das Programm selber; hier entsteht vor allem der Konkurrenzdruck, der zur Selektion der Programme führt.
Im Verlauf der Jahrzehnte gab es im Bereich der Hardware zahlreiche, meist kontinuierliche Veränderungen, an welche sich die Programme mit der Zeit angepasst haben. Die offensichtlichste Änderung war natürlich die Zunahme der zur Verfügung stehenden Ressourcen – Rechengeschwindigkeit und verfügbare Speichermenge – an welche sich die Programme durch bessere Ressourcenausnutzung angepasst haben (mit dem kuriosen Effekt, dass Programme heutzutage trotz schnellerer Computer noch immer nicht schneller laufen – aber das ist ein anderes Thema). Aber auch nicht so deutlich hervortretende Faktoren können zu den langsamen Umweltveränderungen gezählt werden. So hat sich insbesondere in den letzten Jahren die Anzahl der parallel arbeitenden Kerne in den Prozessoren erhöht, was dazu geführt hat, dass Computerprogramme immer mehr parallelisiert wurden, das heißt mehrere interne Aufgaben gleichzeitig berechnen können. Auch die verfügbaren Auflösungen der Monitore und damit der verfügbare Platz zur Darstellung von Informationen vergrößerte sich, woran sich die Programme natürlich auch angepasst haben.
Neben den langsamen Veränderungen gab es von Zeit zu Zeit natürlich auch immer wieder plötzlich auftretende Neuerungen. Da wäre vor allem auch die Entwicklung von Grafikoberflächen für Betriebssysteme zu nennen – durch ihre Einführung Mitte der 1980er Jahre haben sich teilweise vollkommen neue Bedienkonzepte ergeben, welche relativ schnell ausgenutzt wurden. Selbst die Entwicklung der Personal Computer in den 70ern fand in einem relativ kurzen Zeitraum statt und hat zur Entstehung ganz neuer Programme geführt – schließlich gab es davor praktisch nur “Großrechenanlagen”, die nicht für den Heimgebrauch geeignet waren. Die Entwicklung des World Wide Web schließlich war die letzte große Neuerung, welche die heutige Zeit vollkommen beherrscht und teilweise vollkommen neue Programmkonzepte hervorgebracht hat (seitdem herrscht ein wenig Flaute im Bereich der Entwicklung grundlegend neuer Technologien; ob sich zum Beispiel das Cloud Computing als großer Wurf herausstellt, wird erst die Zeit zeigen können).
Ein wichtiger Faktor in der “Evolution der Programme” ist natürlich aber immer der Konkurrenzdruck anderer Programme gewesen. Zur Lösung eines Problems existieren für gewöhnlich mehrere Programme, welche um “Nahrung” – also Nutzer – miteinander konkurrieren und versuchen, durch immer neue Fähigkeiten ihre Konkurrenten auszustechen. Je mehr Konkurrenten existieren und je “stärker” (also je bedrohlicher für die eigene Existenz) diese sind, desto schneller entwickelt sich ein Programm auch weiter. Umgekehrt führt das dazu, dass sich ein Programm, welches in seinem Aufgabengebiet dominant ist und kaum Konkurrenz hat, relativ langsam weiterentwickelt – ein prominentes Beispiel hierfür folgt gleich noch.
Ähnlich der Evolution kann man die Entwicklung von Programmen aber auch unter dem Gesichtspunkt der Memetik betrachten. Ein Programm würde hier einem Mem, also einer Gedanken- oder Informationseinheit entsprechen, welches durch Kommunikation – in der Regel durch Empfehlung an andere Nutzer – und häufige Benutzung weiter verbreitet wird. Auch hierzu folgen gleich noch einige prominente Beispiele.
Überhaupt: bisher waren das ja alles theoretische Betrachtungen. Die beste Theorie nützt aber nichts, wenn sie nicht mit der realen Welt verglichen wird. Wenden wir uns also einigen Beispielen zu, an welchen ich demonstrieren möchte, wie die Gedanken der Genetik und Memetik auf die Informatikwelt angewendet werden können.
Beispiel: Betriebssysteme
An Betriebssystemen fällt die Evolution von Programmen immer besonders auf, da sie den Gesamteindruck eines Systems bestimmen und ständig präsent sind. Beherrscht wird der Markt hier eindeutig von den verschiedenen Windows-Versionen mit ungefähr 80% Marktanteil, gefolgt von Mac OS, wiederum gefolgt von Unix-basierten Systemen – der Markt ist also relativ überschaubar.
Die starke Präsenz von Windows verhindert wirkungsvoll das Wachstum anderer Betriebssysteme in relevantem Ausmaß, da es zum einen das standardmäßig installierte Betriebssystem auf vielen neu ausgelieferten Rechnern ist und – bedingt dadurch – viele Leute lediglich dieses System kennen und natürlich bei ihm bleiben. Windows ist also nicht nur der Spitzenprädator in seinem Gebiet in dem Sinne, dass es praktisch keine natürlichen Feinde hat, sondern es drängt die Konkurrenz auch erfolgreich an den Rand. Der Effekt des relativ geringen Selektionsdrucks ist allerdings auch, dass es hin und wieder zu “Fehlentwicklungen” kommen kann – man nehme nur Windows Vista, welches zwar auch eine relativ weite Verbreitung erlangt hatte, im Allgemeinen jedoch als mehr oder weniger großer Fehlschlag angesehen wird – es wird mittlerweile auch ziemlich schnell von Windows 7 (sozusagen der Weiterentwicklung der Art) verdrängt, da letzteres weitaus besser an die Umwelt “angepasst” ist in dem Sinne, dass es seine Aufgabe besser erfüllt. Insgesamt entwickelt sich Windows aber relativ langsam fort, da die Umwelt hier recht stabil ist und häufige Neuerungen im Moment nicht erforderlich sind.
Demgegenüber stehen etwa die Unix-artigen Betriebssysteme wie zum Beispiel Linux; global gesehen haben sie eine recht geringe Verbreitung, in bestimmten Bereichen (sozusagen ökologischen Nischen) sind sie aber klar dominant und sichern dadurch ihr Überleben – insbesondere das Server-Umfeld wäre hier zu nennen. Unix ist durch die Präsenz von Windows einem recht hohen Selektionsdruck ausgesetzt, was zu häufigeren Neuerungen führt (häufiger als Windows zumindest).
Insgesamt gesehen sind Betriebssysteme jedoch relativ stabil. Im Hardware-Bereich gibt es selten plötzliche Neuerungen, so dass sich die Betriebssysteme an die langsam ablaufenden Prozesse der Hardware-Verbesserung angepasst haben und sich auch selbst nur langsam verändern (wir reden hier von einem informationstechnischen “langsam” – das heißt, im Verlaufe einiger Jahre).
Beispiel: Internetbrowser
Ganz anders auf dem Gebiet der Internetbrowser; hier herrscht insbesondere seit einigen Jahren ein immens starker Konkurrenzdruck, welcher die Browserentwicklung stark beschleunigt und dazu geführt hat, dass zwischen verschiedenen Programmversionen teilweise nur wenige Wochen liegen. Da die Konkurrenz ständig neue Entwicklungen bringt, findet hier ein echtes “Wettrüsten” statt: kaum hat ein Browser eine neue Eigenschaft, ziehen die anderen Hersteller hinterher und präsentieren für ihre Browser eine eigene Implementierung oder gar Verbesserung dieser Eigenschaft.
Aber das war nicht immer so. Lange Zeit war der Internet Explorer, zusammen mit dem dominanten Windows ausgeliefert, der beherrschende Browser in der Computerwelt. Durch die fehlende Konkurrenz wurde er auch kaum weiterentwickelt; im Gegensatz zu den Betriebssystemen, wo eine langsame Entwicklung noch halbwegs ertragbar ist, war dieses Verhalten im Bereich des Internets allerdings fatal. Das World Wide Web verändert sich sehr schnell, wobei der Internet Explorer diesen Veränderungen nicht gerecht wurde; zahlreiche Sicherheitslücken waren die Folge. Durch seine große Verbreitung konnte sich das Programm zwar noch eine Zeit lang behaupten, wurde aber nach und nach durch andere Programme verdrängt
(das würde ich übrigens Evolution in Aktion nennen)
– insbesondere auch durch den Firefox.
Der Fall Firefox ist nun ein wenig kurios. Zu Anfang konnte er sich gut verbreiten, da er im Gegensatz zu vielen anderen Browsern sowohl kostenlos als auch werbefrei war und viele der Probleme des Internet Explorers vermied. Mittlerweile hat der Browser den höchsten Marktanteil bei den Browsern überhaupt – und das, obwohl mittlerweile alle verfügbaren Browser als ungefähr gleichwertig betrachtet werden können und der Firefox keineswegs “besser” ist als andere. Im Gegensatz zu Windows, welches auf vielen Geräten ohnehin vorinstalliert ist (ebenso wie der Internet Explorer übrigens) muss der Firefox manuell heruntergeladen werden – seine nach wie vor weite Verbreitung muss also irgendwie erklärt werden. An dieser Stelle möchte ich auf die Mem-Theorie von Dawkins verweisen. Eine Besonderheit des Firefox-Browsers ist, dass er bereits von vielen Nutzern verwendet und daher auch sehr oft weiterempfohlen wird. Das Mem “Firefox” ist demzufolge sehr präsent und hält sich dadurch so weit oben an der Spitze, dass es durch ständige Kommunikation erneuert wird. Für den durchschnittlichen Nutzer wäre es relativ egal, ob er nun Firefox, Opera, Internet Explorer oder Chrome benutzt – da ihm aber im Durchschnitt vermutlich am häufigsten Firefox empfohlen wird, greift er zu diesem Browser und wird selber auch weiter für dessen Verbreitung sorgen.
Beispiel: Programmiersprachen
Auch im Bereich der Programmiersprachen (die ich jetzt auch einfach mal als “Programme” bezeichne) herrscht ein sehr starker Konkurrenzdruck, da es auch hier eine Unzahl von verschiedenen Arten gibt, die um die Nutzergunst werben und die – ebenso wie Programme, aber auch wie Lebewesen – einer ständigen Modifikation und Anpassung an die Umwelt unterliegen. Insbesondere kann es auch passieren, dass ehemals sehr erfolgreiche Sprachen an den Rand der Bedeutungslosigkeit gedrängt und durch andere Sprachen ersetzt werden, je nach dem, welche Sprache gerade am besten an die aktuellsten Gegebenheiten angepasst ist (ein echtes Aussterben ist allerdings nicht so oft zu beobachten – bei einigen Sprachen kann man hier durchaus von “leider” sprechen). Nehmen wir etwa den Sprung von Assembler zu den Hochsprachen. Vor der Entwicklung der strukturierten Programmierung war Assembler die hauptsächlich (praktisch einzige) zur Verfügung stehende Programmiersprache; mit dem Aufkommen der ersten strukturierten Programmiersprachen wie Basic und Pascal aber wurde Assembler ziemlich schnell verdrängt und fristet heute ein Nischendasein im Bereich des High Performance Computing und der extrem systemnahen Entwicklung (man mag jetzt einwenden, dass das nicht unbedingt eine “Nische” ist – relativ gesehen ist Assembler aber nicht sonderlich weit verbreitet). Gleiches geschieht Sprachen, die mit der aktuellen Entwicklung der Technik und insbesondere den Anforderungen an moderne Programmiersprachen nicht Schritt halten können (also weniger gut an die Umwelt angepasst sind) und so ebenfalls an Bedeutung verlieren; prominentes Beispiel hierfür ist die Programmiersprache C++, welche lange Zeit ohne Neuerungen auskommen und dafür mit sinkender Verbreitung bezahlen musste.
Andersherum gilt aber auch der memetische Ansatz für Programmiersprachen. Sprachen mit einer sehr weiten Verbreitung können sich – ähnlich wie der Firefox – allein dadurch länger behaupten, dass sie ständig weiterempfohlen (auch und vor allem in der akademischen Lehre!) und benutzt werden. Dabei ist der Verwendungsgrad teilweise völlig unabhängig davon, wie “gut” die Sprache zur Lösung bestimmter Probleme geeignet ist; allein dadurch, dass sie eine weite Verbreitung hat, wird sie auf alle möglichen Probleme angewendet, auch auf solche, für die es eigentlich bessere Ansätze gäbe. Der Grund hierfür dürfte unter anderem auch sein, dass viele Leute zuerst mit einer bestimmten Sprache in Kontakt kommen und dann zeitlebens an ihr hängen bleiben (ganz analog zu Webbrowsern, Betriebssystemen und so weiter) – gewissermaßen stellen derartige Sprachen ein selbsterhaltendes Mem dar.
Fazit
Ich hoffe, meine Gedanken zur Evolution und Verbreitung einigermaßen verständlich zu (digitalem) Papier gebracht zu haben. Wir haben gesehen, auf welche Art und Weise Programme am Leben erhalten und verbreitet werden und wie aus dem Umfeld der Informatik Parallelen zur Genetik und Memetik gezogen werden können.
Welche Erkenntnisse aus derartigen Betrachtungen gezogen werden können, ist nun natürlich zu diskutieren – ähnliches gilt aber auch für die Evolutionstheorie und die Memetik (letztere wird übrigens auch genau dafür kritisiert, dass sie keinen echten “Mehrwert” in Bezug auf die Erkenntnis bringt). Ich persönlich denke aber, dass Gedanken und Untersuchungen zur Verbreitung von Programmen durchaus von Vorteil sein können. Auf der einen Seite natürlich für die Softwareentwickler, die nach Wegen suchen, ihre eigenen Programme zu verbreiten oder in guter Verbreitung zu halten; auf der anderen Seite aber auch für die Nutzer von Programmen, die durch derartige Betrachtungen ihr eigenes Nutzungsverhalten hinterfragen können und sich somit vielleicht wenigstens ab und zu die Frage stellen, aus welchem Grund sie an einem bestimmten Programm festhalten und ob nicht doch vielleicht ab und zu ein Programmwechsel etwas frischen Wind in das (Computer-)Leben bringen würde.
Die Historie hat gezeigt: in dynamischen Systemen führt Stillstand nur selten zum Erfolg; nur, wer sich verändert und anpasst, kann mit dem Wandel Schritt halten. Habt also Mut zur Veränderung und schaut ab und zu über den Tellerrand hinaus – irgendwann wird es sicherlich auf die ein oder andere Weise belohnt werden.
Kommentare (23)