Wie typfrei ist die Welt?


In einem Kommentar zu meinem gestrigen Post “Refactoring und der Aberglaube” schreibt Thomas Holzer einen Satz, der mich zum Nachdenken gebracht hat:

Denn die reale Welt (Und jedes Programm bildet immer Teile der realen Welt nach) ist auch typenlos.

Zuerst dachte ich mir, ganz so sei die Welt ja nicht. Schliesslich kann ich es an meinen Kindern sehr gut beobachten: wir nehmen die Welt wahr, indem wir sie kategorisieren, Dinge, Gefühle, Eindrücke in Schubladen stecken, Gemeinsamkeiten suchen und identifizieren. Eigentlich ist unser Bild der Welt doch sehr stark von Mustern, Schablonen und Klassifizierungen geprägt.
Irgendwie ist unsere Wahrnehung der Welt doch statisch typisiert. Ein Kirschbaum ist eine Pflanze und lässt sich ganz eindeutig in eine Klasse, Sorte, Art, Familie und was weiss ich noch für botanische Kategorien einsortieren. Dort gehört ein Kirschbaum unverrückbar hinein und hat klare Unterscheidungsmerkmale zu jedem anderen Ding auf der Welt.
Manchmal ist es aber wunderlich, wie man seine Zeit vor dem Einschlafen so nutzen kann. Anstatt über wirklich wichtiges nachzudenken, sinnierte ich dann doch ein wenig über das Thema. Und heute früh bin ich ein wenig anderer Ansicht.Thomas hat recht, wenn er sagt, ein System sei immer der Versuch, einen Auszug aus der realen Welt abzubilden. Und jedes Abbild ist immer das Ergebnis einer Wahrnehmung.  (Keine Angst, viel philosophischer wird der Post jetzt nicht mehr!).

Wer schonmal versucht hat, das Design einer Anwendung durch Interviews von Endanwendern zu erstellen, wird sehr gut verstehen, was ich meine. Ein Banker zum Beispiel mag seinen Job schon dreissig Jahre lang machen, aber er kann einem nicht auf verständlcieh Weise und vollständig beschreiben, wie er einen bestimmten Vorgang durchführt. Und wenn man ihn ein zweites Mal befragt, erzählt ere einem was anderes. Als IT’ler hat man dann die Freud, aus diesen Bruchstücken ein Abbild davon zu fertigen, was einem der Anwender da erzählt hat.

Nun, was will uns der Autor jetzt damit sagen?

Das Problem mit der Kategorisierung und Klassifizierung unserer Umwelt ist, dass das sehr individuell und assoziativ abläuft. Man klassifiziert seine Arbeitswelt wunderbar und hat alles in verschiedene Schubladen verpackt, und für einen bestimmten Ablauf in unserem Alltag sind plötzlich zwei Dinge gemeinsam von Nöten, die in ganz unterschiedlichen Schubladen liegen. Ganz plötzlich haben zwei Gegenstände eine Gemeinsamkeit,  die im üblichen Klassifizierungssystem gar nicht berücksichtig wurde.

Im Java-Jargon  würde ich das in etwa so formulieren: Wir stülpen ganz dynamisch mehreren Objekten ein gemeinsames Interface über, weil wir sie aktuell miteinander assoziieren.

Der Kirschbaum ist meiner Ansicht nach insofern eine Ausnahme, weil es sich hier um eine wissenschaftliche, durch scharfe Definitionen geprägte Klassifizierung handelt, nicht um die Welt unserer Wahrnehmung. Die meisten Eigenschaften, anhand derer ein Botaniker die Pflanzenwelt einteilt, hat mit unserem alltäglichen Umgang mit Kirschbäumen nicht allzu viel zu tun. Wenn ein Laie einen Kastanien- von einem Kirschbaum unterscheiden und seine Klassifizierungsmerkmale festhalten müsste, würde es einem Botaniker wahrscheinlich die Fussnägel kräuseln (wenn ich der Laie wäre, würde der Botaniker damit wahrscheinlich noch gut wegkommen😉 ), und vor allem würde er morgen vielleicht ganz andere Merkmale heranziehen, weil er am Nachmittag auf einem Spaziergang an einer Eiche vorbeikam, und durch die Kirschbaumgeschichte diese Eiche mit ganz anderen Augen angeschaut hat.

