- Jeg synes ofte vi mister tråden for hva som er viktig

Ukas Koder Mikael Brevik har en utfordring til deg: Ikke bruke noe bare fordi du selv synes det er interessant.

Ukas Koder Mikael Brevik, utvikler i Variant, er en kjent figur i det norske kodemiljøet. 📸: Privat
Ukas Koder Mikael Brevik, utvikler i Variant, er en kjent figur i det norske kodemiljøet. 📸: Privat Vis mer

Hvordan begynte du med koding? 👶

For hver gang jeg tenker over det tror jeg min origin story endrer seg. Det første jeg kan komme på nå var å lage "Mikael's World". Den ble utformet WYSIWYG-style i Word 95 med "Lagre som HTML". Nettsiden ble hostet på start.no sitt område på home.no.net (hvor jeg etterhvert fikk mange forskjellige nettsider).

En IT-kyndig onkel av meg viste meg hva FTP-klienter var og hvordan man kunne overføre filer. Det gikk cirka OK. Jeg fikk med alle HTML-filer, men ingen bilder. Sånn i retrospekt kan det ha vært greit. Mikael's World var en fan side av Manchester United og bildene var mange bilder av rommet mitt som var bokstavlig talt dekorert fra gulv til tak med Manu-logoen (også kalt tapet).

Etterhvert ble jeg mer interessert i dette og brukte Frontpage 2000, som utviklet seg til Dreamweaver, TextWrangler, og så videre. Jeg prøvde på et tidspunkt å lage spill i C og Basic etter bøker fra biblioteket, men web fanget meg med lettvintheten og det visuelle.

«Jeg fikk med alle HTML-filer, men ingen bilder. Sånn i retrospekt kan det ha vært greit.»

På ungdomsskolen var jeg dypt inne i EDB og gaming med CS 1.6. Den interessen utviklet seg mer til å sette opp servere, oppsett av AMX-mods, scripting av IRC bots og så videre. Sakte men sikkert ble det mindre spilling og mer programmering.

På videregående ble jeg mer involvert i nettsamfunn som Norsk Webforum og bestemte meg etterhvert for å prøve å tjene penger på det. Jeg tok noe PHP-fag fra den gang Høyskolen i Sør-Trøndelag for å prøve å bevise kunnskaper og begynte å selge til forskjellige prosjekter. Etterhvert fikk jeg forskjellige små og store prosjekter, og ble etterhvert deltidsansatt som webutvikler i et lite mediaselskap.

Pulten til Mikael Brevik skal være såpass ryddig mye fordi han sitter ute hos en kunde. 📸: Privat
Pulten til Mikael Brevik skal være såpass ryddig mye fordi han sitter ute hos en kunde. 📸: Privat Vis mer

Hva jobber du med akkurat nå? 🛠️

Som konsulent er mye veldig avhengig av hva slags oppdrag du er på. Akkurat nå sitter jeg hos Lånekassen og jobber blant annet som arkitekt under planfasen av utvikling av nye lanekassen.no.

I tillegg har det blitt mye utvikling med å "sy våre egne bukser"™ for konsulentselskapet jeg var med å starte i september i fjor. Det er mye systemer og sider som utvikles og vedlikeholdes. For eksempel en CLI skrevet i TypeScript for å rapportere noe vi kaller "selskaps-linting" for å validere i hvor stor grad vi treffer og er enig om felles mål som selskap.

En annen ting jeg jobber med er en URL-shortner skrevet i Rust hosted på AWS Lambdas via Zeits Now.sh. Hensikten er å kunne dele serialiserte URL-er med tilstand for kontrakter og avtaler vi har Open Sourcet i selskapet. Og for å mest mulig treffe alle buzzwords, selvfølgelig.

I tillegg vedlikeholder jeg en rekke Open Source-prosjekter.

Hvordan ser en typisk arbeidsdag ut for deg? ☕

Daglige rutiner er veldig avhengig av type oppdrag. Noen ganger kan det være mer skriving og møter, andre ganger kan det være mye koding. Noen har satt opp faste møter ala scrum/stand-up, andre gjør ikke det.

For tiden jobber jeg litt individuelt og har ingen faste møter, men jeg har en del forskjellige arbeidsoppgaver. Da prøver jeg å strukturere arbeidet med å ha dedikerte dager med hver enkelt arbeidsoppgave for å effektivisere og unngå bytting av kontekst. Noen ganger er kontekstbytte bra, andre ganger ikke. Har erfart at eksempelvis skriving av dokumenter er mye mer sårbart for brudd av tankerekker.

