Programmatische Programme programmieren

Das Wort Programm hat seine – kaum zu verheimlichende – Wurzel im griechischen programma, was so viel wie Vor-Schrift bedeutet. Im Wort Vorschrift klingt auch die Doppeldeutigkeit an, die das Wort Programm hat: Eine Vorschrift ist auf der einen Seite eine Anweisung, wie sich der oder das mit dem Programm versehene und damit programmierte zu verhalten hat. Die Anweisung ist zwingend, den Befehlen ist Folge zu leisten. Das Verhalten des Programmierten ist determiniert und voraus-berechenbar.

Auf der anderen Seite ist eine Vor-Schrift vielleicht nicht mehr als eine Absichtserklärung, oder ein Vorhaben sich in der Zukunft auf eine bestimmte Weise zu verhalten, das Dokumentieren eines Zieles. Partei-Programme haben diesen Charakter – sie enthalten „programmatische Ziele“.

Schaut man sich vor diesem Hintergrund die IT-Welt an dann fällt zweierlei auf:

Einerseits gibt es in einem IT-Projekt beide Sorten von Programmen: Der Code der Software ist – jedenfalls auf den ersten Blick – ein Programm im ersten Sinne, eine Folge von Befehlen, die auszuführen sind, eine Vorschrift, die das Verhalten des programmierten Systems berechenbar macht. Anforderungsspezifikationen sind hingegen eher programmatische Dokumente, sie beschreiben Ziele, die erreicht werden sollen. Auch Architektur-Richtlinien haben diesen „programmatischen Charakter“. Nützlich ist, ein solches Programm zu haben, bevor der Programmierer seine Arbeit beginnt. Über den Projekterfolg entscheidet die Klarheit des Programms der Fachseite, nicht das Programm des Software-Entwicklers.

Andererseits ist der Trend zu beobachten, dass der Code, die Folge von Programmier-Befehlen, immer weniger das Verhalten des Systems vorher bestimmt. Umso größer die Durchdringung des Alltags mit Software-Systemen ist, desto mehr ist das Verhalten dieser Systeme durch die Daten, die es verarbeitet, und die Umwelt, mit der es verbunden ist, verbunden. Welche Ergebnisse eine Internet-Suche mir liefert, wird weniger durch den Code der Suchmaschine bestimmt als durch die Struktur der Informationen, die im Internet abgelegt wird. Was Wikipedia, Facebook und Twitter wirklich sind oder sein können, ist nicht durch eine Datenbank-Struktur und ein PHP-Script definiert, sondern durch das, was die Benutzer damit machen.

Das muss auch auf die Programme selbst Auswirkungen haben. Wenn sich das Verhalten eines Systems nicht mehr befehlen lässt, muss die ganze System-Entwicklung programmatischer werden. Architekturen und Design sind nur gut, wenn sie zum Nutzen passen, wenn dieser Nutzen und die Benutzung aber nicht vorhersehbar sind, müssen die Vor-Schriften programmatischer werden.