27/11/2010von 1.373 Views – 3 Kommentare

Code is Poetry

WordPress-Erfinder Matt Mullenweg und Andreas Bogk vom Chaos Computer Club erklären, was unter „Code is Poetry“ zu verstehen ist.

Ich betreibe die Eselsohren via WordPress und rätsle seit langem über den WordPress-Slogan „Code is Poetry“. Was meinen die damit?

Ist das Poesie? –

blockquote {
padding-left: 10px;
border-left: 5px solid #666;
color: #666;
}

Ist es das? –


       
—     —     —
                     
—     —     —
                     
—     —     —
                     
—     —     —
                     
—     —     —
       


(Urheber siehe unten –> *)

Jedenfalls hat mich interessiert, was der Slogan „Code is Poetry” bedeutet. Fragen wir doch den Erfinder, Matt Mullenweg, Initiator und leitender Entwickler von WordPress:

WordPress & T.S. Eliot

Eselsohren: Is it a slogan? Is it a mantra?

Matt: I would call it an aspirational mantra.

Eselsohren: How did this sentence arise, what did it mean in the beginning and what does it mean today?

Matt: When I was making the first WordPress.org website I wanted something to go in the footer, and it seemed like an appropriate tagline that described how I wanted WordPress to evolve.

Eselsohren: And has it something to do with digital poetry?

Matt: Absolutely. At the time I was studying and reading a lot of T.S. Eliot and I was struck how a single line with just a few words could be packed with several allusions and meanings. As we wrote WordPress, I wanted every line of code to be short, sweet, and packed with meaning.

–––