Slik ser det ut i lokalene rundt Mikael Brevik. 📸: Privat
Slik ser det ut i lokalene rundt Mikael Brevik. 📸: Privat Vis mer

Hva synes du er de mest spennende språkene, rammeverkene eller teknologiene akkurat nå? ✨

Det er forskjellige måter å se på ordet "spennende". Ofte tenker vi på det som er nytt og ukjent som er det som er spennende – og det er det jo. Men jeg vil også slå et slag for det gode gamle.

Og for de som har sett navnet mitt på kode24 før er det kanskje ikke så overraskende at jeg syns JavaScript er en fin greie. Det treffer akkurat en sweet spot for min del. Fleksibilitet til å være effektiv, enkelhet ved ønske, og jeg mener at det skalerer ved behov og disiplin. Et språk som har mye av de byggeklossene du trenger for å gjøre gode ting, og med nå fantastiske verktøy og miljø som beveger seg. Det er som en mer tilgjengelig LISP, men mer fleksibel ML.

Men det er så klart mange andre ting som er spennende også. Selv om jeg nettopp sa at JavaScript er som en mer fleksibel ML, gjør det å kode i ML meg alltid litt glad. Det kan være at det ofte er for at jeg da koder mindre kompliserte løsninger (gjerne kortlevde), men det gir en indre glede å komponere funksjoner i mer naturlige omgivelser. Mye av dette er det som også gjør JavaScript bra, bare at i ML er det mer sentralt. For min del syns jeg OCaml og F# treffer bra i ML-familien. Du har alle de herlige byggeklossene fra ML, men også muligheten til litt mer "pragmatisme" og imperativitet om det måtte trenges.

Så er det kanskje obligatorisk å nevne Rust her. Fra utsiden syns jeg det ser ut som Mozilla gjør mye bra med Rust. Fin grammatikk, og et typesystem med C-lignende dialekt som gir mening for meg. Nå er jeg kun i startfasen med språket, men det er mye som interesserer meg med språket og økosystemet. Dette forsterkes også ved at Rust og Mozilla har vært tidlig ute med WASM (Web Assembly) og drive dette fremover.

Hva er du mest stolt av å ha laget? 🏆

Jeg er veldig dårlig på å reflektere over hva jeg er stolt over. Jeg er ikke en veldig nostalgisk person og er sikkert alt for dårlig til å reflektere over hva jeg har gjort. Jeg lar meg ofte bli kjapt engasjert i å lære nye ting og prøve ut nye konsepter, uten å se tilbake og si meg fornøyd med noe jeg har gjort. Ofte ender jeg bare opp med å tenke: dette kunne jeg ha gjort bedre.

Jeg er selvfølgelig fornøyd med å ha vært med å starte en meetup i Trondheim på nå over 500 medlemmer og en tilhørende podcast med gode venner. Også Kortslutning med Stian Møllersen er noe jeg syns er veldig morsomt å bedrive tiden min med.

I utvikling og programmering, tror jeg at jeg er mest fornøyd med et Open Source-prosjekt kalt Omniscient.js. Dette er noe jeg lagde sammen med en tidligere kollega Torgeir Thoresen. I tidlig tid av React fantes det tanker om global topp tilstand (atom state) fra ande miljøer som for eksempel ClojureScripts Om av David Nolen. Så å løfte all tilstand opp til toppen og se på hele visningen din som en representasjon og et funksjonskall av data.

Dette var tilbake i 2014 og disse tankene hadde enda ikke satt seg helt i JavaScript miljøet. Vi tok disse konseptene fra Om og et annet ClojureScript-bibliotek kalt quiescent over til JavaScript. På denne tiden kunne man ikke bruke vanlige funksjoner med React og det var ikke så vanlig å tenke på immutable datastrukturer. Så vi implementerte da Ominscient.js som var en abstraksjon på toppen av React som tillot bruk av komponenter som vanlige funksjoner, mulighet til å ta inn immutable datastrukturer på en effektiv måte og en måte å oppdatere tilstand på til en såkalt "render loop".

