11 punkter for grønnere kode: - Viktig å tenke på hvordan man lager løkkene sine

- Alle må bidra til det grønne skiftet, også vi som lever av å skrive kode, mener Kent Inge og Sindre.

Kent Inge Fagerland Simonsen og Sindre Haugland Bøyum mener også utviklere må ta ansvar i klimakrisa, og har 11 forslag til hvordan koden din kan bli grønnere. 📸: Privat
Kent Inge Fagerland Simonsen og Sindre Haugland Bøyum mener også utviklere må ta ansvar i klimakrisa, og har 11 forslag til hvordan koden din kan bli grønnere. 📸: Privat Vis mer

Alle bransjer må bidra til det grønne skiftet. Dette er etterhvert en heller ukontroversiell påstand og vi skulle dermed anta at dette også gjelder for de av oss som lever av å skrive kode.

Vi som utviklere av programvare kan bidra på to måter:

Den første og viktigste er å bidra ved å lage programvare som bidrar til målene i det grønne skiftet. Den andre måten er å bidra til at programvaren vi lager lages på mest mulig skånsomt vis og at den har minimalt avtrykk.

Dette skrivet handler om den andre måten beskrevet over ved å redusere energibehovet til programvaren og utviklingen av denne. De fleste av disse punktene vil nok trolig virke opplagte for de fleste, men ved å si dem høyt og skrive dem ned vil det forhåpentligvis kunne fungere som en påminnelse om å lage grønn programvare på grønt vis.

#1: Ha det som et mål [3,4]

Det første steget i å lage grønnere kode på grønnere vis vil ofte være å bli klar over at dette er ønskelig.

Deretter kan man inkludere grønnhet, for eksempel i form av energieffektivitet, som et kvalitetskriterie og følge det opp i sine vanlige prosedyrer som post mortem-møter, standups og lignende.

Kunnskap og oppmerksomhet rundt grønn utvikling var faktoren som fikk høyest score i en rangering over mange ulike faktorer for grønn utvikling i [4].

#2: Mål energibruk og job for å holde den nede [1,4]

Ingen forbedring er mulig uten måling [4]. Derfor er det å måle energibruken til applikasjonene man utviklet helt nødvendig for å være sikker på at holder den holdes nede.

Videre så er det ikke mulig å vite om man med iterative forbedringer klarer å redusere en applikasjons energibruk over tid uten å faktisk måle den.

Å måle energibruken til en applikasjon er derimot ikke helt enkelt. En strategi er å måle proxyer (cpu, minne, oppvåkninger, i/o, nettverk..) i instrumenterte scenarier. En annen er å beregne forbruket ut fra infrastrukturen som til enhver tid benyttes. Begge disse kan gi et godt bilde, og kan godt brukes i kombinasjon.

#3: Fjern ubrukt data og kode [1]

Ubrukt data og kode tar opp plass og bruker energi, selv om det ikke tilfører noe verdi.

Å fjerne slik kode og data vil dermed kunne ha en umiddelbar positiv effekt på både produktet og energieffektivieten.

Statiske kodesjekkere kan hjelpe med å finne ubrukt kode.

«Dersom du har prosesser eller tråder som alltid kjører er det en god sjanse for at de er uvirksomme minst deler av tiden.»

#4: Avslutt alle prosesser og tråder som kan avsluttes [1]

Dersom du har prosesser eller tråder som alltid kjører er det en god sjanse for at de er uvirksomme minst deler av tiden.

Uvirksomme prosesser og tråder tar opp ressurser og bruker energi uten at det oppnås noe verdi annet enn tilgjengelighet. Sjekk om det er nødvendige at disse prosessene og trådene er tilgjengelige, og skru dem av når de ikke er nødvendige.

Sagt på en litt annen måte: la applikasjonene dine skalere til 0.

#5: Ta ekstra hensyn til løkker [1]

Løkker er både kraftige og ofte nødvendige, det er likevel viktig å tenke på hvordan man lager løkkene sine.

