I huvudet på en utvecklare #1
Niklas Hallqvist, Applitron's CTO som lever för att koda, redogör för vad som drivit fram teknikval till idag, varför inte Java är vårt förstaval längre och vad vi tänker oss istället. Hört talas om Rust? Om inte, minns var Ni hörde det först!
Vi, Applitron, har varit med ett tag. Fyrtio år blev det 2021. I princip har vi gjort samma sak under hela denna tid: utvecklat IT-system för "vanliga" företag som behöver något slags stöd för informationen som flödar i deras verksamhet. Oftast består det av någon slags databas i botten, samt ett antal gränsytor mot olika konsumenter. Det kan beröra olika delar i den egna verksamheten, eller tredje part som en privatperson, myndighet eller andra företag.
Idag ska systemen vara både lättillgängliga, snabba, robusta och säkra, oavsett om användaren befinner sig en meter eller tvåtusen mil från informationen. Under dessa fyrtio år har vår handgripliga verktygslåda varierat från år till år, även om de viktigaste verktygen nog har haft livslängder på kanske något decennium eller två. Sedan finns det också mer abstrakta, tidlösa verktyg, men de tänkte jag lämna därhän i denna artikel. I stället tänkte jag bara berätta om var Applitron står idag vad avser de mer långlivade handgripliga verktygen, de programmeringsspråk vi använder, och den strategi vi valt avseende dem för det närmaste decenniet, eller kanske två.
Till att börja med kanske en nulägesbeskrivning är på sin plats. Applitron utvecklar många produkter, en del för kommersiellt bruk, andra för internt dito, men även en mindre mängd som hamnar i den öppna källkodsvärlden. En del system kontrollerar vi helt, för andra måste vi anpassa oss till teknikval gjorda av andra. Den kommande diskussionen berör bara system där vi kontrollerar teknikval.
Vår största kodbas är skriven i Java, ett välkänt språk, som har dryga 20 år på nacken. Det förde med sig en del nyheter när det kom. För oss innebar det möjligheter att skriva system med grafiska gränssnitt (GUI) som gick att köra i en webbläsare. Tidigare skrev vi främst text- och formulärbaserade gränssnitt på den dator som systemet låg. Det gick i och för sig att koppla upp sig utifrån via modem, och senare via Internet, men i grund och botten kördes all logik på servern. Det var en stor sak, och Java hade också den fördelen att samma kod kunde köras på många olika system: Windows, Mac eller Unix. Det spelade ingen roll, men Java kom också med en kostnad. Större krav på maskinerna som stod på användarnas skrivbord. Java använder både mycket minne och beräkningskapacitet, och den kostnaden multipliceras för processer som körs på en server där kanske hundratals användare vill köra samtidigt.
Med åren har systemen vi skrivit växt, och mer komplexitet har införts. De problem Java har, har från och till manifesterat sig i form av att man slagit i taket vad avser till exempel minnesanvändande, både på klienter och servrar, så till den grad att det varit ekonomiskt ohållbart att agera med devisen "köp mera järn", den som alltid fungerade i början. Dessutom har Java utvecklats som språk under dessa två decennier, till exempel för att stödja andra modernare programmeringsparadigm, eller bara tillhandahålla andra moderna idéer som sett dagens ljus i andra, mindre kända, mer specialiserade språk. Det är givetvis bra, men poängen är, att lägga till sådant i efterhand, blir ofta inte så "vackert", och på så sätt mindre ergonomiskt för programmeraren. Man får skriva stora delar kod med mycket repetition, eller bara med så invecklad syntax, att det blir svårt att läsa för andra och intention kan gå förlorad.
Under de senaste fem åren eller så har jag varit på jakt efter ett ersättningsspråk för Java. Flera kandidater har funnits: Scala, Kotlin, Typescript, Rust och kanske en del andra. På en teknisk nivå finns det en del absoluta krav, vilket jag inte tänker tråka ut den mer ytligt intresserade läsaren med, men det utesluter en del språk som Ni kanske förväntade skulle finnas med på kandidatlistan. Efter att ha testat en del av språken både på akademiska uppgifter (till exempel adventofcode.com de senaste åren), och på riktiga scenarios ifrån vår verklighet (som enstaka moduler ifrån A2, vårt egenskrivna affärssystem), fann jag att det som gav mig mest förtroende ingjutet för vår framtid var Rust.
Ett absolut nydanande språk, med drygt tio års historik, men som exploderat de senaste fem. Om man kikar på världens största forum för utvecklare, Stackoverflow, och deras årliga Gallupundersökningar har Rust legat i topp de senaste fem, av mest älskade språk. Utan att gå in på teknik säger det ändå en del. Ett språk som förutom att tillhandahålla ett starkt typsystem ger möjlighet att programmera enligt en funktionell paradigm, med stöd för asynkronicitet, utan runtime-system, och med en uttalad princip att du aldrig belastas av språkkonstruktioner du inte använder. Makro-systemet möjliggör avancerad metaprogrammering och kan därmed minska mängden "boiler-plate"-kod (repeterad kod som i stort sett inte tillför något, men som gör systemen svårare att både läsa och underhålla) till ett minimum. Men det får bli en annan artikel!
Dessutom tillför språket något helt nytt: statisk kontroll över minnesanvändandet. Det kommer, till skillnad från tidigare, vara *svårt* att skriva program som läcker minne, dessutom kommer de exekveras en magnitud snabbare än Java. Och som om detta inte räcker, parallell programmering (det som ibland kallas trådat) kommer att bli av med en uppsättning vanliga fel, där flera trådar samtidigt jobbar på samma data, eftersom det helt enkelt är omöjligt att uttrycka sådana fel i språket.
Applitron skriver just nu på vårt första kommersiella system åt en kund med server-delen skriven i Rust. Samtidigt har vi startat ett internt kompetensutvecklingsprojekt för samtliga utvecklare, där vi leker fram Rustkod. Behöver jag säga att det höjt intresset för kodning i företaget igen? Programmering bygger i grunden på glädje, glädje att kunna uttrycka sig, att kunna göra det koncist, med förtroendet att man gjort det rätt, och på ett sätt som imponerar på åskådaren. Jag tror att Rust har potentialen att göra allt det på ett bättre sätt än konkurrensen. Men jag kan ha fel... ;-)
Det går att skriva även klientsidan i Rust, men där har vi valt något annat: Typescript. Men det får bli en annan artikel!
MOBILE ONLY