03.03.10 | kl. 07:53 | Aktuelt, Prosabladet
Gem tastaturet væk, hvis du vil skrive god kode

Foto: Lars Bertelsen.
At definere, hvad god kode er, er tilsyneladende næsten lige så svært som at skrive den. Definitionerne er i hvert tilfælde lige så mange, som der er interessenter involveret.
Men udvikleren, udviklingschefen og underviseren ser ud til at være enige om én ting: Den gode kode handler mere om, hvad der sker før og efter, at udvikleren sidder med hænderne på tastaturet, end den konkrete syntaks eller det anvendte sprog.
Henrik Tange, underviser på Ingeniørhøjskolen i København, udtrykker det således:
– Du kan være nok så god en programmør håndværksmæssigt, men hvis du ikke gennem analyse og design har skabt grundlaget for at lave noget, som kunden kan bruge, så kan det hele jo være lige meget. Så mit bedste råd til udvikleren, der gerne vil skrive god kode, er at starte med at gemme tastaturet væk.
Domæneindblik giver god kode
Peter Sestoft, professor på ITU, taler om den 'mentale oversættelse' af virkeligheden som en vigtig forudsætning for, at man kan skrive den gode kode.
– Koden er god, hvis den er åbenlys rigtig i forhold til problemstillingen. Koden skal jo afspejle domænets struktur, så hvis den mentale oversættelse af begreberne i den virkelige verden er ligefrem og forståelig, så er koden god. Det bevirker samtidig, at man præcist ved, hvad man skal ændre, hvis domænet ændrer sig, siger han.
God overensstemmelse mellem problemstillingen og løsningen er også et vigtigt parameter, når løsningen skal udmøntes i konkret kode i en udviklingsvirksomhed.
– Koden må ikke være mere avanceret end det problem, den skal løse. For mig er enkelhed og ensartethed på tværs af løsningen meget vigtigt. Så i forhold til udviklerne, der har den store teoretiske bagage med fra deres uddannelse, er jeg typisk mere pragmatisk, siger Nicolai Pedersen, udviklingschef hos Dynamicweb, der udvikler CMS- og e-handelsløsninger.
For Peter Sestoft er god kode også kode, der matcher den opgave, der skal løses.
– God kode er tilstrækkelig korrekt til formålet og effektiv ud fra en performance-overvejelse. I den sammenhæng spiller det naturligvis ind, om man skal vedligeholde en liste over medlemmer i ens kajakklub, eller om man skal lave udtræk blandt otte millioner records i et telefoncentralsystem, siger han.
Giv din kode et langt liv
Ud over de rent funktionelle krav er der en række ikke-funktionelle krav til god kode, der typisk rækker ud over her-og-nu-anvendelsen. For at ens kode skal få et godt og langt liv, er vedligeholdbarheden et helt centralt aspekt – både for cheferne og for de udviklere, du kan læse om på de efterfølgende sider.
– Vedligeholdbarhed skal anskues ud fra to vinkler: Koden skal være struktureret, så den nemt kan tilpasses ændringer i omgivelserne og i den virkelighed, den skal afspejle. Og så skal den være læsbar, så andre kan forstå den og videreudvikle på den. Man kan skrive utrolig snedig og effektiv kode, som ingen andre kan forstå en brik af. I nogle tilfælde kan det være velbegrundet, men i mange sammenhænge vil det være meget bedre at skrive en mere læsbar og måske lidt længere kode, mener Peter Sestoft.
Hos KMD er nem vedligeholdelse af koden et vigtigt kvalitetskrav.
– Ud over at komme ud med nogle gode produkter, der møder kundekravene og har så få fejl som overhovedet muligt, så skal koden være vedligeholdelsesvenlig. Vi vil meget hellere lave nyudvikling end forvaltning på en kvalitet, der bare ikke er der, siger projektchef Karen Karlsmose Boel.
For Olivier Danvy, lektor på Datalogisk Institut på Aarhus Universitet, ligger de store udfordringer uden for selve koden.
– Det vigtige for en udvikler er at tilegne sig en forståelse for de grundlæggende principper bag de enkelte programmeringssprog, som i bund og grund blot er 'a notation to express computation'. Det er et særligt mindset, en struktureret og åben tilgang til problemstillingerne og evnen til at interagere med andre for at skabe løsninger, der er vigtige, mener han.
Olivier Danvy vil også hellere fokusere på specifikation og design samt muligheden for at vedligeholde og udvikle koden over tid end detaljerne i de enkelte sprog. Men som i de talte sprog er det faktisk en fordel at have et stort register til sin rådighed.
– De problemer, som skal løses gennem programmering, er i mange tilfælde temmelig komplekse. Og for at kunne løse komplekse problemer har udviklerne brug for at kunne udtrykke sig i et sprog, der har et stort ordforråd. Man skal derfor passe på med ikke at begrænse udviklernes muligheder for at bruge sprogets mange facetter blot for at gøre det forståeligt for de mange. Jeg kender til et konkret eksempel, hvor udviklerne ikke måtte bruge pointers i deres kode for ikke at gøre den for kompleks, og det er efter min mening helt galt, mener han.
Ifølge Olivier Danvy er kodekvaliteten dog generelt steget ikke mindst på grund af større anvendelse af formelle modeller og værktøjer til at analysere og teste programmerne.
Selvom de fleste således kan blive enige om, at analyse, design og alt det andet er meget vigtige elementer, så er der stadigvæk nogle kodelinjer, der skal skrives. Og som du kan se af eksemplerne på denne og følgende sider, er der gode og mindre gode måder at gøre det på.
PRINT