Aladdins Wunderlampe oder die sprichwörtliche gute Fee machen es dem Kunden einfach: Auch ungenau spezifizierte Wünsche werden ohne grosse Umstände sofort erfüllt (ein bisschen Theaterdonner gehört aber sicher dazu). Nun lernen bereits Kinder aus reichlich vorhandener Märchenliteratur die Tücken einer solchen Produktionsweise: Nicht immer erfüllt das durch Zauberhand Erschaffene die Erwartungen der Wünschenden und meist haben Wünsche gravierende Nebenwirkungen.
Eine gut lesbare Beschreibung der Eigenschaften, Vorteile und Herausforderungen deklarativer Progammierung findet sich in J. Lampe: „Ist deklarativ wirklich instruktiv?“, Informatik Aktuell, Mai 2014. Darin schreibt der Autor:
„Gemeinsam ist allen Definitionsansätzen, dass sie als wichtiges Kennzeichen die Beschreibung des Was anstelle des Wie hervorheben. Während ein prozedurales Programm den Weg beschreibt, auf dem das gewünschte Ziel (=Ergebnis) erreicht werden kann, ist ein deklaratives Programm die genaue Beschreibung (Spezifikation) eben dieses Ergebnisses. Die deklarative Sicht ist daher vorwiegend statisch und entspricht am ehesten der Verwendung von Blaupausen als Produktvorlage.
Wenn auf die Spezifizierung der Ausführung verzichtet wird, öffnet das Chancen für deren Optimierung. Im Idealfall kann der deklarative Code später einmal durch ein Verfahren ausgeführt werden, dass zum Zeitpunkt des Schreibens noch gar nicht bekannt war. Gern wird dabei auf die implizite Parallelisierung verwiesen. Doch wie im normalen Leben begegnet einem auch in der Programmierung der Idealfall höchst selten.
Für die weitere Diskussion soll als Beispiel für eine eher deklarativ geprägte Programmiersprache SQL benutzt werden. Ein anderer prominenter Kandidat für diese Rolle ist HTML. Als typischer Vertreter prozeduraler Sprachen dient Java.“
Die heutige Realität bietet dem Kunden in der Regel weit weniger als man selbst von der Sparvariante einer Wunderlampe erwarten würde. Eine mehr oder weniger breite Kollektion industriell produzierter Massenware wird angeboten, und die Kundin/der Kunde sucht sich dasjenige Produkt aus, welches ihr oder ihm am besten entspricht. Notgedrungen geht dies zu Lasten der Individualität; allerdings zeigen zum Beispiel Firmen in der Möbelindustrie, dass kluges Design es ermöglicht im industriellen Massstab Komponenten herzustellen, welche in einer personalisierte Art und Weise kombiniert werden können.
Die fortschreitende Digitalisierung und Flexibilisierung der Wertschöpfungskette erlaubt in absehbarer Zukunft die „massenhafte Produktion“[1] von individualisierten Produkten und ermöglicht es somit, noch weiter in Richtung einer personalisierten Produktion zu gehen. Die Kundin, der Kunde erhält die Möglichkeit, ihre/seine Bedürfnisse über die reine Auswahl aus einer Palette fertiger Produkte oder die freie Kombination standardisierter Basiskomponenten hinaus zu verwirklichen. Selbstverständlich war das bis dato auch möglich; kompetente Heimwerkerrinnen und Heimwerker wurden eigentlich nur durch die Gesetze der Physik eingeschränkt. Nun ist das mit der Kompetenz so eine Sache. Einige unter uns werden die Erfahrung der Autoren teilen, dass man zwar durchaus in der Lage sein kann, ziemlich genau anzugeben, was man braucht ohne allerdings genau zu wissen, wie man dies erreichen kann. Hier bietet ein Ansatz aus der Informatik, das Konzept der deklarativen Programmierung (vgl. Box), interessante Möglichkeiten dieses Potenzial umfassend auszuschöpfen. Der/dem Kundin/Kunden wird eine Plattform angeboten, die ihr/ihm es ermöglicht, das „Was“ der Wünsche bequem auszudrücken. Die Struktur der Plattform ist so gestaltet, dass nur solche „Was“ ausgedrückt werden können, für die der Produzent auch ein konkretes „Wie“ der Umsetzung zur Verfügung stellen kann.
Da Produkte im Wesentlichen durch CAD Modelle und daraus abgeleiteten Daten repräsentiert werden, besteht ein Bedürfnis nach Werkzeugen, die es Endbenutzern erlauben diese Modelle deklarativ auszudrücken. In Anlehnung an den Begriff der deklarativen Programmierung brauchen wir gewissermassen eine deklarative „Produktbeschriebungssprache“[2] und einen entsprechenden „Compiler“, der aus Beschreibungen 3d Objekte generieren kann. Entsprechende Ansätze werden in der CAD Industrie erforscht und teilweise auch bereits angeboten. Firmen wie Autodesk mit ihrem „Project Dreamcatcher“[3] oder Robert McNeel & Associates mit Grasshopper®[4] arbeiten an CAD Lösungen, die nicht ein blosses Werkzeug sind, sondern selbständig zu den Anforderungen des Benutzers passende Geometrien generiert. In weiteren Schritten werden dann teilweise von den vorgeschlagenen Lösungen einige Ansätze weiter verfolgt und genauer spezifiziert und modifiziert. Aus dieser Herangehensweise ergibt sich ein interaktiver Problemlösungsansatz (Dreamcatcher Workflow) in dem die Software dem Benutzer Möglichkeitenaufzeigt und ihn gewissermassen durch den „Design Raum“ geleitet.
Selbstverständlich sind wir auch mit Ansätzen der deklarativen Programmierung noch lange nicht in einem Schlaraffenland angekommen. Auf jeden Fall ist aber eine deklarative Produktebeschreibung ein weiterer Schritt zur Verbindung der Vorteile individualisierter Nachfrage und eines industriell produzierten Angebots.
[1] Wir verstehen hier den Term „massenhafte Produktion“ als die Produktion von vielen individuellen Erzeugnissen, im Gegensatz zur „Massenproduktion“ bei der die Herstellung vieler identischer Erzeugnisse gemeint ist.
[2] Eine Sprache ist hier im weitesten Sinn zu verstehen, es kann sich z.B. auch um grafische Repräsentationen handeln.
[3] https://autodeskresearch.com/projects/dreamcatcher
[4] http://www.grasshopper3d.com/
Abbildung 1. Der Dreamcatcher Workflow (https://autodeskresearch.com/projects/dreamcatcher)
Abbildung 2. Schematische Darstellung von 3d Geometrien in Grasshopper 3d.
Dandolo Flumini und Rudolf Füchslin
Spannende Ansätze für das Design. Gibt es hier eine Verbindung zu deduktiven Analysesystemen wie LogicBlox?