There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.

C. A. R. Hoare

Design er en pågående jobb som programmerer. Det handler om å ta stilling til hvilke undersystemer som kan skilles ut som selvstendige komponenter, hvordan disse skal kommunisere, og på et lavere nivå, hvilke datastrukturer og abstraksjoner vi trenger. Målet med ethvert design er å finne en robust løsning som slår en god balanse mellom fleksibilitet, og kost i form av hvor lang tid det tar å komme i mål.

Et godt design tåler å få nye, uventede krav stilt mot seg uten å kollapse; altså at man må skrive om hele eller store deler av løsningen for å komme i mål. Et godt design tar også hensyn til at systemet skal driftes og leve videre etter at det første utviklingsprosjektet er over.

Mange Kodemakere har hatt rollen arkitekt i prosjekter, og i denne rollen har man det formelle ansvaret for det overordnede designet i systemet. Også de av oss som ikke har hatt den formelle rollen arkitekt har mange tanker og meninger om programvaredesign, noe som både kommuniseres til våre omgivelser i det daglige såvel som gjennom foredrag på konferanser og andre fagsamlinger.

Våre anbefalinger

Programming Antiobjects
Anbefalt av Kristoffer

Et foredrag på OOPSLA-konferansen i 2006 satt tradisjonell objektorientering og simulering litt på hodet. Istedenfor å la objektene leve sitt eget liv og styre seg selv, kan man gi liv til omgivelsene rundt dem. Lukten av Pacman setter seg i spillbrettet, og det er brettet som styrer spøkelsene etter Pacman. Lukten av fotballen sprer seg i gressmatten, og spillerne blir sendt i retning av den. Oppgaven deres blir å sparke ballen vekk fra stanken fra det andre laget. Det gir interessante omganger fotball, særlig hvis det er flere baller på banen.

Inventing on principle
Anbefalt av Magnus

Fantastisk foredrag av Bret Victor. Programmering er et kreativt yrke. Det er antageligvis mye lettere å være kreativ dersom man kan ta, se, observere og endre helt fritt og dynamisk på et kjørende program. Hadde det ikke vært digg å kunne spole tilbake det du nettopp gjorde i appen din, endre noen parametere og så kjøre på nytt. Kanskje tom for å sammenligne. Dette foredraget var bl.a med på å inspirere mye av tankene rundt verktøy som Light Table og programmeringspråket Elm

Growing a language
Anbefalt av Robin

Guy Steele Jr., som har vært involvert i utviklingen av Scheme, Common Lisp og Java, forklarer hvor viktig det er at programmeringsspråk gir brukerne muligheten til til å tilpasse språket til sitt domene. For å illustrere poenget sitt starter Steele med å kun bruke 3-stavelses ord, som han så bruker for å definere 4-stavelses ord slik at han videre kan definere mer avanserte konsepter.

Simple made Easy
Anbefalt av Robin

Rich Hickey, skaperen av Clojure, forklarer hva han mener er den absolutt viktigste egenskapen for at programmer skal være lett å videreutvikle over tid. Dette foredraget satte ord på ting jeg selv syntes var vanskelig innenfor systemutvikling, og har endret hvordan jeg selv utvikler programvare.

Test-driven JavaScript Development
Anbefalt av Magnus

Dette foredraget av Christian Johansen var en grunnene til at jeg i stor grad kastet jQuery-scripting på båten. En inspirerende og lærerik testdrevet sesjon hvor man lager en autocomplete-komponent.

Våre foredrag

Kjapp gjennom gang av sukksesser og utfordringer med å innføre elektronisk søknad for Bostøtte

Bør staten drive med softwareutvikling? Hva skjer når man setter utvikling ut på anbud?

Smidig utvikling handler om å være reaktiv fremfor proaktiv. Istedenfor å analysere i forkant, validerer man antakelsene sine fortløpende. Vi må slutte å be om avklaringer i forkant og heller test ut teoriene våre og sjekke om de faktisk fungerer i virkeligheten.

I smidig produktutvikling er det viktig med fortløpende validering av løsningen. Man vil finne potensielle feil raskt. Man skal ikke vente med at applikasjonen er ferdig før man viser den. Det at de første leveransene er mangelfulle er en del av den nødvendige prosessen og må ikke sees som feil.

Architects in Scrum is like mayonnaise in cake

Hvorfor hierarkisk rollefordeling med ledere og arkitekter ikke fungerer så bra med smidige prinsipper.

Det er de smarteste folkene som innfører byråkrati

Alle klager over byråkrati, så hvordan har det seg at vi til stadighet innfører mer av det?

Våre blogginnlegg

UX-inspirasjon fra din egen verktøykasse

Vi utviklere lager våre egne verktøy, og har funnet noen veldig gode metoder for å gjøre oss selv produktive. Men implementerer vi dette i produktene vi lager? La oss se på konsepter vi allerede deler med brukerne våre, og idéer jeg syns vi bør dele mer av.

Dumme klienter

Dette ser ut til å ha blitt et kåseri om data og dumme klienter. Ikke dumme oppdragsgivere, altså, men noen veldig dumme web-klienter.

Noen artige tekniske detaljer fra Kodekamp

Jeg arrangerte Kodekamp i helga, en hjemmesnekret konkurranse i kodeskriving. Det var intenst og gøy. Her er en liten samling fikse finurligheter og lett underholdende anekdoter derfra.

Spør oss om Design

Christin

Anders

Jean Niklas

Sindre