Um das noch besser zu verstehen, habe ich mich an die Hacker gewandt. (Nicht erschrecken: „Die Hacker sind die Guten“ habe ich einmal einen Artikel übertitelt (– Link siehe unten).

Andreas Bogk vom Chaos Computer Club schickte diese für Laien leicht verständliche Einführung in Programmiersprachen sowie die Erklärung, was diese mit Poesie zu tun haben:

The Quality Plateau

Dass Programmieren etwas mit Dichtkunst zu tun hat, ist eine alte, und durchaus in gewisser Weise mit dem Begriff des Hackers verbunden. Hacken ist vom Selbstverständnis her ja so eine Art Kunsthandwerk, und Programmieren ist eine Tätigkeit, in der das zum Ausdruck kommt.

Lochkarten

Zur Erklärung muss man sich überlegen, warum Programmiersprachen überhaupt existieren. Den Computer interessieren ja für die Programmausführung eigentlich nur die Nullen und Einsen, oder genauer gesprochen die Maschinenanweisungen, die aus eben solchen Nullen und Einsen bestehen. Die ersten Computer hatten tatsächlich auch viele Schalter, die man auf Null oder Eins stellen konnte, um das Programm einzugeben. Relativ bald kamen auch Lochkarten dazu, damit man wenigstens das Programm wiederverwenden konnte.

Nullen und Einsen

Das Erstellen dieser Nullen und Einsen ist natürlich sehr mühselig, und so wurden bald Programme geschrieben, die es dem Programmierer ermöglichten, die einzelnen Maschinenbefehle per Namen anzusprechen. Das Programm, man nennt es Assembler, erzeugt dann die entsprechenden Nullen und Einsen.

Die Geburt der Programmiersprachen

Spannend wurde es, als jemand auf die Idee kam, immer wiederkehrende Muster in den Maschinenbefehlen zu abstrahieren: die Programmiersprachen wurden geboren. Statt direkt mit maschinenspezifischen Details zu arbeiten, wie Registern, Adressen, und Sprüngen, konnte der Programmierer jetzt mit Variablen, Funktionen und Zahlenwerten arbeiten. Das Arbeiten auf einer höheren Abstraktionsebene führt zu höherer Effizienz: der Programmierer ist eher mit dem Lösen seines eigentlichen Problems beschäftigt, statt sich ständig um Detailfragen zu kümmern, die immer wieder gleich sind.

Code ist Kommunikationsträger

Wohlbemerkt ist dem Rechner das egal. Er bekommt seine Anweisungen nach wie vor in Form von Maschinenbefehlen. Die linguistische Abstraktion einer Programmiersprache hat ihren Sinn einzig und allein darin, dass Menschen mit ihr und dem in der Sprache geschriebenen Code arbeiten. Code erfüllt neben dem Zweck, dass aus ihm Maschinenbefehle erzeugt werden, ebenso den Zweck, Kommunikationsträger für eine Kommunikation zwischen Menschen zu sein. Dies kann sowohl verschiedene Programmierer betreffen, die an einem Projekt arbeiten, sei es im Team zur gleichen Zeit oder mit 20 Jahren Abstand in einer Projektnachfolge, als auch denselben Programmierer, der sich seinen eigenen Code mit 2 Jahren Abstand noch einmal ansieht.

Die Grammatik der Programmiersprachen

Programmiersprachen ähneln menschlichen Sprachen in bestimmten Aspekten. Es gibt eine Grammatik, die einen syntaktischen und einen semantischen Teil hat, und es gibt Vokabeln, in Form von Standardbibliotheken. Programmiersprachen können sehr verschieden in ihrer Ausdrucksmächtigkeit sein, dasselbe Programm kann in einer Sprache sehr kurz, in einer anderen sehr lang sein. Ich empfehle 99-bottles-of-beer.net, auf dieser Seite wird dasselbe Programm (es gibt einen Liedtext aus) in vielen verschiedenen Sprachen gezeigt.

Guter Code – schlechter Code

Es gibt leider sehr viel schlechten Code, der den Kommunikationsaspekt mißachtet. Das büßt der Programmierer früher oder später mit Bugs und Wartungsproblemen, und auch die Nutzer müssen darunter leiden. Wie sieht nun guter Code aus?

“berechne_zylinder_gewicht” oder “nowdoit”

Es beginnt damit, die richtigen Worte zu finden. Variablen und Funktionen, also die Dinge, und das was man mit ihnen tun kann in einer Programmiersprache, haben Namen. Den richtigen Namen zu wählen hilft dem Leser ungemein, den Code nachvollziehen zu können. Nehmen wir als Beispiel eine Funktion, die das Gewicht eines Metallzylinders berechnet. Wenn die Variablen “i”, “j” und “k” heißen, habe ich wesentlich größere Probleme, herauszufinden, ob das, was ich da lese, so stimmt, als hießen sie “laenge”, “durchmesser” und “dichte”. Und ich kann auch viel leichter nachvollziehen, was die Funktion tut, wenn sie “berechne_zylinder_gewicht” heisst, und nicht “nowdoit”.

Versmaß und Reimschema

Die Wahl der richtigen Worte ist die erste Parallele zur Dichtkunst, aber nicht die einzige. Es geht weiter mit den strukturellen Anforderungen, die sich aus dem Programm ergeben: man schreibt ja nach wie vor nieder, was der Rechner tun soll. Das ähnelt in gewisser Weise dem Versuch, etwas in einem bestimmten Versmaß und einem bestimmten Reimschema zu sagen: man muss eine gewisse Form wahren. Ähnliche Anforderungen ergeben sich aus der Grammatik der Programmiersprache, die ja formal und damit sehr viel strenger als die Grammatik einer natürlichen Sprache ist.

Spaghetticode

Und schließlich erfordert Code auch eine Form der Dramaturgie. Diese ist bei Code im Gegensatz zu den üblichen Formen der Literatur nicht sequenziell. Um nun dem Gedankengang des Programmierers folgen zu können, ist es notwendig, dass das gesamte Stück so in Szenen zergliedert ist, dass diese möglichst aus sich heraus verständlich sind, und der Leser sich daraus ein Gesamtbild erstellen kann. Schlechter Code – als Spaghetticode beschimpft – entspricht einem wildgewordenen Cut-up-Experiment, es wird unmöglich, der Storyline zu folgen.

Wirklich guter Code ist etwas, was man sich auch ausdrucken und an die Wand hängen würde.

Die Natur des Programmierens

Als vertiefende Lektüre kann ich noch „The Programmers Stone“ empfehlen, einen Text über die Natur des Programmierens, der auch auf den diskutierten Aspekt eingeht. Insbesondere Kapitel 2, Abschnitt „The Quality Plateau“ ist sehr aufschlußreich. Das dort gezeigte Code-Beispiel wird rein funktional nie verändert, alle Änderungen sind rein für den Leser.

Ich hoffe, ich konnte weiterhelfen, und verbleibe

mit freundlichen Grüßen,
Andreas Bogk

Ja, das hat er. Finden Sie nicht auch?

Werner Schuster


Weiterführende Infos:

(*) Christian Morgenstern: „Fisches Nachtgesang“