Ikke gjør arbeid innenfor en løkke som kunne blitt gjort én gang utenfor, avslutt løkken når den ikke lenger gjør nyttig arbeid og vurder å strømme resultater.

Tilsvarende kan det være lurt å være varsom med .toList() og lignende operasjoner.

#6: Reduser data som overføres [1]

Data-trafikk bruker relativt mye energi, særlig over lengre avstander.

Forsøk å holde nede mengden data som overføres ved å lage små JS-pakker og dynamiske bildestørrelser i frontend, bruke data-enkodinger som gir små datamengder (som protocol buffers eller bson) der det gir mening og komprimer datastrømmer med gzip eller tilsvarende.

Andre viktige strategier inkluderer caching og å prosessere data nærmest mulig kilden.

#7: Unngå reflection [2]

I rammeverk som Java og .NET er det mulig å inspisere og manipulere objektstrukturer uten å først kjenne typene via det såkalte Reflection API. Dette kan være spesielt nyttig ved parsing og serialisering fra og til ustrukturerte datatyper som JSON.

Men, om man allerede kjenner til datastrukturene er det mulig å gjøre parse og serialisere uten å ty til Reflection.

I [2] ble det vist hvordan man kan oppnå ytelsesforbedring opp til 3x ved å utnytte informasjonen i OpenAPI-spesifikasjoner til automatisk å generere parser-kode for objekter.

#8: Effektive algoritmer, datastrukturer, rammeverk og språk [3,4]

Ved å bruke effektive algoritmer, datastrukturer, rammeverk og språk gjør man ikke bare at applikasjonen kjører raskere, men også at datamaskinen gjr mindre arbeid for samme resultat. Dermed sparer man energi. I noen tilfeller gir mer effektive algoritmer til og med bedre effekt enn tyngre algoritmer. Et eksempel er å bruke AES for kryptering istedenfor DES som både bruker mindre energi og gir en mye bedre sikkerhet.

#9: Bruk energi-effektive verktøy og metoder for testing [5]

Testing kan bruke store mengder energi og tid. Spar begge deler med å benytte verktøy og metoder som garanterer nødvendig kvalitet med minimalt fotavtrykk. Det vil variere mellom kontekster hva som er det beste metodene her, så det kan lønne seg å gjøre iterative forbedringer på testplaner og automasjon.

«Likevel så har produksjon av maskinvare en nokså stor energimessig kost.»

#10: Ha eller skaff en energi-effektiv utviklingsplatform [4]

En god utviklingsplattform har blitt nærmest en nødvendighet for effektiv programvareutvikling. Sørg også for at plattformen er energieffektiv og oppfordrer til energieffektive applikasjoner.

#11: Skaff energi effektiv maskinvare [4]

Maskinvaren er der energien egentlig brukes, med andre ord er det viktig å benytte seg av effektiv, moderne maskinvare. Likevel så har produksjon av maskinvare en nokså stor energimessig kost, så tenk nøye igjennom om det energimessig lønner seg å bytte ut maskinvare som allerede er anskaffet. Vurdér også om maskinvare kan gjenbrukes. Det kan i noen tilfeller være energimessig lønnsomt å bytte til et mer effektivt operativsystem på eldre maskinvare og bruke den gamle datamaskinen litt til enn å bytte den ut med en gang.

Fotnoter:

[1] L. Ardito et al, Understanding Green Software Development: A Conceptual Framework

[2] K. Nygård, Speeding up Jackson JSON parsing 3x, Javazone 2022

[3] F. M. Hejri et al, Analyzin the factors influyencing green software development using a hyrud fuzzy approach,

[4] N. S. Chauhan and A. Saxena, A Green Software Development Life Cycle for Clod Computing, IT Pro 2013

[5] R. Kamalraj and J. V. N. Lakshmi, Building Sustainable Software Testing using Machine Learning for Green Engineering