Genau hier sind wir auch schon weit genug vom Thema abgewichen, um eine der Grundproblematiken unserer Zunft anzukratzen: während die Informatik eigentlich eine exakte Wissenschaft ist, ist das sogenannte Software engineering himmelweit  davon entfernt und hat mit Ingenieurskunst eher wenig zu tun. Der Störfaktor Benutzer macht in der täglichen Praxis des Softwareentwicklers fast alles zunichte, was man sich so mühsam in der Informatik angeeignet hat. Unser menschliches, assoziatives Wahrnehmungsgebaren passt so gar nicht in die feinen, scharfen Trennlinien einer Wissenschaft, denn wir springen je nach Kontext zwischen Assoziationen und Ideen hin und her. Was gerade noch in einer Schublade lag, ist in der nächsten Situation einem ganz anderen Klassifizietungsmerkmal zugehörig.

Insofern ist unsere Welt nicht Typenfrei, aber der Typ eines Gegenstands, Ablaufs oder Gefühls ist eine Frage der Situation, der persönlichen Historie, Gemütsverfassung oder sonstigen Begleitumständen. Manche dieser  Kategorien können vorab festgelegt werden, bleiben auch stabil und behalten ihre Gültigkeit. Andere sind flüchtig und werden nur temporärbenötigt.

Unsere Arbeitswelt ist, auch wenn man es häufig nicht wahrhaben will, geprägt von dynamischen Kategorisierungen. Die Arten, wie wir mit Gegenständen und Personen umgehen, sind kontextabhängig (wer kennt nicht das Modellierungsproblem der Person als Kunde, Mitarbeiter, Ehepartner etc. – und diverse, allesamt unzulänglichen Ansätzen zu dessen Lösung?).

Worauf will der Autor dieser wirren Abhandlung nun hinaus?

Unsere Welt ist nicht typfrei, aber dynamisch typisierbar und in der Praxis auch dynamisch typisiert.  Was unseren Job als Anwendungsentwickler spannend macht, ist die Tatsach, dass die klassischen Ansätze der Softwareentwicklung mit ihrer Annahme, dass man ein Problem nur lange genug zerlegen und analysieren muss, um eine vollständig definierte Lösungsmenge beschreiben zu können, dass daraus ein maschinen-ausführbares Programm eindeutig abgeleitet werden kann, an einem kleinen Detail scheitert: es ist uns im allgemeinen nicht möglich, eine so exakte Beschreibung unserer Arbeit anzufertigen. Das fängt bei allen Vor- und und Nebenbedingungen für einen Schritt an, geht über die Vollständigkeit der Beschreibung eines Kontexts bei einer Tätigkeit weiter und hört bei der eindeutigen Zuordnung eines Dings zu einem Typ noch lange nicht auf.

Wer unsere Welt in einem System abbilden will, muss auf Dynamik vorbereitet sein, um der Realität ein Stückchen näher zu kommen. In einem fixen Typisierungssystem sind der Abbildung der Realität sehr enge Grenzen gesteckt, oder aber die Abbildung der Realität wird schnell komplex und zerbrechlich.

Da in einem Programm die Fähigkeiten eines Objektes eng mit dessen Typ verbunden sind, bietet eine dynamisch getypte Sprache mehr Flexibilität, um nachträgliche Erweiterungen zuzulassen, die mit der ursprünglichen  Typisierung eines Objektes nicht angedacht waren.

Zwar ist es auch in Java möglich, über Interfaces neue Eigenschaften eines Objektes zu beschreibe, aber es ist schwer, Methoden zu schreiben, die Eigenschaften verschiedener Interfaces benötigen, um mit einem Objekt umzugehen. In einem System, das durch späte Bindung und das völlige Fehlen starrer Typisierungsregeln charaketerisiert ist, ist es nicht notwendig Alles und Jedes in ein starres Korsett zu packen, nur um eine bestimmte Eigenschaft daran zu nutzen.

