Interview mit Ralf Westphal
Interview mit Ralf Westphal
Objektorientierte Programmierung ist Mainstream. Doch was genau versteht man darunter eigentlich? Was ist in Sprachen wie C++, Java, C# von der ursprünglichen Idee \"Die Welt besteht aus Objekten, also sollte Software auch aus Objekten bestehen\" übrig geblieben? Nicht viel, meint BASTA!-Sprecher Ralf Westphal. Im Interview führt er uns zurück zu den Ursprüngen der Objektorientierung und präsentiert seinen Ansatz einer neuen, radikalen OO-Programmierung.
Wer Ralf Westphal einmal live erleben möchte, hat auf der BASTA! 2019 Gelegenheit dazu. In seiner Session Radikale Objektorientierung hebt er die ursprüngliche Vision des Begriffs ins Bewusstsein, um von dort aus eine einfache und zeitgemäße, aber zuweilen auch radikal andere Objektorientierung zu entwickeln.
Entwickler: „Objektorientierung verdient eine kritische Auseinandersetzung“, sagst du in deiner BASTA!-Session Radikale Objektorientierung. Warum siehst du gerade jetzt die Zeit dafür gekommen?
Ralf Westphal: Nach knapp 30 Jahren Mainstream sollte jede Technologie unter die Lupe genommen werden. Die Objektorientierung macht da keine Ausnahme. Es ist also höchste Zeit.
Objektorientierung „einfach so“ hat noch nie gut funktioniert.
Nicht, dass es nicht immer schon kritische Stimmen gegeben hätte. Da waren die Diskussionen um die Mehrfachvererbung, dann die Entwurfsmuster Mitte der 1990er inklusive der daraus erwachsenen Architekturmuster wie zuletzt die Clean Architecture. Oder seit Anfang der 2000er die Prinzipien mit SOLID allen voran. Objektorientierung (OO) „einfach so“ hat noch nie gut funktioniert.
Das habe ich 1990/91 am eigenen Leibe sofort gespürt, als ich den ersten Kontakt mit C++ hatte. Die Verheißungen waren groß – doch irgendwie war es ganz und gar nicht leicht, die auch zu realisieren. Ich war sehr frustriert und habe der damals einzig „richtigen“ OO-Sprache C++ auch schnell den Rücken gekehrt, als VB auf dem Markt war. Da war Klarheit, da war Objektorientierung, aber ohne Ballast. Mit VB schon ab Version 1.0 konnten wir sehr pragmatisch Ideen evaluieren und Produkte entwickeln.
Entwickler: Waren die Ideen hinter der OO den Entwicklen damals zu wenig bewusst?
Ralf Westphal: OO bot gewisse konzeptionelle Features – doch ohne weitere Anleitung waren die im besten Fall wie scharfe Messer und im schlechtesten einfach nur rätselhaft.
Aus heutiger Sicht würde ich die Situation als chaotisch bezeichnen. Es waren keine Wege, keine Leitlinien erkennbar. Es fehlte eine Methode. Die Einfachheit, die im Versprechen der OO-Metapher „Die Welt besteht aus Objekten, also sollte Software auch aus Objekten bestehen“ mitschwang, konnte nicht realisiert werden.
Aus heutiger Sicht ist mir das völlig plausibel. Aber damals habe ich das nicht erkannt und konnte es wahrscheinlich auch nicht. Solche Erkenntnis muss sich persönlich und in der Community erst herausbilden. Wir waren quasi mit einer außerirdischen Technologie beschenkt worden, die wir begreifen lernen mussten.
Entwickler: Dann gab es ja Ansätze wie Objektorientierte Analyse (OOA) oder auch UML. Gaben diese nicht doch gewisse Leitlinien vor?
Ralf Westphal: OOA und OOD und UML und auch ODBMS haben versucht zu helfen. Wieder sehr nachvollziehbare Ideen – doch ODBMS als Persistenzparadigma hat sich eben nicht durchgesetzt, trotz Anfangserfolgen, und die Methoden ebenfalls nicht. Höchstens knapp 10% der Entwickler benutzen UML – und auch nur irgendwie. Es gibt keine OO-Methode mehr. Meine Vermutung: Die methodischen Ansätze waren zu wenig pragmatisch, zu wenig konkret. Sie haben dem nicht akademischen Entwickler, also der Majorität, nicht schnell genug einen Dienst erweisen können.
Das alles in Summe verlangt danach, OO grundlegend zu hinterfragen. Hinzu kommt, dass sich OO schwer tut mir der zentralen hardwaretechnologischen Entwicklungen der letzten 20 Jahre: massive Verteilung von Speicher und Prozessorleistung.
Aber ich will OO auch kein Unrecht tun. Denn eigentlich muss ich immer genauer sagen: mainstream OO (mOO). Denn was OO „an sich“ ist, sollte ja gerade diskutiert und neu eingeordnet werden. mOO ist für mich das, was „langläufig“ vor allem mit C++ und Java und C# gemacht wird.
Entwickler: Dann besinnen wir uns doch einmal zurück: Aus welcher Motivation heraus ist die Objektorientierung eigentlich entstanden?
OO ist vor 30 Jahren mit einer anderen Motivation zum Mainstream geworden, als ursprünglich intendiert.
Ralf Westphal: Mit dieser Frage beginnt schon das Problem von mOO. OO ist vor 30 Jahren mit einer anderen Motivation zum Mainstream geworden, als ursprünglich intendiert. Das war im Grunde auch nicht anders zu erwarten. Anfang der 1990er war man nach einem Jahrzehnt der Konsolidierung/Standardisierung und massiven Verkleinerung von Computern so richtig in den Startlöchern für eine große Nachfrage. Der zentrale Engpass bestand in der Produktivität von Entwicklern und Teams. Deshalb haben es drei Technologien zu Bedeutung geschafft in den 1990ern: 1) RAD (Rapid Application Development) zunächst in Form von VB und Delphi mit ihren IDEs (und vorher einige 4GLs). 2) Agilität zunächst in Form von Scrum und XP. 3) Objektorientierung zunächst in Form von C++, Delphi und Java.
All die Technologien versprachen, die Produktivität massiv zu steigern. Mit OO sollte das vor allem durch Wiederverwendbarkeit geschehen. Darauf war die Kommunikation getrimmt. Dass dann Wiederverwendbarkeit besonders durch VB Entwicklern millionenfach geholfen hat, einer Sprache/Plattform, die lange belächelt wurde für ihre schwache Objektorientierung, ist eine Ironie der Geschichte. Das Geheimnis des Erfolges von VB war nicht OO, sondern die IDE mit dem visuellen Editor für GUIs und der Microsoft-Standard-VBX-Komponenten. Und der hatte nichts mit modernen OO-Sprachfeatures wie die von C++ oder Delphi zu tun, sondern konnte auch von C-Code bedient werden.
Lesen Sie auch: Objektorientierung – Manchmal gehts auch ohne
Wenn ich heute frage, wofür OO gut ist, dann ist die erste Antwort stets „Wiederverwendbarkeit“. Da schüttelt es mich. Nicht, weil die mit OO nicht zu erreichen wäre, sondern weil man sich nicht der Verantwortung bewusst ist, die mit Wiederverwendbarkeit einher geht. Auch diese Naivität ist aus meiner Sicht ein Symptom der OO-Euphorie der 1990er. Produktivität, Produktivität, Produktivität – darum ging es.
Doch der ursprüngliche Primärzweck der OO war nicht, die Produktivität zu steigern. Alan Kay, der den Begriff 1968 geprägt hat, sorgte sich vielmehr um ein ganz anderes Problem. Das hatte nämlich damals auch schon sein unschönes Haupt erhoben – zumindest für die, die es sehen wollten. Sprachen wie Pascal, Modula, Ada waren Versuche, es in den Griff zu bekommen. Und sprichwörtlich ist es mit dem Begriff des Spaghetticodes geworden.
Das Problem von damals war die Unverständlichkeit von Code und damit einhergehend die Unwandelbarkeit. Code wurde durch steigende Nachfrage umfangreicher und umfangreicher. Mit goto-Anweisungen konnte man den Anweisungen nur schwer Herr werden. Deshalb sah sich Dijkstra genötigt, seinem Frust über den Übelstand mit dem Paper „Go To Statement Considered Harmful“ Luft zu machen.
Das war nicht zufällig auch im Jahr 1968, denke ich. Das Thema „dirty code“ lag schon damals in der Luft. Doch es sollte noch 30 Jahre bis Ende der 1990er dauern, dass das dem Mainstream der Softwareentwicklung bewusst wurde. Fowlers „Refactoring“ und dann Martins „Clean Code“ sind keine akademischen Paper, sondern Äußerungen gefrusteter Pragmatiker.
Entwickler: In Sprachen wie C++, Java und C# ist Objektorientierung heute dennoch irgendwie im Mainstream angekommen. Was ist da aus der ursprünglichen Vision übrig geblieben?
Ralf Westphal: Ja, warum hat die Motivation Verständlichkeit, Wandelbarkeit, „Making code easier to reason about“ es nicht in den Mainstream geschafft? Alan Kay hat zu seiner Vision von Objektorientierung ja sogar eine Sprache geliefert: Smalltalk. Auch die ist nicht im Mainstream angekommen. Selbst Garbage Collection (GC), die schon in Smalltalk im Zusammenhang mit OO zum Einsatz gekommen ist, ist viel älter und vom Erfinder von LISP. GC hat also eine funktionale, keine objektorientierte Herkunft.
Eine krude Idee von Objekten ist dann schließlich von der ursprünglichen Idee übrig geblieben. Und auch die hat 20 Jahre gebraucht.
Entwickler: Warum hat das so lange gedauert?
Ralf Westphal: Ich vermute, schon in der abgespeckten Form waren Objekte erstens konzeptionell schwierig. Entwickler hatten ja schon Probleme mit Zeigern in C, so dass Übungsmaterial in Buchlänge geliefert werden musste, um Datenstrukturen jenseits von Records und Arrays halbwegs ordentlich zu implementieren. Mit Objekten wäre das zur Norm geworden. Plötzlich wäre der Code voll von Referenztypen gewesen. Lange Zeit eine gruselige Vorstellung, glaube ich.
Aber womöglich schlimmer war einfach der Mangel an Hardwareressourcen: Speicher und Prozessorleistung gaben es nicht her, ständig mit Objekten zu hantieren in wachsenden Anwendungen. Garbage Collection, ohne die OO keinen Spaß macht, finde ich, hat ja auch nochmal länger gebraucht, bis sie allgemein anerkannt war. Oder virtuelle Methoden: Ich erinnere mich an die Diskussionen darüber, wie unperformant die doch seien, ganz unbrauchbar für ernsthafte Anwendungen.
Die ursprüngliche Vision hatte einfach noch nicht ihre Zeit. Das, was Alan Kay als dringendes Problem gesehen hatte, war für die Masse der Entwickler noch viele Jahre nicht genauso dringend. Dringend war immer noch, Funktionalität und Effizienz überhaupt zu implementieren. Das war schwierig genug.
Der Kernbegriff der Objektorientierung ist Messaging.
Erst mehr aufgehäufter Code, erst mehr Entwickler in aller Welt mussten zusammenkommen, bis weithin gefühlt wurde, dass etwas im Argen lag mit der Wandelbarkeit. Intellektuell war das schon Ende der 1960er präsent – nur eben nicht „in den Fingerspitzen“ im Tagesgeschäft. Schon die Strukturierte Programmierung ist ja auf Widerstand gestoßen. Deren Thema war offensichtlich die Wandelbarkeit. Sie hat es aber relativ zeitnah geschafft, akzeptiert zu werden, weil sie konzeptionell nicht so herausfordernd war. Den Gewinn konnte jeder für sich schnell realisieren.
Entwickler: In deinem Talk entwickelst du eine radikal andere Objektorientierung – kannst du andeuten, wie eine solche aussehen könnte?
Ralf Westphal: Ich entwickle nicht neu, sondern mache zugänglich. Lange habe ich darüber nachgedacht, was Alan Kay gemeint haben könnte. Seinen Kernbegriff der Objektorientierung kannte ich und habe dessen Manifestation in der mOO immer wieder gesucht, aber ohne Erfolg. Dieser Kernbegriff ist Messaging. Alan Kay hat gesagt: „The big idea is messaging!“
Aber wer denkt an Messaging, wenn er an OO denkt? Wenn ich frage, was OO ausmacht, dann kommen alle möglichen Begriffe, aber Messaging ist fast nie darunter. Zwar steht der Begriff pflichtschuldig in den Beschreibungen zu OO – doch was bedeutet er? Wie drückt sich Messaging in C++ oder Java aus? Alan Kays Idee erschöpft sich darin, dass man Funktionen zu Records hinzufügen kann? Das kann es nicht gewesen sein.
Und dann habe ich das Bild genauer betrachtet, das Alan Kay gemalt hat. Objektorientierung basiert auf einer Analogie: Für ihn sollten Objekte so etwas wie biologische Zellen sein. Er hatte unter anderem Molekularbiologie studiert und war zeitweise auch Profimusiker. Mit dieser Bandbreite war er prädestiniert dafür, breiter und weiter zu sehen und zu denken als viele andere. Und so stelle ich mir vor, dass er sich gefragt hat, ob es nicht bessere Arten gibt, Software zu organisieren, als das, was damals üblich war. Wenn sein Gefühl war, dass mit Code sehr schnell sehr komplexe Dinge „gebaut“ werden können, die einem drohen, über den Kopf zu wachsen, dann hat er vielleicht überlegt, wo in der Natur schon Lösungen für solche Komplexität zu finden sein könnten. Da sind ihm dann nicht Moleküle eingefallen, weil die passiv sind, sondern Zellen als Kompositionen aus Molekülen, die aktiv sind. Warum also nicht Software ebenfalls so strukturieren wie Organismen, die nachweislich sehr groß und sehr komplex sein können?
Aus seiner Sicht war dann die chemische Kommunikation die zentrale Eigenschaft, die es ermöglicht, dass viele Zellen zusammen einen stabilen Organismus ergeben. Das passt dann wieder mehr zu seinem Abschluss in Molekularbiologie. Zellen kommunizieren über Moleküle, Objekte sollten über Nachrichten kommunizieren.
Das ist es, was ich in meinem Talk herausarbeiten will. So ist die ursprüngliche Objektorientierung zu verstehen. Radikal nenne ich sie, weil sie sehr (radikal) anders ist, als das, was heute im Schwange ist. Radikal aber auch, weil ich die Objektorientierung zurück zu ihrer Wurzel (radix) führen will. Darin liegt ein vergessener Schatz.
Die post-mainstream Objektorientierung ist also der ursprünglichen Analogie von Alan Kay näher. Sie dreht sich um Messaging – und das nicht nur auf Architekturebene, wo Events ja nichts Neues sind. Vielmehr beginnt Nachrichtenorientierung für mich im Kleinen. Wer die Code Kata „FizzBuzz“ löst, sollte dabei durch die Messaging-Brille blicken.
Entwickler: Derzeit scheint das Pendel ja eher wieder in Richtung Funktionale Programmierung umzuschlagen. Ist das aus deiner Sicht eine gute Entwicklung?
Ralf Westphal: Das sehe ich als gute Entwicklung. In der Funktionalen Programmierung steckt einiges, das der radikalen Objektorientierung (rOO) helfen kann. Deshalb fällt rOO – oder ich behaupte sogar allgemeiner Clean Code – mit modernen Varianten von Sprachen auch leichter. Funktionen als „first class citizens“ von Sprachen machen die Implementierung von Messaging konsequent möglich.
In der Funktionalen Programmierung steckt einiges, das der radikalen Objektorientierung helfen kann.
Allerdings plädiere ich nicht für einen Umstieg auf funktionale Sprachen. Man kann bei C#, C++, Java, Ruby bleiben und trotzdem rOO machen. Die mOO-Features haben aus meiner Sicht wert. Wenn Funktionale Programmierung keine Seiteneffekte mag, wo „Mutability“ gescheut wird, habe ich aus rOO-Sicht damit kein Problem. rOO sorgt vielmehr dafür, dass damit sinnig umgegangen wird.
Alles beginnt mit zwei Prinzipien, die ich in meinem Talk aus Alan Kays Vorstellung ableiten werde. Die sind mir viel wichtiger als SOLID und Vorstellungen von Objekten als realweltliche Dinge, die man doch nur in Code manifestieren muss. rOO benutzt weiterhin Klassen und Interfaces. Allerdings anders, ich würde sogar sagen systematischer als mOO.
Entwickler: Was ist die Kernbotschaft deines Talks, die jeder Teilnehmer mit nach Hause nehmen sollte?
Ralf Westphal: Objektorientierung ist hilfreich und kann von jedem Entwickler begriffen werden. An ihr ist nichts Magisches. Man muss kein höheres Bewusstsein entwickeln. Allerdings muss man offen sein dafür, dass sich die Erde um die Sonne dreht und nicht umgekehrt. Ja, für manche mag rOO quasi eine Kopernikanische Herausforderung ihres Programmierbildes sein. Denn aus Alan Kays Analogie folgt so einiges… Nur ein kleines Beispiel: Statische Methoden sind im Rahmen von rOO nicht zu scheuen. Sie sind legitime Mittel, um nachrichtenorientierte Codestrukturen zu bauen. Wer hätte das gedacht?
Für mich ist nichts mehr so, wie es mal war in der Programmierung, seitdem ich für mich die radikale Objektorientierung (wieder)entdeckt habe. Plötzlich ist Programmieren sehr viel einfacher geworden. Rätsel, die ich früher noch nicht geknackt hatte, haben sich in Luft ausgelöst. Es ging nicht mehr um diese oder jene Lösung – nein, das Rätsel war verschwunden.
Dieses Gefühl der Erleichterung möchte ich vermitteln. In einem Vortrag ist das kaum möglich, aber ich werde mich anstrengen, zumindest eine erste Idee davon rüberzubringen.
Entwickler: Vielen Dank für dieses spannende Gespräch!