Hunslet007.jpg

Hvordan musikkhøyskolen lærte meg å unngå knuste vinduer

Jeg har føttene mine godt plantet innenfor mange ulike grener. Grenene jeg bruker mest tid på er programmering og musikk. Når man driver med to helt forskjellige ting til samme tid, er det alltid gøy å oppdage fellesnevnere.

Dette er historien om hvordan musikkhøyskolelærdom gjorde meg til en bedre programmerer.

Noe av det mest krevende som pianiststudent på NMH var innstuderingen. Man skulle tro at fingergymnastikken var det vanskeligste. Likevel, den mentale utholdenheten man trengte for å lære seg side etter side fulle av noter var av en annen verden, og noe av det mest krevende jeg ble utsatt for i løpet av min tid som pianostudent. Å spille raske løp opp og ned tangentene ble mer som en joggetur. Overkommelig og enkelt å forholde seg til. Å lære seg sytten sider med en betraktelig høyere prosent av blekk enn hvitt papir, derimot.. Usj.

Dette førte til at man ble nødt til å finne effektive innøvingsmetoder. Vi stod heldigvis ikke på bar bakke; innstudering var et eget fag, hvor jeg og resten av pianostudentene i mitt kull møtte opp i klasserommet for ukentlige lektyrer i notelesing og memorisering. Dette var likevel ganske generell lærdom vi fikk i disse timene, og det ble dermed opp til den enkelte av oss å finne ut hva som passet best for våre individuelle vaner, ønsker og behov.

Etter noen måneder, klok av skade, fant jeg frem til en metode som viste seg å forbli den mest effektive av dem alle. Den gikk som følger:

  1. Lær hele stykket godt nok til å kunne spilles gjennom uten nevneverdige kriser.
  2. Legg det bort i to-tre dager, øv på noe annet i dette tidsrommet.
  3. Plukk opp stykket igjen, spill det like godt som det ble spilt i steg en.

Det interessante er at det var ikke steg to i seg selv, altså ventingen, som utgjorde noen forskjell. Magien lå i vissheten om at jeg skulle ha en pause i noen dager (steg to) for å så kunne spille det like godt igjen noen dager senere (steg tre). Det førte til at jeg jobbet mye mer fokusert og grundig i steg en, og passet nøye på at alle fraser og løp og akkorder og fortendeler ble innøvd godt nok til å tåle disse to-tre dagene med tid borte fra stykket.

Jeg har nylig oppdaget en sammenheng mellom denne innstuderingsteknikken og programmering.

En programmerer mener stort sett ekslusivt en av disse to tingene:

  • Programmerer A: Det er lurt å noen ganger starte et prosjekt helt på nytt, og fjerne all koden man allerede har, slik at man kan begynne med blanke ark. Da kan man ta i bruk de nyeste teknologiene, bli kvitt dårlig og gammel kode, gjøre endringer i det grunnleggende rammeverket i koden o.l.
  • Programmerer B: Det er lurt å aldri starte et prosjekt helt på nytt, men heller kontinuerlig oppdatere kodebasen og holde den i god stand. Da kan man også lett ta i bruk nye teknologier, oppdatere gammel kode og gjøre endringer i det grunnleggende rammeverket i koden, akkurat som når man kaster alt starter helt på nytt, fordi man har en såpass solid og fleksibel kodebase.

Lærdommen fra musikkhøyskolen fører til at jeg holder med Programmerer B.

Hvis man som Programmerer A vet at man om et år eller to kommer til å kaste all koden man har, og starte helt på nytt, kan det føre til at man ikke bryr seg så mye om kvaliteten på koden man skriver — den skal jo uansett kastes en eller annen gang i fremtiden.

Hvis man derimot er Programmerer B, og vet at man gifter seg med all koden man skriver, og aldri kommer til å starte på nytt, men blir nødt til å forholde seg til den samme kodebasen hele tiden, kan det føre til at man bryr seg mer om kvaliteten på koden man skriver — man skal jo tross alt leve med den en stund.

På samme måte som vissheten om fremtidige kvaler viste seg å fungere godt når jeg innstuderte pianostykker, fungerer vissheten om at man skal leve med koden man skriver i all fremtid på samme måte. Det fører til at man jobber grundigere i nåtiden, slik at man forenkler sin egen fremtid.

Dette berører også Broken Window-teorien (derav artikkelbildet). Den sier at det er betydelig forskjell på å ikke ha noen knuste vinduer i et hus, og å ha ett knust vindu. Ett knust vindu fører fort til flere knuste vinduer, og da man har lett for å bli forsømmelig og tenke «ja, ja, det er jo allerede et knust vindu her, et til kan da ikke gjøre noen stor skade». Så baller det på seg.

Å vite at man i fremtiden kommer til å kaste all koden man har, er i seg selv et «broken window». Akkurat som med knuste vinduer, tenker man «Ja, ja, koden skal jo kastes uansett, så litt dårlig kode akkurat bare her kan da ikke gjøre noen stor skade».

Noen ganger er det likevel best å kaste alt man har og begynne på nytt. Hva man skal velge, er situasjonsbetinget. Jeg er likevel sikker på på at det er usunt å som en standard skulle starte på nytt, da det kan føre til late programmerere. La det heller være unntaket å starte på nytt.

6e7ddb6784d284c385f3f0f307ebf90d?d=http%3a%2f%2fblogg.shortcut.no%2fimages%2fno_gravatar

Godt skrevet! Jeg er veldig enig, og etterstreber selv å være type B. Som du sier blir det i sjeldne tilfeller alikevel nødvendig med en scrap-and-rewrite, men dette følger (for min del) som oftest av at man har både slurvet/gjort dårlige vurderinger underveis OG at forutsetningene har endret seg såppass at det begynner å bli ubekvemt å bøye kodebasen stort lengre.

Men å etterstrebe brukbar kode – også i fremtiden – er en knallgod regel å jobbe etter. Bra jobba!

61e763d2de3542289fa2d754d881fcf6?d=http%3a%2f%2fblogg.shortcut.no%2fimages%2fno_gravatar

Veldig bra artikkel! Jeg tror tilnærmingen din må til for å holde ut i dette yrket i år etter år. Den skuffelsen man i løpet av en lang karriere er dømt til å oppleve når ting ikke er så perfekt som man hadde tenkt seg, gjør nok at mange slutter i yrket etter ganske få år og begynner med noe annet. Sånn etter to år som utvikler i et eller annet konsulentfirma tenker man at “nå kan jeg programmering, nå kan jeg begynne med salg”. For oss andre er det vel mer sånn at jo mer man lærer, jo mer forstår man at man ikke kan. Trikset er å finne en måte å holde ut smerten i mellomtida, og jeg tror det er det du beskriver her.

Mange av de som har holdt på med utvikling lenge og fortsatt trives med det har nok nærmest en zen-aktig tilnærming til profesjonen sin. All kode kan forbedres, og det går an å utvikle teknikker for å håndtere og forbedre selv den verste grisekoden man kan tenke seg. Jeg tror både TDD (Test-Driven Development) og refactoring befinner seg i denne kategorien.

Et veldig bra prinsipp å jobbe etter er Uncle Bob’s speiderregel: etterlat deg alltid koden i bedre tilstand enn du fant den.

No_gravatar

Interessant. Tror du er inne på noe her ;)


Gravatar-aktivert. Les mer om gravatar.
E-postadressen vil ikke vises på siden