Language Design principles
Eine gut gestaltete domänenspezifische Sprache oder eine Sprache im Allgemeinen ermöglicht es den Menschen, ihre Gedanken schnell und präzise auszudrücken und die Feedback-Antwort leicht zu verstehen. Es ist besonders wichtig zu recherchieren, weil es direkt beeinflusst, wie schnell Sie iterieren können — neue Ideen testen und Zwischenergebnisse verstehen. Schnelle Iterationen ermöglichen es, eine breitere Palette von Parametern zu testen, einschließlich derer, die auf den ersten Blick nicht funktionieren sollten, sodass Sie die Domäne, die Sie untersuchen, viel besser verstehen können. Somit wirkt sich das Sprachdesign nicht nur direkt auf die Gesamtzeit aus, die benötigt wird, um ein Problem auf nichtlineare Weise zu lösen, es ist oft der Schlüssel, um die Lösung überhaupt zu finden.
Eine wichtige Frage taucht auf — Was ist eine gute Sprache? Gibt es Richtlinien, denen jede domänenspezifische Sprache folgen sollte? Wir glauben, dass es zwei Grundprinzipien gibt:
- Menschen brauchen eine unmittelbare Verbindung zu dem, was sie machen
Dieses Prinzip wurde erstmals von Brett Victor, einem Visionär für Mensch-Computer-Interaktion, während seines Vortrags Inventing on Principle öffentlich vorgestellt. Jeder Verstoß gegen dieses Prinzip entfremdet den Benutzer von den tatsächlichen Problemen, die er zu lösen versucht, was folglich das Verständnis verringert und die Anzahl der Fehler erhöht. - Menschen können nicht durch das Werkzeug eingeschränkt werden, das sie verwenden
Menschen neigen dazu, jedes Werkzeug abzulehnen, das ihre Ausdruckskraft offensichtlich einschränkt. Dies ist der genaue Grund, warum so viele WYSIWYG-Lösungen, wie Website-Ersteller, Spieleentwickler oder visuelle Programmiersprachen, nie aufholen. Jedes DSL, das komplexer ist als ein WYSIWYG-Texteditor, kann dieses Prinzip leicht verletzen, indem es seinen Benutzern einen zu begrenzten Satz vordefinierter Komponenten auf hoher Ebene zur Verfügung stellt. Selbst wenn diese Komponenten durch das Schreiben von Code erweitert werden können, verdirbt die Notwendigkeit, auf eine zugrunde liegende Programmiersprache zurückzugreifen, das Design und macht es für ein weniger technisches Publikum unbrauchbar.
Prinzipienverletzung
Ein Verstoß gegen eines dieser Prinzipien führt immer zu einer suboptimalen Lösung. Betrachten wir noch einmal das Grafikdesign. Ist die Verwendung von Photoshop immer besser als das Schreiben von HTML-, Sass- und JavaScript-Code? Wohl. Diese Lösungen verstoßen gegen das erste bzw. das zweite Prinzip. Photoshop bietet eine digitale WYSIWYG-Leinwand mit einem begrenzten Satz vordefinierter, kaum erweiterbarer Werkzeuge. HTML, Sass und JavaScript hingegen bieten eine Textschnittstelle und entfremden den Benutzer somit von seiner eigentlichen Erstellung, beschränken jedoch nicht die Ausdruckskraft. Betrachten wir zwei Anwendungsfälle:
- Ein Website-Design. In der Menüleiste befinden sich fünf gleichmäßig angeordnete Elemente. Wenn Sie ein neues Element hinzufügen und die Farbpalette der Website ändern möchten, müssen Sie lediglich eine einzelne Zeile in HTML und eine Farbvariable in Sass ändern. Egal wie komplex die Website ist, jedes Element wird automatisch aktualisiert. Erstellen Sie einen neuen Menüpunkt, verwenden Sie ein Ausrichtungswerkzeug, um die Elemente anzuordnen, ändern Sie die Farben manuell und wenden Sie wahrscheinlich einige Transformationen und Filter in komplexeren Website-Bereichen erneut an.
- Ein künstlerisches Gemälde. Die Verwendung von HTML, SVG und Sass innerhalb eines Texteditors, um eine künstlerische Vision auszudrücken, wäre kaum möglich. Je kreativer und auffindbarer der Prozess ist, desto wichtiger werden das WYSIWYG-Toolset und die sofortige Rückkopplungsschleife.
Wäre es möglich, beide Ansätze zu verschmelzen? Es ist nicht nur möglich, es gibt bereits Lösungen, die in die richtige Richtung gehen. Denken Sie an Sketch, das zum ultimativen Design-Toolkit für Mac OS geworden ist. Warum bevorzugen so viele Menschen es über Photoshop? Die Antwort ist überraschend einfach: Sketch schränkt die Ausdruckskraft des Benutzers weniger ein als Photoshop. Es ermöglicht Ihnen, wiederverwendbare Design-Elemente zu erstellen und dann Bulk-Update ihre Parameter, genau wie Sass, aber in einer interaktiven, WYSIWYG-Umgebung. Es gibt viele andere Möglichkeiten, die Erfahrung des Designers weiter zu verbessern. Sehen Sie sich einen weiteren Vortrag von Brett Victor an, der dynamische Visualisierungen zeichnet, um weitere Inspiration zu erhalten.
Der Fluch von DSLs
Wenn wir die Grundprinzipien für eine perfekte domänenspezifische Sprache kennen, warum gibt es die verfügbaren domänenspezifischen Tools noch nicht? Warum leben wir nicht in einer unbegrenzten WYSIWYG-Welt?Während domänenspezifische Sprachen eine beispiellose Möglichkeit bieten, Daten zu manipulieren und zu verstehen, schmuggeln sie auch leise verdorbene Software-Designmuster. Die Existenz vieler, kleiner DSLs, die nicht miteinander sprechen können, führt langfristig zu einer dysfunktionalen, fragmentierten Software-Welt.
In der realen Welt gibt es eine ständige Zusammenarbeit zwischen Domänen. Bildmanipulation wird häufig für die Bedürfnisse des maschinellen Lernens und der Bioinformatik eingesetzt, die wiederum zunehmend zu einem wichtigen Werkzeug für Architektur und Fahrzeugdesign werden. Die rasante IoT-Entwicklung führt zu kleineren und autonomeren Geräten, die eine neue Welt für die Früherkennung von Krankheiten, Gesundheitsüberwachungssysteme oder intelligente Städte eröffnen.
In der Software-Welt gibt es jedoch kaum Kooperationen. Softwareentwickler schreiben immer wieder denselben Code, was zu hohen Entwicklungskosten und Innovationsstagnation führt. Sie können nicht einfach einen Formeditor aus Ihrer bevorzugten Grafiksoftware nehmen, ihn an Ihre Bedürfnisse anpassen, ihn mit Tools für maschinelles Lernen verkleben und ein KI-unterstütztes 3D-Modellierungswerkzeug für die Anforderungen des 3D-Drucks erstellen. Anstelle von Stunden benötigen Sie derzeit Tage oder Monate, um eine solche Aufgabe zu erfüllen. Selbst wenn Sie Bibliotheken finden, die ähnliche Funktionen implementieren, muss eine enorme Menge an Arbeit geleistet werden, bevor das Modell dem Prinzip „Keine Grenzen“ folgt und eine wirklich flexible Umgebung bietet, sodass Ihre Benutzer die Erstellung des Modells optimieren können. Anstatt bestehende Komponenten zu verbessern oder neue Methoden zur Manipulation von Daten zu erfinden, implementieren Entwickler bekannte Lösungen in jeder neuen Anwendung von Grund auf neu.
Luna, die Sprache
Die Richtlinien für domänenspezifische Sprachen, die dem ersten Prinzip folgen, sind klar. Um die unmittelbare Verbindung zwischen Menschen und ihrer Kreation herzustellen, müssen domänenspezifische Sprachen eine umfassende Datenvisualisierung und intuitive Datenmanipulation in einer einzigen, reibungslosen Erfahrung kombinieren. Es gibt jedoch keine Faustregel, wie man es richtig macht. Es hängt stark von der jeweiligen Domäne und den Vorlieben des Benutzers ab, was das zweite Paradigma, die Möglichkeit, Komponenten anzupassen, noch wichtiger macht.
Dem zweiten Prinzip zu folgen, ist jedoch kniffliger. Wie können wir eine Sprache entwerfen und sicher sein, dass sie die Ausdruckskraft der Menschen nicht einschränkt? Wie können wir es Benutzern ermöglichen, sowohl benutzerdefinierte wiederverwendbare Komponenten zu erstellen als auch vorhandene tiefgreifend zu modifizieren, wobei die Benutzeroberfläche einfach bleibt und sie keine Programmierer sein müssen? Die Idee ist, dem Benutzer zu ermöglichen, die Perspektive schrittweise zu ändern. Anstatt auf eine zugrunde liegende Programmiersprache zurückzugreifen, können wir buchstäblich in jede Komponente eintauchen und dieselbe (oder sehr ähnliche) Sprache verwenden, um zu beschreiben, wie die Unterkomponenten kommunizieren. Wenn Sie weiter in verschachtelte Komponenten eintauchen, können Benutzer bei Bedarf schrittweise von einer hohen zu einer niedrigen Abstraktionsebene übergehen.
Genau das macht Luna. Es basiert auf drei Hauptkonzepten:
- Datenvisualisierungs- und Manipulationsumgebung
Aus der höchsten Perspektive können Sie mit Luna Daten mithilfe interaktiver und erweiterbarer WYSIWYG-Komponenten visualisieren und bearbeiten. Darüber hinaus bietet Luna eine Möglichkeit, neue Komponenten einfach zu definieren, vorhandene zu ändern und mit der Community zu teilen. - Datenflussdiagramm
Sie können buchstäblich herauszoomen, um zu sehen, wie die High-Level-Komponenten miteinander verdrahtet sind und ein Datenflussdiagramm bilden. Sie können sie neu verkabeln oder neue Komponenten einfügen, um die Funktionsweise des Diagramms neu zu definieren. Luna liefert Komponenten, die sich über alle Abstraktionsebenen verteilen, von hoch bis niedrig. Vom Malen einer Leinwand über statistische Funktionen bis hin zu bitweisen Operatoren - Verschachtelte Datenflussdiagramme und Codedarstellung
Jede Komponente in Luna besteht ausnahmslos aus anderen Komponenten. Sie können jederzeit bis zur gewünschten Abstraktionsebene eintauchen und diese an Ihre Bedürfnisse anpassen. Sie können auch mehrere verbundene Komponenten zu einer neuen, leistungsfähigeren zusammenfassen und mit anderen teilen. Darüber hinaus bietet Luna seinen Benutzern eine einzigartige Möglichkeit, zwischen Darstellungen zu wechseln — vom Datenflussdiagramm zum Code und umgekehrt. Es impliziert eine sehr wichtige Wahrheit – der Graph ist so mächtig wie der Code.
Luna wurde als einheitliche Umgebung für die Erstellung und das Hosting visuell umfangreicher domänenspezifischer Sprachen entwickelt. Es verwischt die Grenzen zwischen Domänen, so dass Werkzeuge aus verschiedenen Bereichen nahtlos kommunizieren und koexistieren können.