Über den Service
ÜbersetztIch bin ein Clojure-Entwickler und erstelle funktionale Backend-Dienste und Datenverarbeitungsanwendungen, die auf der JVM laufen. Im Kern meiner Arbeit stehen unveränderliche Datenstrukturen, reine Funktionen und ein kompositorischer Stil, bei dem ein Programm aus kleinen, klar benannten Teilen aufgebaut wird, über die man tatsächlich nachdenken kann. Da Clojure ein Lisp ist, ist mein Hauptwerkzeug die REPL: Ich entwickle ein Programm interaktiv, bewerte Ausdrücke direkt mit Live-Daten und verfeinere das Design, während ich vorankomme, anstatt alles im Voraus zu erraten und später zu debuggen. Es ist eine eigene Disziplin, anders als die Arbeit mit Java, Scala oder Elixir, und ich betrachte es als ein Handwerk für sich, nicht als Java mit Klammern.
Beim Multithreading benutze ich ehrlich die Werkzeuge, die die Sprache bietet: Atome, Refs, Agents und core.async-Kanäle — nach Aufgabe, nicht nach Mode. Ich habe REST- und Streaming-HTTP-Dienste auf Ring und reitit aufgebaut, Daten über Spec und Malli beschrieben, mit Postgres über next.jdbc und HoneySQL gearbeitet, große Volumina mit Transducern und faulen Sequenzen verarbeitet, damit der Speicher flach bleibt. Mir ist eine sorgfältige Integration mit dem umliegenden JVM-Ökosystem, sinnvolle Fehlerbehandlung und langweilige, aber gute Deployments wichtig. Wenn der Code in einen verworrenen Zustand geraten ist, bringe ich ihn zurück zu einem sauberen Kern und dünnen Rändern mit Effekten.
Wenn Sie einen Dienst haben, der unter Last korrekt sein muss, eine Datenpipeline, die wartbar bleiben muss, oder ein Clojure-Projekt, das halb fertig ist, werde ich es übernehmen und voranbringen. Ich schreibe Tests, die das Verhalten korrigieren, dokumentiere komplexe Stellen und hinterlasse einen gesunden REPL-Prozess, damit die nächste Person von Tag eins an produktiv ist.
— Backend-Dienste in Clojure und ClojureScript für die JVM
— REST- und Streaming-APIs auf Ring, reitit und core.async
— Datenmodellierung und -validierung über clojure.spec und Malli
— Arbeiten mit Postgres über next.jdbc, HoneySQL und Verbindungspooling
— Multithreading mit Atomen, Refs, Agents und Kanälen
— Transducer, faule Sequenzen, Verarbeitung großer Volumina
— REPL-gesteuerte Entwicklung, Tests und Refactoring zu reinen Funktionen
Beim Multithreading benutze ich ehrlich die Werkzeuge, die die Sprache bietet: Atome, Refs, Agents und core.async-Kanäle — nach Aufgabe, nicht nach Mode. Ich habe REST- und Streaming-HTTP-Dienste auf Ring und reitit aufgebaut, Daten über Spec und Malli beschrieben, mit Postgres über next.jdbc und HoneySQL gearbeitet, große Volumina mit Transducern und faulen Sequenzen verarbeitet, damit der Speicher flach bleibt. Mir ist eine sorgfältige Integration mit dem umliegenden JVM-Ökosystem, sinnvolle Fehlerbehandlung und langweilige, aber gute Deployments wichtig. Wenn der Code in einen verworrenen Zustand geraten ist, bringe ich ihn zurück zu einem sauberen Kern und dünnen Rändern mit Effekten.
Wenn Sie einen Dienst haben, der unter Last korrekt sein muss, eine Datenpipeline, die wartbar bleiben muss, oder ein Clojure-Projekt, das halb fertig ist, werde ich es übernehmen und voranbringen. Ich schreibe Tests, die das Verhalten korrigieren, dokumentiere komplexe Stellen und hinterlasse einen gesunden REPL-Prozess, damit die nächste Person von Tag eins an produktiv ist.
— Backend-Dienste in Clojure und ClojureScript für die JVM
— REST- und Streaming-APIs auf Ring, reitit und core.async
— Datenmodellierung und -validierung über clojure.spec und Malli
— Arbeiten mit Postgres über next.jdbc, HoneySQL und Verbindungspooling
— Multithreading mit Atomen, Refs, Agents und Kanälen
— Transducer, faule Sequenzen, Verarbeitung großer Volumina
— REPL-gesteuerte Entwicklung, Tests und Refactoring zu reinen Funktionen