"En god programmerer har skrevet kode så lenge han kan huske."
"En dårlig programmerer, også kjent som en karriereprogrammerer, begynner å bruke datamaskiner på universitetet, og mestrer i beste fall bare en liten del av fagfeltet. De tror jobben er gjort klokken fem, og bruker ikke fritiden til å holde seg oppdatert."
De oppsiktsvekkende påstandene stammer fra boken Ekte programmering av forfatterne Nils Liaaen Cornieliussen og Sjur Julin. Boken er ikke ny, men forfatterne har i forbindelse med toårsjubileet gitt ut et gratis sammendrag.
I boken hevdes det at gode programmerere gjerne har en kraftig datamaskin hjemme, i tillegg til en eller flere små, og kanskje også mikrokontrollere, lasere og kameraer som brukes til private kodeprosjekter.
Men selv det betyr ikke at man automatisk blir en god programmerer.
"Ikke alle blir gode programmerere, selv etter å ha øvd i åresvis, på samme måte som ikke alle vil bli flinke til å spille gitar etter å ha spilt i åresvis. Programmering handler om å forstå mønstre, og få gjør det godt", skriver forfatterne i boken.
Kjernen i "problemet" er ifølge forfatterne at noen fant ut at programmering skulle være enkelt og for alle. Nye programmeringsspråk og metoder ble laget med dette i tankene.
– Og så lurer folk på hvorfor smartmobilen har så dårlig batteritid, sier Corneliusen til kode24.
Glimt i øyet
Det er mye snakk om "gatekeepere" i utviklerbransjen. At noen gjør at andre føler seg ekskludert, eller kanskje bidrar til "impostor syndrome". Holdningene i boken bidrar neppe til å redusere dette.
Elise tar et oppgjør med gatekeeping blant norske utviklere: - Skadelig og ekskluderende!
Da kode24 konfronterer forfatterne med dette, sier de at de med vilje har spissformulert seg, og at mange av formuleringene er ment litt humoristisk og med glimt i øyet.
– Noen vil kanskje mene at påstandene i boken er litt arrogante, og bidrar til å skremme folk fra å ville bli utviklere?
Corneliusen og Julin svarer ikke direkte på spørsmålet.
– Vi skjønner at mange kan reagere, sier Corneliusen.
Han sier at de ønsker å sette fokus på noe de mener er et problem for utvikling av effektiv programvare i dag: Utviklere har for liten forståelse for lavnivåprogrammering, og moderne programmeringsspråk og rammeverk abstraherer bort alt som kan virke vanskelig.
– Mange av programmererne som ansettes skaper enorme kostnader ved at de skriver ineffektiv kode, laster det opp i skyen og får store regninger for å leie overprisede maskintimer til å kjøre ineffektiv programvare, sier Julin.
Lag på lag med abstraksjoner betyr ifølge forfatterne dårlig ytelse, og det er vanskelig for såkalte "ekte programmere" å forstå hva som egentlig foregår.
– Du trenger ikke all verden av erfaring for å kunne gjøre "ekte programmering", men du må vite hvor du begynner. Da må du slutte å begynne på toppen av stacken, og heller prøve å forstå dataene du jobber med, sier Julin.
«Det å tyne mest mulig ut av maskinvaren ved å skrive effektiv kode, er noe som har fulgt de to utviklerne siden Amiga-tiden.»
Kodet siden Amiga-tiden
Forfatterne har holdt på med programmering siden de kodet demoer på Commodore Amiga på 80-tallet, og boken er full av kodeeksempler som viser hvordan de mener ting skal gjøres.
I dag jobber både Corneliusen og Julin med blant annet å lage programvare for Huddly, et selskap som har sitt utspring fra Tandberg/Cisco-miljøet og som lager avanserte videokonferansekameraer.
– Før det startet jeg programvareavdelingen i et selskap som heter Stingray, der vi i løpet av et par år utviklet en laser som skyter på lakselus, sier Julin.
I Stingray handlet det mye om å behandle videostrømmer fra en rekke kameraer. Det skulle vise seg at det var veldig vanskelig å finne folk med god kunnskap om lavnivåprogrammering, noe som var nødvendig selv om det ble benyttet avanserte datamaskiner med masse regnekraft.
– Det var da Nils kom inn. Vi hadde samme bakgrunn fra Amiga-scenen og samme forhold til det å jobbe med video. Effektivitet betyr alt i den typen programmering, sier Julin.
Det å tyne mest mulig ut av maskinvaren ved å skrive effektiv kode, er noe som har fulgt de to utviklerne siden Amiga-tiden. Derfor går det stort sett i programmeringsspråk som assembler, C, til nød C++ – og eventuelt GLSL hvis det er en GPU tilgjengelig.
Ineffektiv kode koster penger
Julin og Corneliusen har forståelse for at ikke alle er som dem, og at det ikke er mulig for alle å ofre all ledig tid på å holde seg oppdatert.
– Vi ønsker først og fremst å vise noen tankeprosesser. Du kan ikke drive verden fremover mot nye fantastiske løsninger med hyllevarebiblioteker, sier Julin.
Som eksempel nevner han at selv om det populære FFmpeg-biblioteket for behandling av video er det han kaller et kvalitetsbibliotek, så er det ikke effektivt.
– Vi har oppnådd en ytelse som er 5-10 ganger bedre. Hvis du ikke behandler data som de konkrete datatypene de er, men forer det inn i et bibliotek, så blir det ikke effektivt, sier Julin.
Sandra presset seg så mye at det ble skadelig: - Ikke pynt på sannheten
Vil tvinge studenter til Z80
For å løfte nivået på det som skapes av kode rundtom i norske bedrifter, mener Corneliusen og Julin at det er nødvendig å se på både lærebøker og hvordan vi utdanner nye utviklere.
– Alle lærebøkene er veldig grunnleggende. "Forstå Java". "Lær deg Python på 1-2-3". Det er ingenting som er mer avansert, og det er litt synd, sier Corneliusen.
«Hvis man som utvikler begynner å kode i Python og JavaScript, får man aldri en forståelse for "kostnaden" til koden du skriver.»
Han mener det et problem at den generasjonen programmerere som begynner med utvikling på universitet eller høyskole, ikke har den grunnleggende forståelsen for hvordan en datamaskin fungerer på lavere nivå.
Hvis man som utvikler begynner å kode i Python og JavaScript, får man aldri en forståelse for "kostnaden" til koden du skriver – med tanke på ytelse, ifølge Corneliusen.
– De burde tvinges til å sitte med en Z80 et års tid, sier Corneliusen. For de som ikke vet det, er Z80 en 8-bits prosessor som ble brukt i datamaskiner på 80-tallet.
Senior til juniorer: - Ikke hør på stemmen i hodet som sier du ikke er god nok!
Risikerer "bloatware"
Julin mener mangelen på lavnivåkunnskap er et sykdomstegn og har en enorm kostnad for bransjen. Samtidig aksepterer han at du av og til trenger abstraksjoner for å korte ned utviklingstiden.
– Men du må ikke ha unødvendige abstraksjoner. Hver kodelinje du skriver har en kostnad.
Forfatternes oppfordring til utviklere er å ikke bare bruke standardløsningene, for da får du et produkt som er helt gjennomsnittlig.
– Du risikerer "bloatware" og programvare som verken yter godt eller har en god brukeropplevelse, sier Julin.
Corneliusen legger til at det naturligvis ikke er slik at du skal programmere alt i C, selv om han kunne ønske at mer ble programmert i C.
– Du må ha riktig verktøy til jobben, avslutter Corneliusen.