Mye av disse konseptene er nå vanlig, og det var mange som jobbet på det på den tiden og, men vi var ganske tidlig ute og fikk noe anerkjennelse for det. Det som gjorde det så kult er at det var en liten brikke i å drive utviklingen av grensesnitt i for web-applikasjoner slik vi kjenner det i dag. Vårt lille bidrag i å kvitte seg med MVVM, MVC, MV* for Web og over til en mer passende modell i våre øyne. Det var også noen som takket oss på Twitter for at vi fikk React over til å støtte funksjoner i core. Dette var selvfølgelig ikke vår fortjeneste, men vi tok det uansett! Selv flere år siden Omniscient var "på topp" i populæritet, har fortsatt noen i React Core Teamet kommet bort til meg og spurt om jeg var "that Omniscient guy". Som er helt overfladisk å være fornøyd med, men for min del er det en indikasjon på at vi har bidratt til utviklingen på en måte. Hele denne historien har jeg skrevet mer om i en bloggpost.

Hva er det vanskeligste ved å være utvikler? 🤷

Jeg syns Stian svarte på dette spørsmålet veldig godt i en tidligere utgave av Ukas Koder, så jeg kan prøve å gå i en litt annen retning.

«Det er ofte lett å ha skylapper som utvikler.»

Jeg syns ofte det kan være vanskelig å se sammenheng mellom årsak og virkning som utvikler. Å se om en kode fungerer eller ikke er ganske greit for det meste, men hva med impact av den koden? Hva fører den til for brukere? Hva gjør den om ett år? Hvordan påvirker den utviklere som skal sitte med den etter jeg har gjort noe?

Det er ofte lett å ha skylapper som utvikler. Lett å tenke at eneste utfall av kode er resulterende tekst etter at den er kjørt, men det har andre virkninger. Når jeg tenker meg om kan det være det samme som Stian skriver, bare med andre ord?

Hva synes du norske utviklere bør bli flinkere på? 🙋

Fortsetter tråden fra forrige spørsmål og hviler meg på Stians flotte svar fra en tidligere utgave. Nå pleier jeg egentlig ikke å ville peke fingeren på andre og si hva andre burde bli bedre til, men jeg er veldig flink til å tenke over hva jeg burde bli flinkere på.

En ting er prioriteringer og perspektiver. Jeg syns ofte vi som utviklere har en tendens til å miste tråden for hva som er viktig. Vi henger oss ofte opp i hva vi syns er viktig, og ikke nødvendigvis hva produkteier sier, eller hva kunder og brukere opplever. Vi blir for lett distrahert med det vi anser som morsomme oppgaver og nedprioriterer "viktige" oppgaver. Nå er det ingen skam i å prøve å ha det morsomt på jobb, men det er noe jeg ser på som en utfordring når man skal prøve å prioritere.

Det finnes mange gode kodekvalitetsprinsipper med å tenke enkelt, men det kan også hjelpe med prioriteringer. Trenger man virkelig å automatisere en oppgave man gjør én gang? Må man ta i bruk noe man syns ser interessant ut bare for at det ser interessant ut? Det kan være vanskelig å ta "kjedelige valg". Særlig i en verden som ofte er "optimalisert rundt hype".

Hva liker du å gjøre når du ikke jobber? 🕹️

Jeg tror jeg er et veldig dårlig eksempel å bruke når det kommer til hobbyer. Stort sett alt jeg gjør er knyttet opp mot programmering på en måte. Jeg lager to podcaster om programmering (BartJS Podcast og Kortslutning), lager kodevideoer når jeg får tid (Kodesnutt.io), og jeg skriver bloggposter, har foredrag og jobber på Open Source.

«...gjøre research på utstyr, for å kjøpe ting jeg ikke trenger.»

Med det, nyoppstartet selskap og barn er det ikke mye tid til andre fritidssysler. Jeg bruker disse tingene til å få utløp for andre interesser derimot. Som å lage film og lyd via kodevideoer og podcast. Noen ganger lurer jeg på om dette egentlig bare er for å få tilfredsstilt min virkelige hobby: gjøre research på utstyr for å kjøpe ting jeg ikke trenger. Enten det er mekaniske tastatur, penner, vinylplater, tegneserier, lydutstyr, kamerautstyr, headset og så videre.

Mitt nyeste innfall er å bli flinkere til å ta bilder og lage video. Så etter mange timer med research og dager med å late som jeg bare ser, har jeg oppgradert kamera. Så nå er planen å se om jeg får til å ta noen fine landskapsbilder og kanskje lage noen små intervju og/eller dokumentarvideoer.