Über den Service
ÜbersetztIch bin ein Racket- und Scheme-Entwickler und arbeite in dem Bereich der Lisp-Welt, den gewöhnliche Backend-Entwickler fast nie besuchen: Ich mache Sprachen, anstatt nur fertige zu verwenden. Wenn eine Aufgabe hartnäckig deinen allgemeinen Code auf den Kopf stellt, klingt die ehrliche Antwort oft so — du brauchst eine kleine domänenspezifische Sprache für die Aufgabe selbst. Das ist es, was ich entwerfe und implementiere. Ich schreibe sorgfältige, gut strukturierte funktionale Programme, hygienische Makros, benutzerdefinierte Leser und Auswerter sowie die Werkzeuge, die eine rohe Idee in einen funktionierenden Interpreter verwandeln, über den du nachdenken kannst.
Meine Arbeit lässt sich normalerweise in drei Formen unterteilen. Die erste sind DSLs und Makrosysteme: Ich nutze Rackets sprachorientierte Fähigkeiten, um deinem Team eine Notation für eine spezifische Aufgabe zu geben, mit Syntaxprüfungen, klaren Fehlermeldungen und einem Leser, der sich nativ anfühlt, nicht aufgesetzt. Die zweite sind Interpreter und kleine Compiler: Parser, Auswerter, Baumdurchläufer und Bytecode-Backends für Konfigurationsformate, Regel-Engines, Skriptschichten und experimentelle Sprachen. Die dritte sind Bildungs- und Forschungswerkzeuge: Ich kümmere mich um Programme, die sich selbst erklären, also erstelle ich Visualisierer, Schritt-für-Schritt-Debugger, Übungsprüfer und interaktive Materialien für diejenigen, die funktionale Programmierung und die zugrunde liegende Lambda-Kalkül lernen.
Da ich aus der Lisp-Familie und nicht aus dem Mainstream-Backend oder Clojure-Arbeiten komme, sind Korrektheit und ein minimaler Kern für mich besonders wichtig. Ich verlasse mich auf Verträge, eigenschaftsbasierte Tests und kleine zusammensetzbare Funktionen, dokumentiere Grammatik und Invarianten, damit die nächste Person deinen Parser nicht auseinandernehmen muss. Wenn du einen halb funktionierenden Prototyp hast, einen Haufen Makros, den sich niemand traut anzufassen, oder eine frische Idee für eine kleine Sprache — ich bringe es von der Skizze zum zuverlässigen Ergebnis.
— Domänensprachen und hygienische Makros in Racket
— Interpreter, Auswerter und kleine Compiler in Scheme
— Parser, benutzerdefinierte Leser und Regel-Engines
— Bildungswerkzeuge: Schritt-für-Schritt-Debugger, Visualisierer, Übungsprüfungen
— Funktionales Refactoring, Verträge und eigenschaftsbasierte Tests
— Migration und Modernisierung von altem Scheme- und Lisp-Code
Meine Arbeit lässt sich normalerweise in drei Formen unterteilen. Die erste sind DSLs und Makrosysteme: Ich nutze Rackets sprachorientierte Fähigkeiten, um deinem Team eine Notation für eine spezifische Aufgabe zu geben, mit Syntaxprüfungen, klaren Fehlermeldungen und einem Leser, der sich nativ anfühlt, nicht aufgesetzt. Die zweite sind Interpreter und kleine Compiler: Parser, Auswerter, Baumdurchläufer und Bytecode-Backends für Konfigurationsformate, Regel-Engines, Skriptschichten und experimentelle Sprachen. Die dritte sind Bildungs- und Forschungswerkzeuge: Ich kümmere mich um Programme, die sich selbst erklären, also erstelle ich Visualisierer, Schritt-für-Schritt-Debugger, Übungsprüfer und interaktive Materialien für diejenigen, die funktionale Programmierung und die zugrunde liegende Lambda-Kalkül lernen.
Da ich aus der Lisp-Familie und nicht aus dem Mainstream-Backend oder Clojure-Arbeiten komme, sind Korrektheit und ein minimaler Kern für mich besonders wichtig. Ich verlasse mich auf Verträge, eigenschaftsbasierte Tests und kleine zusammensetzbare Funktionen, dokumentiere Grammatik und Invarianten, damit die nächste Person deinen Parser nicht auseinandernehmen muss. Wenn du einen halb funktionierenden Prototyp hast, einen Haufen Makros, den sich niemand traut anzufassen, oder eine frische Idee für eine kleine Sprache — ich bringe es von der Skizze zum zuverlässigen Ergebnis.
— Domänensprachen und hygienische Makros in Racket
— Interpreter, Auswerter und kleine Compiler in Scheme
— Parser, benutzerdefinierte Leser und Regel-Engines
— Bildungswerkzeuge: Schritt-für-Schritt-Debugger, Visualisierer, Übungsprüfungen
— Funktionales Refactoring, Verträge und eigenschaftsbasierte Tests
— Migration und Modernisierung von altem Scheme- und Lisp-Code