Ein Interview mit Markus Amshove zum Thema Domänenspezifische
Sprachen gibt es in der einhundersiebten Episode des
Anwendungsentwickler-Podcasts. TL;DR Mit meinem ehemaligen Azubi
Markus bespreche ich, wie du domänenspezifische Sprachen (DSLs) für
fachliche Aufgaben entwickelst. Sein IHK-Abschlussprojekt zeigt,
wie eine eigene Sprache Regeln für eingescannte Dokumente
verständlich abbildet und daraus C#-Code samt Unit Tests erzeugt.
Xtext übernimmt dabei viele technische Aufgaben und liefert einen
passenden Editor. Dazu kommen Erfahrungen mit Konferenzvorträgen
sowie Empfehlungen, wie du dich in DSLs und die Grundlagen von
Programmiersprachen einarbeitest. Kapitelmarken [00:00:01] Thema
und Anlass des Interviews [00:01:24] Markus und sein Weg in die IT
[00:03:49] Programmiersprachen im Beruf und privat [00:05:41]
Sprachmerkmale und Entwicklungsumgebungen [00:08:42] Was ist eine
domänenspezifische Sprache? [00:10:44] Domäne und Sprachumfang
festlegen [00:11:27] Zielgruppe und fachliche Begriffe [00:14:24]
Dokumente mit einer DSL zuweisen [00:17:07] Regeln verständlich und
nachvollziehbar gestalten [00:18:34] Eine DSL gemeinsam mit dem
Fachbereich entwerfen [00:20:44] Grammatik und Backus-Naur-Form
[00:23:05] Was Xtext aus der Grammatik erzeugt [00:24:34]
Editorfunktionen und Verweise zwischen Elementen [00:26:56] Code
mit Java und Xtend erzeugen [00:29:33] Einstieg und Erfahrungen
beim Lernen [00:32:27] Programmiersprachen besser verstehen
[00:34:15] Die DSL als IHK-Abschlussprojekt [00:35:36] Feedback der
Prüfer:innen und Projektdokumentation [00:36:36] Zeit sparen und
Unit Tests generieren [00:38:44] Parser und Codegenerator testen
[00:40:14] Formelmanager für Versicherungsmathematik [00:41:44]
Grenzen und Updates von Xtext [00:43:35] DSL-Vortrag auf der
JavaLand [00:45:40] Begleitung durch einen Mentor [00:47:20] Eigene
Themen für Konferenzvorträge finden [00:49:12] Weitere
DSL-Plattformen: MPS und Nitra [00:50:43] Einstieg mit Büchern und
Tutorials [00:52:00] ANTLR und die Grundlagen hinter dem Framework
[00:53:05] Weitere Bücher zu Sprachen und Laufzeitumgebungen
[00:56:30] Geplanter Vortrag über Mutation Testing [00:59:21]
Kontaktmöglichkeiten von Markus [01:00:49] Rückblick und Shownotes
Inhalt Wir haben uns u.a. über die folgenden Fragen ausgetauscht.
Allgemeines zur Person Wie ist dein Name und wo arbeitest du? Wie
bist du zur Informatik bzw. Softwareentwicklung gekommen? Welche
Ausbildung bzw. welches Studium hast du im Bereich der Informatik
absolviert? Mit welcher/n Programmiersprache/n arbeitest du im
Alltag? Was ist deine Lieblingsprogrammiersprache und warum?
Domänenspezifische Sprachen Was ist eine domänenspezifische
Sprache? Was unterscheidet DSLs von "normalen" Programmiersprachen?
Was sind interne und externe DSLs? Womit kann man DSLs entwickeln?
Welche DSLs hast du bisher entwickelt und wofür werden sie
eingesetzt? Welche Plattform nutzt du für deine DSLs und warum? Wie
geht man bei der Umsetzung einer DSL vor? Was sind Grammatik,
Parser und Lexer? Bringen DSLs wirklich so viel Mehrwert, dass sich
eine Entwicklung lohnt? Wie schwierig ist die Entwicklung einer
eigenen Programmiersprache? Was macht dir am Entwickeln von DSLs
Spaß? Was stört dich beim Entwickeln von DSLs? Wie bist du zum
Thema DSLs gekommen? Können auch schon Azubis eigene DSLs
entwickeln? War das Thema nicht zu schwierig für ein
IHK-Abschlussprojekt? Welche Literaturempfehlungen hast du für den
Bereich DSLs? Vorträge auf Konferenzen Wie kam es zu deinem Vortrag
auf der JavaLand? Was kann man sich unter dem "Newcomer-Track"
vorstellen und wie wurdest du dort betreut? Wie hast du das Thema
deines Vortrags gefunden? Wie hast du dich auf deinen Vortrag
vorbereitet? Was hast du selbst durch den Vortrag gelernt? Was hat
dir der Vortrag rückblickend gebracht? Sollten auch Azubis oder
Berufseinsteiger schon Vorträge halten? Aus- und Weiterbildung Was
ist das letzte Fachbuch mit Bezug zur Programmierung, das du selbst
gelesen hast? Was ist dein absolutes Lieblingsbuch mit Bezug zur
IT/Programmierung und warum? Literaturempfehlungen * Implementing
Domain-Specific Languages with Xtext and Xtend* * CLR Via C#* Links
Permalink zu dieser Podcast-Episode RSS-Feed des Podcasts Markus'
Blog Meine praktische Abschlussprüfung – Markus Amshove Markus'
IHK-Projektarbeit über DSLs Projektdokumentation von Markus Amshove
(mit 100% bewertet) Projektpräsentation von Markus Amshove (mit
100% bewertet) Markus Amshove bei GitHub Presentations by Markus
Amshove // Speaker Deck SEROM – Softwareentwicklung im Mittelstand
Markus' Vortrag: Domänenspezifische Sprachen mit Xtext Xtext -
Language Engineering Made Easy! ANTLR Zusammenfassung Markus und
sein Weg zur Softwareentwicklung Mein ehemaliger Azubi Markus
arbeitet bei der Alten Oldenburger und studiert nach seiner
Ausbildung dual Wirtschaftsinformatik. Über Gaming und
Delphi-Bücher seines Vaters kam er zum Programmieren. Im
Unternehmen entwickelt er domänenspezifische Sprachen und Werkzeuge
für Entwickler:innen. Beruflich arbeitet er hauptsächlich auf der
Java-Plattform, wobei auch Xtend und Groovy dazugehören. Privat
programmiert er gern mit C# und beschäftigt sich mit Kotlin. Dabei
gefallen ihm funktionale Sprachmittel und die Möglichkeit,
ausdrücklich festzulegen, ob ein Wert null sein darf. Bei
Entwicklungsumgebungen legt er Wert darauf, viel mit der Tastatur
erledigen zu können. Vim-Erweiterungen und eine Command Palette
helfen ihm dabei. Was eine domänenspezifische Sprache abbildet An
SQL lässt sich das Prinzip einer domänenspezifischen Sprache, kurz
DSL, nachvollziehen: Du beschreibst Aufgaben aus einem bestimmten
Bereich, während die Technik dahinter deine Angaben auswertet. Bei
SQL betrifft das den Zugriff auf Datenbanken. Eine DSL kann auch
Bedingungen oder Schleifen enthalten. Welche Sprachmittel
dazugehören, hängt davon ab, welche Aufgaben du lösen möchtest.
Wenn du zusätzliche Funktionen einbaust, wächst die Komplexität der
Sprache. Beim Entwerfen klärst du deshalb zuerst, welche fachlichen
Aufgaben deine Sprache abbilden soll und wer damit arbeiten wird.
Als Zielgruppe kommen Entwickler:innen ebenso infrage wie
Mitarbeiter:innen eines Fachbereichs. Deren Anforderungen fließen
in den Sprachumfang ein. Du kannst deutsche Schlüsselwörter
verwenden und sogar ganze Sätze zulassen. Ein Satz wie "Ein Vertrag
hat viele Versicherte" könnte eine Struktur beschreiben, aus der
später eine Liste von Versicherten entsteht. Wenn du die Begriffe
des Fachbereichs übernimmst, erleichtert das den Austausch mit
deinen Ansprechpartner:innen. Dieser Gedanke findet sich auch im
Domain-driven Design. Eine DSL als IHK-Abschlussprojekt Für sein
Abschlussprojekt entwickelte Markus eine Sprache, die festlegt,
welche:r Mitarbeiter:in ein eingescanntes Dokument erhält. Die
Regeln dafür standen zuvor direkt in einem .NET-Programm und waren
mit der Zeit unübersichtlich geworden. In der DSL erscheinen
fachliche Begriffe wie "Regel" und "Zuweisung". Aus den
beschriebenen Regeln entsteht C#-Code. Wer eine Regel verfasst,
kann sie dadurch deklarativ mit den Begriffen des Fachbereichs
ausdrücken. Auf Wunsch des Fachbereichs beschreibt jede Regel einen
einzelnen Fall. Für alternative Bedingungen werden separate Regeln
angelegt. Soll etwa ein Vorname mit A oder B beginnen dürfen,
entstehen dafür zwei Regeln. Über deren Namen lässt sich
nachvollziehen, warum ein Dokument einer bestimmten Person
zugewiesen wurde. Beim Entwerfen ging Markus gemeinsam mit einem
Ansprechpartner aus dem Fachbereich die vorhandenen C#-Regeln
durch. Sie schrieben diese direkt in einer geordneten Textform auf,
aus der sich die spätere Sprache entwickelte. Mit Xtext eine eigene
Sprache entwickeln Zum Einstieg definierst du in Xtext die
Grammatik deiner Sprache in einer Form, die auf der
Backus-Naur-Form beruht. Darin legst du fest, wie gültige Texte
aufgebaut sind. Die Grammatik des Abschlussprojekts umfasste
ungefähr 40 bis 50 Zeilen. Aus dieser Grammatik erzeugt Xtext unter
anderem: Lexer und Parser, die den eingegebenen Text verarbeiten.
Ein Eclipse-Plugin beziehungsweise einen Language Server für die
Arbeit etwa in Visual Studio Code. Einen Editor mit
Syntax-Highlighting und kontextbezogener Code-Vervollständigung. In
Eclipse gehört auch eine Outline dazu. Xtext bildet die
beschriebenen Elemente als Java-Objekte ab und kann Verweise
zwischen ihnen auflösen. Dadurch kannst du im erzeugten Editor
ausprobieren, ob deine Sprache so funktioniert, wie du sie
entworfen hast. Anschließend programmierst du, welcher Code aus den
Angaben entstehen soll. Für eine Routingregel kann der Generator
beispielsweise eine C#-Klasse schreiben. Das Eclipse-Plugin lässt
sich um eigene Prüfungen oder Refactorings erweitern. Code mit
Xtend erzeugen Für den Generator kannst du Java oder andere
Sprachen auf der JVM verwenden. Xtend wurde ebenfalls mit Xtext
entwickelt und bietet Funktionen, die das Erzeugen von Code
erleichtern. Es ist eine allgemeine Programmiersprache, aus der
Java-Code entsteht. In mehrzeiligen Textvorlagen kannst du Werte
oder Ergebnisse von Methodenaufrufen einsetzen. Xtend
berücksichtigt dabei die Einrückung, sodass sich auch der erzeugte
Code übersichtlich formatieren lässt. Markus empfand das Lernen
während seiner Ausbildung zunächst als anspruchsvoll. Mit Tutorials
erschloss er sich die Grammatikbeschreibung; bei Xtend half ihm
später, die Nähe zu Java zu erkennen. Durch die weitere Arbeit
verstand er besser, wie Sprachen übersetzt werden und weshalb ihre
Syntax eindeutig sein muss. Dieses Wissen konnte er auch im Studium
einbringen. Projektwahl und Ergebnisse in der Praxis Als Markus
sein Abschlussprojekt auswählte, hatte er bereits eine DSL
entwickelt und kannte Xtext aus seiner täglichen Arbeit. Der damals
vorgegebene Rahmen von 70 Stunden musste realistisch einzuhalten
sein. Für dein eigenes Projekt empfehle ich dir deshalb ein Thema,
bei dem du auf vorhandene Erfahrungen aufbauen kannst. ...
Kommentare (0)
Melde dich an, um einen Kommentar zu schreiben.