Single Level of Abstraction

Im Journalismus spricht man von einer umgekehrten Pyramide, wenn eine Nachricht mit den wichtigsten Informationen beginnt, und dann im Leseverlauf immer mehr Details erscheinen. Die Idee dabei ist, dass der Leser auch dann halbwegs gut informiert sein soll, wenn er das Lesen in der Mitte eines Artikels abbricht, weil eben die wichtigsten Informationen schon am Anfang standen.

Zeitungsartikel sind traditionell ebenfalls so aufgebaut, oder zumindest waren sie das früher mal, bevor Artikel zu reinen Online-Clickbaits wurden.

Was würde es denn für Programmcode bedeuten, wenn wir auch hier versuchen, das Prinzip der umgekehrten Pyramide anzuwenden? Zuerst würden wir vermutlich öffentliche Methoden schreiben, weil diese allein aufgrund ihres Namens ja schon eine Aussage darüber machen, welches Verhalten ein Objekt hat. Wie dieses Verhalten nun erreicht wird, interessiert uns vielleicht gar nicht? Es ist ja eines der zentralen Versprechen von OOP, dass man nur die Schnittstelle eines Objektes kennen und verstehen muss, ohne sich mit dessen Implementierung auseinanderzusetzen.

Wenn wir uns beim Lesen einer Klasse nur die öffentlichen Methoden ansehen und dann aufhören zu lesen, sollten wir nach dem Prinzip der umgekehrten Pyramide die wesentlichen Informationen erhalten haben. Es scheint, als ob Journalismus und Programmierung ganz gut zusammenpassen - zumindest unter diesem Aspekt.

Was ist überhaupt eine Abstraktion?

In der Programmierung sprechen wir gerne von Abstraktion, das ist ja auch eines der grundlegenden OOP-Prinzipien. Abstraktion bedeutet, komplexe Informationen auf ihre wesentlichen Eigenschaften zu reduzieren. Wenn wir Quellcode als umgekehrte Pyramide schreiben wollen, müssen wir also verschiedene Abstraktionsebenen unterscheiden und nach diesen sortieren.

Das ist anfangs eher ungewohnt, es lohnt sich aber, sich damit zu beschäftigen, weil es einen nicht nur viel schneller beim Lesen und Verstehen von Code macht, sondern auch dazu führt, dass wir selbst besser lesbaren und damit besser wartbaren Code schreiben.

Das "Single Level of Abstraction"-Prinzip fordert, in einer Methode immer nur ein einziges Abstraktionslevel zu haben. Wenn wir solche Methoden dann noch sinnvoll sortieren, sind wir schon fast zu perfekten Journalisten geworden.

Journalismus und Software-Entwickler

Journalisten und Software-Entwickler haben deutlich mehr gemeinsam, als man auf den ersten Blick glauben möchte. Beide schreiben Texte, die für den Leser möglichst einfach verständlich sein sollen. Wo ein Journalist Quellen recherchieren und analysieren muss, um glaubwürdig bei der Wahrheit zu bleiben, muss sich auch der Entwickler davon überzeugen, dass seine Quellen zuverlässig sind und die verwendete Software (nur) das tut, was sie soll.

Und wer dem Journalisten die Frage stellt, was denn überhaupt "die" Wahrheit ist, der darf gerne auch den Software-Entwickler fragen, was denn überhaupt das erwünschte Verhalten der Software ist. In beiden Berufszweigen werden die Antworten auf solche Fragen komplizierter, je umfangreicher und damit realistischer die Problemstellung ist. Wann haben wir es schon mit 2 + 2 = 4 zu tun?

Jetzt aber genug der Theorie. Gehen wir mal journalistisch an ein Codebeispiel heran.