to all posts

Hei, Clojure!

Published

De siste ukene har jeg putlet litt med Clojure, og det er mye å like.

Alt er verdier (inkludert funksjoner og ting som if), verdier er uforanderlige (immutable, om du vil), vi har en pipe-makro som Elixirs |> (det vil si, vi har to! og det kalles ikke en pipe macro, men en thread macro her til gards), og språket er dynamisk. Det siste er selvfølgelig omdiskutert, men Clojure kler det på en måte som er vanskelig å sette fingeren på.

Clojure er en Lisp, som jeg først trodde skulle være mer utfordrende enn det viste seg å være. Det er ikke vanskelig å skrive parentesen på venstre side av funksjonsnavnet, og når jeg fikk litt dreisen på Paredit (ja, og så Emacs da), gikk det fra å være esoterisk til å føles rett: Som om det var slik det alltid var meningen at kode skulle skrives.

Det er også andre kvaliteter jeg ikke forventet, men som bare gjør meg enda mer glad i språket:

En er repl-et: Jeg trodde jeg visste hva det var. Read, Eval, Print, Loop. Skriv litt kode inn i terminalen og se hva det blir, hurra meg rundt og gratulerer med dagen:

user=> (+ 1 2)
3

Det der har jeg sett før, tenkte jeg.

Bare at det er ikke det en clojurian mener når hen snakker om sitt elskede repl. Nei, i Clojure lever replet rett i editoren din, og lar deg kna og jobbe med koden din til du har fått den som du vil. Vrient å forklare, men magisk når det faller på plass.

Fine folk …

Skaperen, Rich Hickey, har flere legendariske foredrag som alle handler mer om ideer og refleksjoner og vår relasjon til å bruke og skape programvare, enn de handler om the latest Blazingly Fast framework™. Han er også opptatt av å ta imot nybegynnere med åpne armer, og verdien av å lære bort og å hjelpe hverandre.

Denne tenkemåten er i stor grad omfavnet av hele Clojure-fellesskapet: Clojure-Slacken har for eksempel en egen #gratitude-kanal hvor det oppfordres til å offentlige takke andre medlemmer av fellesskapet for alle bidrag og hjelp.

… med gode ideer

Heller enn å si seg fornøyd med at du må skrive Javascript for å lage en web-app, så laget de ClojureScript. Og i stedet for å godta at updated_at- og parent_id-felter i en relasjonell database er så bra som det blir, så fikk vi Datomic. Og om du vil rendre ting til en nettleser kan du bruke Hiccup, som gjør at du heller enn å skrive

<figure class="image-banner">
  <img
    src="/elephant.jpg"
    alt="Elephant at sunset" />
  <figcaption>An elephant at sunset</figcaption>
</figure>

kan skrive

[:figure.image-banner
 [:img {:src "/elephant.jpg"
        :alt "Elephant at sunset"}]
 [:figcaption "An elephant at sunset"]]

Ved å representere DOM-treet med Clojures egne datastrukturer har en også gitt seg selv tilgang til å bruke hele det rike standardbiblioteket. Vakkert!

Et levende norsk fagmiljø

Jeg har hørt om Clojure ved flere anledninger tidligere, men fikk for alvor øynene opp for språket etter å ha kommet over Parenteser, en fantastisk fin fagblogg fra Team Servering hos Mattilsynet. Den ble startet av Magnar Sveen og Christian Johansen, to ringrever som lenge har jobbet med å spre det glade budskap: De står også bak ZombieClj, en screencast med undertittelen Zombier, Clojure og to tomsinger fra Østfold som åpenbart ikke trenger ytterligere innsalg.

Siden starten har Team Servering vokst betraktelig, og det er nå en hel håndfull med folk som deler sine tanker om samarbeid, utvikling, og Clojure. Alle er også å finne på #clojure-norway-kanalen på Slack, som, ikke overraskende, også er en trivelig plass.

Christian er også en ildsjel som omsetter mange av ideene til åpen kildekode, og jeg gleder meg til å bruke Replicant og Nexus til mitt neste web-prosjekt. Og da er det ikke så dumt å ha Portfolio for å jobbe med komponent-utvikling og Dataspex for å følge med på data-flyten. Og ikke minst, å gjøre det hele godt hjulpet av Magnar og resten av Team Serverings emacs-konfig, som også er villig delt.

For så trivelig kan det altså være å programmere.