Das Wunder des Neuschreibens
Manchmal ist man gezwungen, eine Software komplett neuzuschreiben. Zum Beispiel weil die Architektur der existierenden Version so an ihre Grenzen gekommen ist, dass jede Weiter-entwicklung zum Problem wird.
Wenn man das System tatsächlich komplett von Null auf neu entwickelt, ohne der Versuchung zu erliegen, doch noch irgendwelche Teile wiederzuverwenden, dann kann man eine erstaunliche Erfahrung machen:
- Es geht viel schneller als beim ersten Mal
- Die neue Version ist um Dimensionen kürzer.
- Und sie ist in vielen Details ganz einfach genialer.
Es ist, obwohl man vielleicht gar nicht an diese Aufgabe heranwollte, eine positive Erfahrung, weil man fühlt, hier kommt etwas heraus das Substanz hat.
Das lässt sich noch weitertreiben, indem man die Software oder auch nur einen bestimmten Algorithmus einige Zeit später noch einmal neuschreibt, und dann noch einmal und dann noch einmal usw.
Es passiert dann etwas, das einen wirklich umhauen kann: Es kommen Lösungen heraus, die geradezu unbeschreiblich sind. Ich nenne sie essentielle Algorithmen: sehr kurz, sehr mächtig (d.h. vielseitig anwendbar), absolut elegant und einfach vollkommen schön. Es stellt sich das Gefühl ein, echte Werte zu erschaffen. Ein ziemlich einfacher Weg, wirkliche Magie zu erleben – vorausgesetzt man schafft es, eine Reihe von Hürden zu überwinden, auf die ich gleich noch zu sprechen komme.
Entscheidend ist, die vorhergehenden Lösungen wirklich loszulassen und ganz aufzugeben. Sobald man versucht, irgendetwas mitzunehmen, wird der Effekt schon eingeschränkt.
Es ist dies eine Erfahrung, die auf eine weitere grundlegende Eigenschaft schöpferischer Prozesse führt: Ideen oder Visionen bringen mit der Zeit immer neue Materialisierungen hervor, die aber untereinander nicht verbunden sind. Bzw. würde eine erzwungene Verbindung die Möglichkeiten der neu entstehenden Materialisierung einschränken. Sie sind nur durch die Idee oder Vision verbunden. Wie eine Knolle, die immer neue Blüten hervorbringt. Und es sind nicht irgendwelche Blüten, sondern sie entwickeln sich immer perfekter auf das anvisierte Idealbild hin.
"Ja", wird jetzt mancher denken, "natürlich hat man mit den Vorversionen Erfahrungen gesammelt, die sich auszahlen". Aber das ist es nicht nur. Es kommt auf diese Weise mehr zum Vorschein, als man auf rational-bewusst gemachte Erfahrungen zurückführen kann.
Die Haupthürde ist, eine bestehende Implementierung aufzugeben.
Auf dem Weg, ein guter Softwareentwickler zu werden, gibt es Dinge zu lernen, die über technische Details hinausgehen. Gegen die grundlegenden schöpferischen Fähigkeiten, um die es hier geht, sind die Details von Programmiersprachen und Betriebssystemen einfach nur Pippifax. Da ist die ganze Persönlichkeit gefordert. Und die vorgenannte Fähigkeit, bestehende Implementierungen aufgeben zu können, ist eine der anspruchsvollsten.
Denn man hat ja sooooooo viel Arbeit rein-gesteckt. Und das soll alles umsonst gewesen sein?
Ich habe mal ein System aufgeben müssen, an dem ich zwei volle Jahre entwickelt hatte – ohne jede materielle Ausbeute. Seitdem kann ichs. Und irgendwann wirds auch Routine: Weg damit! Was nachkommt ist sowieso besser.
Überholte Implementierungen, die man mit sich herumschleppt, verhindern, dass man jemals erfährt, welche Hammerlösungen eigentlich möglich sind.
Und es ist nicht nur das persönliche Hängen an alten Arbeiten, sondern auch die allgemeine Wiederverwendbarkeits-Hysterie, die einen lehrt, alles möglichst nur einmal zu machen und dann die reinsten Flickschuster-Konstruktionen daraus zusammenzubasteln.
Man kann dieses Konzept noch sehr viel weitertreiben: Nicht nur neuentwickeln, wenn die Architektur am Ende ist, sondern auch Varianten einfach neuschreiben und sich gar nicht lange mit Anpassung und Wiederverwendung abquälen.
Das führt aber auf eine weitere Hürde: Es gibt immer ein paar Lösungen, die man für kompliziert hält und in die man eigentlich nicht reingucken will, weil das ist ja so geistig anstrengend. Wenn man es aber gegen diese Hürde doch immer wieder tut, dann entwickelt sich mit der Zeit ein neuer Level an Programmierfähigkeit, der auf der Sicherheit beruht, alle diese Teillösungen und Konzepte jederzeit lässig aus dem Ärmel schütteln zu können und das in einer immer besseren Qualität. Erst kostet es ein bisschen Überwindung, aber irgendwann kann man ganz ohne Gepäck reisen: Alles ist jederzeit abrufbar: die komplette Maschinerie, um in kürzester Zeit Tools bzw. ganze Softwareprogramme fertigzustellen.
Man muss dazu verstehen, dass jenes Gefühl von Kompliziertheit mancher Lösungen, das einen davor zurückschrecken lässt, einfach beherzt daranzugehen, darauf beruht, dass man ohne echte Antriebsenergie auf die Lösungen schaut. (Die Antriebsenergie aus dem emotionalen Zweckerfüllungsbedürfnis.) Sobald man aber aus einem emotionalen Zweckerfüllungsbedürfnis heraus an die Sache herangeht, ist es nicht mehr kompliziert. Denn es arbeitet jetzt das schöpferische Unterbewusstsein, das diese Dinge lässig löst. Dieser Effekt ist Magie in Reinkultur – wenn auch vielleicht "Magie im Kleinen". (Ist aber das gleiche Prinzip wie "Magie im Großen".) Magie hier nicht als emotional-euphorischer Ver-neblungsbegriff gebraucht, sondern sauber definiert als das Wirken einer über den rational-bewussten Geist hinausgehenden Kraft, die den rational-bewussten Geist – so er sie überhaupt wahrnimmt – insofern verblüfft, als er im Rahmen unserer Kultur sie nicht besonders gut kennt, nur wenig mit ihr kooperiert und auch kaum mit ihr rechnet.
Wenn man so entwickelt, bekommt man eine Ahnung, wie die Schöpfung arbeitet: Die Ideen und Visionen sind der Motor und produzieren blubb blubb eine Materialisierung nach der anderen, eine schöner als die andere. Da will man sich irgendwann mit den alten Kamellen gar nicht mehr belasten.