Buggy

Von Stefan, Wed 04 April 2007, veröffentlich in Blog

Ein neues Projekt. Seit Tagen ununterbrochen programmiert, gestern 7:30 Uhr in der Früh ins Bett gekommen, eher hat es einfach nicht laufen wollen und diesen seltsamen runtime error geworfen. Entsprechend weit fortgeschritten dieser Tag, Aufstehen, Fertigpizza, Eclipse, Klischee bedient. 15 Minuten später wieder vollständig im Code, Kommunikation mit der Außenwelt - negativ. Houston ruft Apollo 13 - keine Reaktion. Apollo 13 hat ein Problem, nein, Problem ist das falsche Wort.

In einer rekursiven Funktion mit Pointer-Arithmetik über ein N-dimensionales Array zu navigieren ist kein Problem. Es fordert nur die Belastung des menschlichen Geistes an den Rand des Machbaren. Kurz überlege ich einen weiteren Prozessorkühler an die Schädeldecke zu schrauben, es wäre durchaus nötig. Aber der resultierende Code wird seine zugedachte Aufgabe entsprechend trickreich und elegant bewältigen. Das wird der Lohn sein. In meinem Gehirn windet sich auf theoretischer Ebene ein Pointer in der 5 Dimension. Die Wohnungstür wird geschlossen. Houston ruft Apollo 13 - keine Reaktion.

Im Augenwinkel entdecke ich eine Bewegung. Mein persönlicher Interruptkontroller schreit laut auf. Verwechslung, der Interruptkontroller liegt fest im Inneren des PCs verstaut. Das Signal kommt aus der realen Welt. Houston? Ich wende die Augen vom Flimmern des Bildschirmes ab. Aus den Gleichungen der Matrix baut sich die reale Welt vor mir auf. Nein, die reale Welt war die ganze Zeit da. Und Matrix 1 ganz gut, dann wurde es eher Panne. In das vergessene Ensemble der mich umgebenden Wirklichkeit hat sich ein Menschlein gesellt, welches mir bei genauerer Betrachtung irgendwie bekannt vorkommt. Unterbewusst rechnet mein Hirn die nächste Instanz der Rekursion auf den Stack. Ja, dieser Mensch muss mindestens ein sehr guter Freund von mir sein. Irgend etwas an meinem aktuellen Zustand scheint ihn durchaus zu verunsichern, während die eben erzeugte Instanz den Konstruktor der neu initialisierten Objekte aufruft. Mein Gehrin beginnt zu swappen, um Platz für die neue Situation zu schaffen. Langsam erreicht mein Sprachzentrum einen benutzbaren Zustand. Blödsinn, Gehirne swappen nicht.

Meine Begrüßung scheint meinen Besucher vorrübergehend zu erleichtern. Eine Sekunde länger, und er hätte wohl einen medizinischen, wenn nicht gar psychiatrischen, Notdienst gerufen. Im nächsten Moment meldet sich mein N-dimensionales Array zurück und fordert wehement Aufmerksamkeit. Wo stand der Pointer doch gleich? Ach ja, 6. Dimension, Arrayfeld 0. Im nun folgenden Schleifendurchlauf steht die erste Iteration an. Mein Bewusstsein gerät in einen akuten Interessenkonflikt. Mein Besucher muss irgend etwas gesagt haben, zumindest glauben meine Ohren sich an ein akkustisches Ereignis zu erinnern. Muss ich nachfragen? Wenn ich wissen will, welche Information er zu übermitteln versuchte, werde ich nachfragen müssen. Will ich das gerade wissen? Ja, natürlich. So weit kommt es noch, dass ich bei all der Technik meine Freunde vergesse. „Was hast du gesagt?"

Erneut trifft mich ein verunsicherter Blick. „Hast du mir zugehört?" „Na klar" zumindest will ich das gern. Wenn mein Pointer nicht just in diesem Moment so viele Speicheradressen weiter wandern würde, wie ein Feld des Arrays belegt. Und das rechnet mein Hirn jetzt aus, es fragt nicht, es beginnt einfach zu zählen. „... und das macht mich ein bischen fertig" bekomme ich gerade noch rekonstruiert. Unmöglich, jetzt noch einmal nachzufragen. Ich versuche ein „Hm, schon schlimm" und hoffe, dass sich der Sinn aus dem weiteren Kontext erschließt, während ich gedenke den Pointer an der Hirnrinde fest zu nageln, damit ich ihn dort später wieder finde. „Was meinst du, was soll ich jetzt machen?" Ja, was soll er da machen? Ich probiere mich mit einem „Hm, weiß auch nicht so recht" zu retten, wohl wissend, dass ich verdammt noch mal hätte zuhören müssen. In diesem Augenblick sollte im Code der Teil kommen, der ein paar fundamentale Vertauschungen am Array vornimmt. Der eigentliche Kern der Idee, schwer zu durchschauen, aber in der Wirkung durchaus spannend. Ich darf auf keinen Fall den Faden verlieren, und die wirkliche Tragik besteht nun darin, dass diese Erkenntnis für beide Welten zutrifft. Ich MUSS zuhören, was mir die Wirklichkeit anvertraut, wenn ich dabei jedoch den Zustand meiner rekursiven Funktion vergesse, bricht die damit verbundene filigrane Gedankenkonstruktion mit einer derartigen Wucht zusammen, dass es mit einem durchschnittlichen Erdbeben in San Francisco vergleichbar wäre, einschließlich der zu erwartenden Anstrengungen eines anschließenden Wiederaufbaus.

Am Ende wird mir Houston kühl die Wahrheit ins Bewusstsein flüstern: Es wird mir nicht gelungen sein in der mir gegebenen Zeit den Ausgang aus meiner theoretichen Welt gefunden zu haben. Selbige bemächtigt sich wieder und wieder meiner Gedankenstränge und verknotet sie unzulässiger Weise mit Speicheradressen und Funktionspointern. Die Wohnungstür wird von einem Menschen geschlossen werden, der nicht versteht, dass ich es einfach nicht schaffe in Sekundenbruchteilen grundlegende Realitäten zu wechseln. Er wird, zu Recht, ein Gefühl mit sich tragen überhört und unverstanden zu sein. Bei all dem habe ich natürlich übersehen, dass mein Pointer in diesem Moment in einen undefinierten Zustand wechselt, der äußerst selten auffällt und zwar nur dann, wenn in einer wirklich wichtigen Situation die Datenbank komplett mit Nullen gefüllt wird, vor einem möglichen Backup zum Beispiel. Aber das ist ja nun auch egal.