Mich würde interessieren, ob sich zu diesem Beitrag Diskussionsbeiträge finden….

[Update] Dazu habe ich noch ein hübsches Zitat von Alan Kay, einem der Väter von Smalltalk gefunden:

I’m not against types, but I don’t know of any type systems that aren’t a complete pain, so I still like dynamic typing.
– Alan Kay

5 thoughts on “Wie typfrei ist die Welt?

  1. Rob,

    my post surely was unscientific and uninformed enough to not make it look like me making up a new theory😉
    I just wanted to point out that many observations we make and things we try to communicate hardly fit into a scaffold like a static type system.
    I wanted to emphasize that I think a dynamic type system can make it easier to handle changes needed to keep up with expectations to a system. But still, both dynamic and static type systems are abstractions. And I think a static type system is the harder one to handle.

    Association makes things even more complicated than classification, because it hardly fits into a type system like we know or use them today at all. While I said that Association is an important factor of the way people think and communicate about how they see things and how they work, and that this makes converting a description into software hard, you are even more radical by saying that we don’t classify at all but only associate. Wouldn’t that mean that we need a completely different paradigm of programming in order to make systems work the way our users want them to? I am not saying this would be wrong…

  2. Classification theory is a wonderfully incoherent field of research. Many things can be said about it, recently I have been reading Wittgenstein, Bertrand Russell and others. But in general I object against the statement that people “naturally” classify. I think that what we, already as children, do, is create a mirror image in our minds of the thing we encounter. This mirror image then functions as a “magic attractor”, collecting numerous associations. It is impossible to “classify” this, but exactly as in object oriented models, this is not a class or subclass relationship, but an association. A complex of an attractor with its associations is what partly define our behaviour. So it is not classification what we are talking about, but association!

  3. Dominikus,

    ich nehme an, dass die “Klassenherrschaft” eine historische Sache ist, aber ich bin vielleicht nicht der Qualifizierteste, um zu sagen, ob es denn das Prinzip der Prototypen, wie sie etwa in JavaScript oder m.W. auch in Self existieren, in den siebzigern schon bekannt waren.

    Aber, ja, ich gebe Dir Recht: Wenn ein statisches Typsystem einen Ansatz erlaubt, der ausgehend von einem Prototypen die Erweiterung bestehender Objekte zulässt, kommt dabei auch die Flexibilität heraus, die die Abbildung einer realen Welt besser erlaubt. Meine Phantasie reicht allerdings nicht aus, mir sowas in einem statisch getypten Umfeld vorzustellen. Kennst Du eine Sprache, in der das geht?

    Ich persönlich hege aktuell noch ein wenig Skepsis gegenüber Instanzen-spezifischem Verhalten, weil ich hier Wartungsprobleme befürchte (vielleicht in erster Linie ein Bauchgefühl). Und genau da zielen Deine Überlegungen ja hin.

  4. Ich habe in jüngster Zeit eine andere Sicht darauf entwickelt: Typsysteme, ob dynamisch oder statisch, sehe ich nicht als so problematisch an. Mir schwant allmählich, dass die Problematik eigentlich eine andere ist: Basiert die Modellierung der “Welt” auf dem Prototypen- oder dem Klassenmodell? Prototypische Modellierung ist extrem flexibel. Klassen hingegen zeichnen Objekt-Strukturen vor. Alle Objekte müssen sich den Klassen unterwerfen, Abweichler werden nicht geduldet. Es fehlt die Flexibilität für die Ausnahme. Werden Klassen als Typen verstanden, dann ist es in der Tat ein Typproblem. Wundersam nur, dass Smalltalk — obwohl im Kern nur objekt-basiert — sich ausgerechnet der Disziplin der “Klassenherrschaft” ergeben hat.

    Herzlichen Gruß,

    Dominikus Herzberg

Comments are closed.