Derfor lages Folq med Elm og Haskell

- Tjenesten krever en stabil backend, og en frontend som kan tilpasses kontinuerlig, forteller utviklerne.

Øystein Hovind, Olle Fredriksson og Runar Furenes i Folq forteller om sin bruk av Elm og Haskell. 📸: Folq
Øystein Hovind, Olle Fredriksson og Runar Furenes i Folq forteller om sin bruk av Elm og Haskell. 📸: FolqVis mer

Elm og Haskell dras ofte frem som språk som en del driver med på hobbybasis, men de er ikke særlig vanlige i jobbsammenheng. Å få jobbe med begge to på fulltid, slik vi gjør hos Folq, er ganske unikt. Vi ønsket alle tre å jobbe mer med Elm og Haskell, og dette var derfor avgjørende i valget av arbeidsplass.

Som et av få norske IT-miljø har vi tatt i bruk de funksjonelle språkene Elm og Haskell. Her deler vi noen av fordelene med språkene, og noen tips til hvordan du selv kan komme i gang.

Derfor falt valget på Elm og Haskell som hovedspråk

Grunnlaget til tjenesten var allerede kodet før vi ble ansatt, men bakgrunnen for valget av språk var knyttet til robusthet og fleksibilitet.

Folq er en markedsplass som kobler selvstendige konsulenter og mindre selskap med konsulentkjøpere. Tjenesten krever en stabil backend, og en frontend som kan tilpasses kontinuerlig for å understøtte jevnlig eksperimentering med funksjonalitet. Derfor falt valget på Elm og Haskell.

Alle på teamet hadde tidligere erfaring med språkene, men hovedsakelig er vi selvlært gjennom hobbyprosjekter. Olle er unntaket, da han har arbeidet med Haskell i tidligere jobber. Det har tatt litt tid å komme dit at vi jobber raskt og effektivt med språkene, men nå er det er veldig gøy å se hvor godt de to språkene fungerer sammen.

Dette består stacken vår av

Vi bruker Elm på frontend og Haskell på backend. Sammen med disse benytter vi et bibliotek som heter Elm-UI som er en abstraksjon over HTML og CSS.

API-backenden er skrevet i Haskell-biblioteket Servant. Vi har gått inn for å ha gjennomgående typesikkerhet i hele stacken.

«Vi har gått inn for å ha gjennomgående typesikkerhet i hele stacken.»

For å snakke med Postgres-databasen bruker vi Haskell-biblioteket Beam, som lar oss skrive SQL som garantert har korrekt syntaks og typer. Biblioteket Servant lar oss definere et API og garanterer at implementasjonen matcher definisjonen.

Utifra Servant-definisjonen får vi også generert et komplett klientbibliotek i Elm som alltid gjenspeiler APIet. Med denne gjennomgående typesikkerheten kan vi gjøre hyppige og store endringer med trygghet om at ingenting vil brekke.

Å jobbe med Elm og Haskell

Først og fremst gjør Elm det trygt å gjøre endringer i frontenden, da det ikke går an å skrive ting som gir kjøretidsfeil.

Både Elm og Haskell er rene funksjonelle språk, som hindrer deg i å ta snarveier. Dette gjør at det i enkelte tilfeller kan ta lenger tid å implementere ny funksjonalitet, men det utelukker også mye teknisk gjeld. I tillegg forenkler det samarbeidet; det er mye lettere å forstå og trygt gjøre endringer på noe andre har gjort tidligere, til forskjell fra noen språk man nesten ikke tør røre hvis det ble skrevet for fem år siden.

En annen fordel er at det er gøy å jobbe med. Det er lett å gjøre endringer, språkene jobber med deg, og du kan uttrykke det du vil på en måte som gir mening for andre. Det oppleves som mer kreativt, nesten som kunst.

Grunner til at flere utviklere og selskaper holder tilbake

For mange kan det være litt avskrekkende å lære seg et nytt språk. Vanligvis opplever man en bratt læringskurve når man lærer seg rene funksjonelle språk, men vi tror de fleste vil oppleve at det er verdt investeringen når de har kommet seg inn i det.

For en bedrift er det alltid knyttet en kostnad og risiko til det å gå over fra eksisterende til ny teknologi. Det kan også virke som mange er redd for at språkene ikke er modne nok. Som nyoppstartet bedrift hadde Folq blanke ark, og da var valget lettere.

Noen vil også være bekymret for bemanning av et prosjekt med Elm og Haskell. Ser man nærmere etter, har ofte utviklere med kompetanse innen funksjonell programmering lært seg dette på fritiden. Da er de gjerne ekstra motiverte og faglig interesserte. Det er med andre ord kanskje få, men til gjengjeld interessante, kandidater.

«Det er med andre ord kanskje få, men til gjengjeld interessante, kandidater.»

Foreløpig har et par store selskaper, som Finn og NSB, tatt i bruk henholdsvis Haskell og Elm med stor suksess. Dette gjør forhåpentligvis at flere får øynene opp for disse språkene.

Utfordringer med Elm og Haskell

Elm er et språk i endring. Vi har brukt en del tid på å oppgradere til siste versjon av Elm, som hadde flere ikke-bakoverkompatible endringer. Heldigvis fanges alle disse endringene opp av Elm-kompilatoren.

I praksis betyr dette at vi vet oppgraderingen er ferdig når programmet kompilerer.

Foreløpig har ikke Haskell og Elm like store økosystem som for eksempel React, så det finnes ikke alltid ferdige bibliotek for all funksjonalitet. Foreløpig har vi løst oppgaver basert på eksisterende bibliotek og egne løsninger. Vi har endret og oppdatert enkelte eksisterende biblioteker, og gitt disse endringene tilbake til eieren, slik at de kan tas i bruk av andre.

Fremover ser vi også for oss å lage bibliotek selv.

Dette skal vi teste fremover

Vi har planer om å teste GraphQL for å enklere kunne endre på spørringer direkte i frontend uten endringer i backend. Det er også en nettverksmessig fordel å kunne be om akkurat de dataene du trenger.

Nylig har vi tatt i bruk testrammeverket Cypress, som lar oss automatisere flere ende-til-ende-tester som vi tidligere gjorde manuelt. Dette planlegger vi å utvide til å dekke en større del av nettsiden.

Kom igang med Elm og Haskell

Er man interessert i å lære seg Elm og Haskell finnes det flere gode ressurser der ute, både gratis og betalte versjoner.

For Elm er sidene guide.elm-lang.org og frontendmasters.com/courses/intro-elm/ gode alternativer, i tillegg til slackgruppene elmlang.herokuapp.com og fpchat-invite.herokuapp.com. Vi kan også anbefale å starte med Elm, da det har noe mindre komplisert funksjonalitet, og er relativt mindre enn Haskell.

«Vi kan også anbefale å starte med Elm.»

En annen måte å komme i gang er å melde seg inn i Meetups for Elm og Haskell. Disse gruppene arrangerer workshops og foredrag der du kan møte andre med samme interesser. Meetups-ene arrangeres hovedsakelig i Oslo, men nylig ble det også startet en Elm-Meetup i Stavanger.

Endagskonferansen, Oslo Elm Day, arrangeres lørdag 16. februar. Dit kommer noen av de største navnene innen Elm, og man kan lære om det nyeste innen språket. Dagen før Elm Day avholdes det i tillegg en gratis workshop med Dillon Kearns, skaperen bak det mest brukte GraphQL-biblioteket for Elm.

For de som ønsker å jobbe med Elm og Haskell på fulltid, kan det nevnes at vi planlegger å utvide utviklingsteamet!