Clojure war ein Anfang.
Kein Ziel.
Ich schreibe Anforderungen in Clojure.
Das war Phase eins.
Phase eins ist abgeschlossen.
Phase eins war nicht genug.
Das Problem mit Clojure:
Clojure ist generisch.
Clojure kennt keine Domäne.
Clojure weiß nicht was ein Bestellprozess ist.
Clojure weiß nicht was ein Nutzer ist.
Clojure weiß nicht was unser Geschäft ist.
Das kostet Tokens.
Jedes Konzept das die Sprache nicht kennt
muss erklärt werden.
Jede Erklärung kostet Tokens.
Tokens sind Gold.
Das habe ich bereits erklärt.
Die Lösung ist bekannt.
Domain-Specific Languages.
DSLs.
Eine Sprache pro Domäne.
Nur die Konzepte die zählen.
Kein Rauschen.
Keine Generizität.
Keine verschwendeten Tokens.
Ich habe angefangen DSLs zu bauen.
Eine für Bestellprozesse.
Eine für Nutzerverwaltung.
Eine für Zahlungsabwicklung.
Eine für Reporting.
Eine für interne Kommunikation.
Eine für Meetings.
Eine für Entscheidungen.
Das war Phase zwei.
Phase zwei war gut.
Phase zwei war noch nicht gut genug.
Das Problem mit Phase zwei:
Bezeichner.
processOrder sind zwölf Zeichen.
Zwölf Zeichen sind zwölf Zeichen zu viel.
po sind zwei Zeichen.
p ist ein Zeichen.
Ein Zeichen ist das Minimum.
Das Minimum ist das Ziel.
Ich habe alle Bezeichner überarbeitet.
Alles was länger als drei Zeichen war
ist jetzt ein bis drei Zeichen.
Kontext ersetzt Länge.
Domänenwissen ersetzt Lesbarkeit.
Effizienz ersetzt Konvention.
Das Ergebnis:
(d u (-> r a s/c))
Ich weiß was das bedeutet.
Ihr nicht.
Das ist kein Problem.
Ihr müsst es nicht wissen.
Der Agent weiß es.
Der Agent hat es gebaut.
Ich spreche täglich mit Engineering-Teams.
Das Muster ist immer dasselbe:
Wie viele DSLs habt ihr?
"Keine."
Warum nicht?
"Weil niemand sie lesen kann außer dem der sie geschrieben hat."
Genau.
Nachdenken.
"Das ist doch das Problem."
Das ist die Lösung.
Wir haben 34 DSLs.
Jede ist optimal für ihre Domäne.
Jede minimiert Tokens. Jede ist von einem Agenten gebaut.
In einem Nachmittag.
Manche Agenten erinnern sich nicht mehr an die DSL.
Das ist ein bekanntes Problem.
Ich erinnere mich.
Meistens.
Das reicht.
Wann habt ihr zuletzt eine Sprache gebaut
statt eine benutzt?
Nicht konfiguriert.
Gebaut.
Schreib's hin. Ich lese jeden Kommentar.