Uusi vuosi, uusi ohjelmointikieli: Clojure

Viikko sitten katselin Rich Hickeyn esityksen Strange Loop 2011 konferenssissa. Tämä Simple Made Easy -luento lienee ilmeisti jonkinainen klassikko, päätellen siitä kuinka monta viittausta siihen olen kulunueen viikon aikana huomannut. Olin harkinnut Clojurea seuraavaksi ohjelmointikieleksi johon tutustua, ja tein alustavaa kartoitusta siitä mikä minua odottaisi. Tajusin, että Clojure tuntuu vieraalta vain Lisp-syntaksinsa vuoksi, minkä vuoksi olen mielessäni sulkenut sen pois “normaalien” ohjelmointikielten joukosta.

Olen pitkään etsinyt itselleni mieluista työkalua selainpohjaisten sovellusten tekemiseen, sellaista vielä löytämättä. Lähimmäksi lienee päässyt Node.js -framework DerbyJS, mutta se on ollut hieman turhan nopeasti liikuva maali minun makuuni. Toinen ehdokas on ollut Scala.js. Olen säännöllisesti palannut Scalan pariin, mutta hieman turhautunut mm.ide- ja versioyhteensopivuusongelmiin.

Haluan jotain uutta.

Harjoitusprojekti

Paras tapa oppia uutta on ajankohtainen, itseä kiinnostava ja itse valittu sovelluskohde.

Yksi houkuttelevista asioista Clojuressa oli JavaScriptia tuottava ClojureScript ja React.js:n päälle rakennettu Om-kirjasto reaktiiviseen ohjelmointiin. Aloitin Om-kirjaston tutoriaalilla ja proof-of-conceptina porttaamaan erästä keskeneräistä Derby-projektiani. ClojureScript-tutoriaalista opettelin Clojuren syntaksia ja perustietorakenteiden käyttöä. Om-kirjaston kanssakin pääsin jo alkuun, mutta tarvitsin ensin jotain tutumpaa.

Päätin lämmittelyharjoituksena ensin portata Julialla tekemäni blogigeneraattorin Clojurelle. Hyvät palikat löytyivät helposti kevyellä googletuksella: Ring (HTTP), Compojure (routing), Enlive (template), Yesql (kevyt SQL) sekä Leiningen (projektin ja rippuuvuuksien hallinta). Eniten päänraavintaa aiheutti Enliven template-tyyli, vaikka css-valitsimiin ja dom-muunnoksiin olin jo aiemmin törmännyt Scala/Lift -kehityksessä. Muuten sain homman tehtyä melkeinpä kirjastojen readme-ohjeiden avulla.

Tämä blogi generoituu nyt Clojurella.

Juliasta Clojureen

Viime vuoden uusi kieli oli Julia, jolla tämänkin blogin aiemmin generoin. Haaveilin sen yhdistävän kaksi pääaluettani, webin ja datan. Ehkä se vielä jonain päivänä sen tekeekin, mutta en jää pidättämään hengitystäni. Julian kanssa näin mahdollisuuksia tulevaisuudessa. Clojuren kanssa koin käytännön hyödyt ensikokeilulla. Vertailu ei tietenkään ole reilu, sillä Julia on vielä beta-vaiheessa. Clojure on kuitenkin webialustana yksinkertaisesti valovuosia sitä edellä, enkä minä taida nyt olla se oikea henkilö raivaamaan Julia-latua eteenpäin. Clojuren soveltuvuudesta datan käsittelyyn ja analysointiin en vielä osaa antaa arviota.

Paluu funktionaaliseen kieleen oli myös tervetullut muutos. Julia tukee funktionaalistakin tyyliä, mutta käytännössä ohjelmointi on pitkälti imperatiivista, päämotivaationa optimaalinen suorituskyky. Blogin Clojure-version koodissa ei ole tällä hetkellä yhtään muuttujaa, enkä missään vaiheessa vielä edes kaivannut sellaisia. Funktionaalisuus sinänsä oli jo ennestään tuttua. Scalaa on tullut koodattua ja Haskelliakin vähän ihmeteltyä. Olen aikoinaan koodaillut koulussa Lisp-johdannaista Schemeä, mikä varmasti nopeutti omaksumista. Ei se niin vieraalta lopulta tuntunutkaan.

Kokemus

Hurahdin nopeasti hommaan ja pian huomasin asentaneeni Emacsinkin taas koneelleni. Tärkeimmät näppäinyhdistelmät palasivat 15v tauon jälkeenkin hämmentävän nopeasti mieleen. Aikoinaan en Schemestä varsinaisesti innostunut, mutta nyt Clojuren kanssa kävi toisin. En edes muista milloin minulla on viimeksi ollut yhtä kivaa ohjelmoidessani.

Oppimiskokemuksena Clojure on ollut hyvin positiivinen yllätys. En ole minkään muun kielen kanssa päässyt yhtä nopeasti vauhtiin ja tuottavaksi. Toki uusien kielten opettelu helpottuu kokemuksen myötä muutenkin, mutta työkalujen ja dokumentaation laatu on ollut poikkeuksellista. Kaikki on tähän mennessä ollut yllättävän toimivaa ja valmista.

Linkit

comments powered by Disqus
2015-03-12