Freitag, 7. Juni 2013

Das Prinzip der minimalen intellektuellen Distanz

Name, Kurzform Prinzip der minimalen intellektuellen Distanz
Synonyme Lowering the Representational Gap,
Regel des direkten Mappings
Beschreibung
Die Abbildung eines realweltlichen Problems auf seine softwaretechnische Lösung soll eine minimale intellektuelle Distanz aufweisen.

Bertrand Meyer formuliert seine Direct Mapping-Regel wie folgt:
"Die modulare Struktur, die im Zuge der Konstruktion eines Software-Systems entworfen wurde, sollte mit der modularen Struktur, die bei der Modellierung der Problem-Domäne entworfen wurde, in Übereinstimmung bleiben." [Meyer1998]
Eine prägnante Formulierung, die auf Meyers Regel basiert, könnte wie folgt lauten:

Die Struktur der Software sollte der Struktur des Weltausschnitts, den die Software abbildet, so ähnlich wie möglich sein.
Erläuterung
Das ganze Ausmaß der hier gemeinten intellektuellen Distanz wird sehr anschaulich in folgendem Zitat von Edsger W. Dijkstra:
Von einem Bit bis zu mehreren Hundert Megabytes, von einer Mikrosekunde bis zu einer halben Stunde Rechenzeit spannt sich das verblüffende Zahlenverhältnis von 109 auf. Der Programmierer ist in der einzigartigen Lage, dass seine Disziplin die einzige ist, die eine so gigantische Spannweite aufweist (…) und durch eine einzige Technologie überbrückt werden muss. Er muss in der Lage sein, konzeptionelle Hierarchien zu durchdenken, die tiefer sind als dies ein einziger Verstand je nötig hatte.“ [Dijkstra1988]
Praktisch alle Autoren, die das Konzept oder Prinzip zitieren, gehen davon aus, dass der Leser eine intuitive Vorstellung davon hat, was hier mit „intellektueller Distanz“ gemeint ist. Bereits der erste auffindbare Literaturnachweis des Prinzips zeigt jedoch, dass dies keineswegs immer so klar ist:
Ein fundamentales Prinzip der Softwaretechnik ist es, Software so zu entwerfen, dass die intellektuelle Distanz zwischen Problem und Lösung so klein wie möglich wird; dabei ist allerdings die Vielfalt der Ansätze, Software zu entwickeln, lediglich durch die Kreativität und den Einfallsreichtum des Programmierers beschränkt. Es ist oft nicht klar, welcher Ansatz die intellektuelle Distanz minimiert, und oftmals reduzieren unterschiedliche Ansätze auch unterschiedliche Dimensionen der intellektuellen Distanz.“ [Fairley1985]
Beispiel(e
Zahlreiche Werkzeuge und Technologien dienen der Überbrückung der intellektuellen Distanz:
  • Durch die Objektorientierung wird u. a. eine Annäherung der Struktur von Software-Lösungen an realweltliche Situationen (interagierende Objekte usw.) angestrebt.
  • Der Einsatz von Generatoren in der Software-Entwicklung dient oftmals der Überbrückung intellektueller Distanz: Die Modellierung soll auf möglichst hoher Abstraktionsebene erfolgen, um dem mentalen Modell der realen Situation noch möglichst ähnlich zu sein.
  • Die Einführung von Compilern bedeutete einen wesentlichen Fortschritt in der Geschichte der Softwaretechnik. Dieser Fortschritt basiert wesentlich auf der Verkürzung der intellektuellen Distanz zwischen Mensch und Maschine.
Historie
  • Viele Autoren beziehen sich auf Edsger W. Dijkstra als Urheber des Konzepts der intellektuellen Distanz. Keiner dieser Autoren gibt jedoch eine konkrete Publikation an, in welcher Dijkstra das Konzept darlegt, so dass diese die Hypothese von Dijkstras Urheberschaft als ungesichert gelten muss. Klar ist, dass sich Dijkstra ausführlich mit dem Thema der intellektuellen Handhabe von Software auseinandergesetzt hat. Bereits sein berühmter Artikel „The Humble Programmer“ [Dijkstra1972], heute ein Zeitdokument der sogenannten Softwarekrise, geht ausführlich auf „intellecutal managability“ von Software ein.
  • [Fairley1985] ist die erste bislang von mir auffindbare Veröffentlichung, die den Begriff der intellektuellen Distanz einführt und auch ausführlich erläutert.
  • Alan M. Davis nimmt das Prinzip unter der Überschrift „Minimize Intellectual Distance“ in seinen Artikel „ Fifteen Principles of Software Engineering“ [Davis1994] und ein Jahr später in seine Sammlung von 201 Prinzipien [Davis1995] auf.
  • Craig Larman beschreibt unter der Überschrift „Lowering the Representational Gap“ (LRG) einen vollständigen Abschnitt in seinem Buch [Larman2002]. Er bezieht sich dabei allerdings primär auf die Distanz zwischen Domänen-Modell und Software-Entwurf.
  • Unter dem Stichwort „Domain-Driven Design“ (DDD) hat sich beginnend mit [Evans2003] eine Strömung etabliert, die letztlich eine systematische Reduktion intellektueller Distanz zum Ziel hat.
Art des Prinzips
  • Grundlegende Einteilung: Produktprinzip.
  • Technologiebezug: Allgemeingültig.
  • Entwurfsgüte: Allgemein.
  • Handlungsbezug: Anwendung, Änderung, Überprüfung, Wiederverwendung, Verstehen.
  • Kognitionsbezug: Konsistenz.
(Siehe Kategorisierung der Prinzipien.)
Grad der formalen Spezifikation Keine formale Spezifikation.
Vorteile
  • Weiter Anwendungsbereich.
Nachteile
  • Informelles Prinzip, daher viel Spielraum für Interpretationen.
Übergeordnete Prinzipien -
Abgleitete Prinzipien -
Qualitätsmerkmale
(+) Verständlichkeit, (+) Wartbarkeit, (+) Änderbarkeit,
(+) Wiederverwendbarkeit

Quellen
[Davis1994] - Fifteen Principles of Software Engineering, Alan M. Davis (1994)
[Davis1995] - 201 Principles of Software Development, Alan M. Davis (1995)
[Dijkstra1972] - The Humble Programmer, Dijkstra, W. E. (1972)
[Dijkstra1988] - On the Cruelty of Really Teaching Computer Science, Dijkstra, W. E. (1988)
[Evans2003] - Domain-Driven Design. Tacking Complexity in the Heart of Software, Evans, E. (2003)
[Fairley1985] - Software Engineering Concepts, Fairley, R. E. (1985)
[Larman2002] - Applying UML and Patterns, Second Edition, frei verfügbar unter http://www.cs.bgu.ac.il/~oosd051/uploads/stuff/ApplyingUMLandPatterns.pdf, Larman, C. (2002)
[Meyer1998] - Objekt-oriented Software Construction 2nd Edition, Bertrand Meyer (1998)