For noen måneder siden holdt Kodemaker en åpen fagdag på Rebell. Der hadde jeg gleden av å åpne kvelden med å vise frem mitt nye personlige forskningsprosjekt: programmeringsspråket Gløgg.
Den vanligste tilbakemeldingen jeg fikk i etterkant var: “Hvorfor? Hva er det språket skal løse?”
Dette er et veldig godt spørsmål. Nye programmeringsspråk kan i mange tilfeller fungere som et prøveprosjekt for nye paradigmer og konsepter, som så senere kan adopteres av de vanlige programmeringsspråkene som Java, C# eller Rust. En ekstremt sjelden gang kan til og med et nytt språk vokse i popularitet og bli et av de store språkene.
Problemet er bare at det er veldig lenge siden at et nytt programmeringsspråk tilførte noe… nytt.
Det har selvfølgelig vært mye innovasjon innenfor programmering de siste to tiårene, men det aller meste har vært små inkrementelle forbedringer. I all hovedsak handler programmering fortsatt om objekter, funksjoner, if-uttrykk og løkker.
Selv funksjonell programmering, som har blitt mer og mer populært det siste tiåret, ble utviklet før Java ble utgitt. Funksjonell programmering handler også om at vi kan få til mer med mindre, og er sånn sett heller en avvisning av objektorientert programmering enn noe annet.
Det er ikke nødvendigvis noe galt med dette, men det gir jo inntrykk av at programmering er et løst problem. Vi bruker i dag mer tid på å få kunstig intelligens til å skrive kode for oss, enn vi bruker på å gjøre koden enklere å skrive.
Er det virkelig det beste vi får til?
¶Dagens programmeringsspråk er lagd for å kommunisere med maskiner
En kan argumentere for at en utviklers jobb er å oversette forretningslogikk til et språk som datamaskin kan forstå.
I begynnelsen var det nødvendig at språkene våre lot oss spesifisere nøyaktig hvordan disse oppgavene skulle utføres, for datamaskinene var ikke raske nok til at vi kunne vente på at de utførte oppgaver som ikke var strengt nødvendige. I dag er det i mange tilfeller ikke så farlig om en oppgave utføres med 90% eller 80% av teoretisk ytelse. Det som derimot er viktigere er at utviklerens tid brukes mest mulig effektivt. Dette betyr igjen at det er mye viktigere at koden er forståelig, enn at den er rask.
Slik jeg ser det er problemet med dagens programmeringsspråk er at vi hovedsakelig bruker dem for å kommunisere forretningslogikk med andre utviklere. Siden opprinnelsen til mange av disse språkene fokuserte på å gi deg kontroll over hvordan logikken skulle regnes ut, blir derfor kommunikasjonen vannet ut av detaljer som først og fremst er viktig for datamaskinen.
For eksempel: du vil vise en animasjon mens du venter på at informasjon skal lastes ned fra en server.
Forretningslogikken er altså: pågående http-request => vis spinner.gif
Koden du må skrive vil sannsynligvis innebære å opprette en variabel et eller annet sted som sier om spinner.gif skal vises eller ikke, sørge for at denne variablen blir satt til riktig verdi til riktig tid, og at grensesnittet oppdateres hver gang denne variablen endrer seg.
Dette er et enkelt eksempel, men allerede her kan vi se at det er stor forskjell på hva forretningslogikken er, og koden som kreves for å implementere det.
Likevel bruker vi altså mye tid og ressurser i dag på at kunstig intelligens skal oversette forretningslogikk til kode, istedenfor at vi får koden til å ligne mer på forretningslogikk.
¶Hvordan vil et slikt språk se ut?
For være helt ærlig: jeg vet ikke.
Men i 2018 kom jeg over et programmeringsspråk som var inne på noe: Eve.
Jeg skal ikke gi en veldig detaljert beskrivelse av Eve her. Nettsiden vil gjøre en mye bedre jobb enn det jeg kan gjøre, og denne artikkelen er lang nok som den er. Noen ting er likevel verdt å påpeke.
Det du øyeblikkelig legger merke til med Eve er at kildekoden er skrevet som markdown-dokumenter. Dette betyr at Eve-programmer hovedsakelig er prosatekst, med noen kodesnutter her og der. Jeg vet ikke hvor bra dette ville ha vært i praksis, da det å skrive god dokumentasjon er en ferdighet i seg selv, men en kan ikke komme bort fra at dette endrer fokuset fra å skrive til en datamaskin til å skrive for mennesker.
Det andre som er interessant med Eve er alt det som ikke er der.
Eve har ikke funksjoner eller noen form for navngitte kodesnutter. Det finnes ikke datastrukturer, ingen eksplisitt kontrollflyt, ingen minnehåndtering eller globale variabler. Istedenfor definerer du et sett med egenskaper og hvordan disse påvirker hverandre over tid. Det er programmeringsspråket sin jobb å oversette dette til korrekt og effektiv maskinkode.
Dette er fortsatt programmering, men uten alle detaljene som i utgangspunktet kun er viktig for datamaskinen. Dette gjør det lettere for oss mennesker å se de detaljene som virkelig betyr noe.
Dessverre er ikke Eve i aktiv utvikling i dag. Selskapet som utviklet det var en startup, og gikk etter hvert tom for penger. Til min store ergelse er det ingen som har bestemt seg for å videreutvikle språket heller, selv om koden er fritt tilgjengelig.
¶Så hva nå?
I desember 2023 ble jeg til slutt lei av å vente på at noen andre skulle fortsette der Eve slapp, og startet mitt eget personlige forskningsprosjekt inspirert av Eve. Jeg kaller det Gløgg, da det var det jeg drakk på tidspunktet jeg opprettet prosjektet, og den følelsen jeg hadde da jeg kom på ideen.
Hvis du lurer på hvordan Gløgg fungerer, så vil jeg anbefale å se mitt foredrag om Gløgg fra Kodemakers åpne fagdag.
Dersom du er nysgjerrig på hvordan språket utvikler seg videre, eller har lyst til å teste det ut, så finner du kildekoden og ekstra dokumentasjon på Sourcehut.