Innlegg
Å mestre håndverket: Essensielle ferdigheter for en senior programvareutvikler
31. oktober 2012 • 4 min lesing

Når jeg hører “Senior Utvikler” tenker jeg på noen som har mestret programmering. Jeg tenker på en person som kan designe, kode og teste et system. De kan snakke om systemarkitektur eller komponentdesign. De forstår og bruker designmønstre. Denne personen kan forutse ytelsesflaskehalser, men vet å ikke pre-optimalisere. Denne personen vil utnytte asynkron programmering, køer, caching, logging, sikkerhet og persistering når det er hensiktsmessig. Når de blir spurt kan de gi en detaljert forklaring av deres valg og fordeler og ulemper. I de fleste tilfeller har de mestret objektorientert programmering og design, dette er ikke absolutt andre språk som javascript, F#, scheme er kraftige og er ikke objektorienterte i hjertet. De er dyktige i risikostyring og viktigst av alt kan de kommunisere det nevnte til sine kolleger.
Hva er mestring? Det er en generelt akseptert idé, at for å mestre ENHVER ferdighet krever det 10 000 timer med repetisjon for at menneskekroppen og sinnet skal forstå og internalisere en ferdighet. Dette er skrevet utførlig om i Malcolm GladWells bok Outliers.
Noen eksempler fra Malcolm GladWells Outliers er:
Mozart sin første konsert i den unge alderen av 21. Som først virker ungt, men han hadde skrevet musikk siden han var 11 år gammel.
The Beatles ble opprinnelig avvist. De ble fortalt at de ikke hadde det som skulle til og burde vurdere en annen karrierevei. De tilbrakte 3 år i Tyskland og spilte omtrent 1200 ganger på forskjellige steder, hver gang var 5 til 8 timer lange. De dukket opp igjen som The Beatles vi kjenner og elsker i dag.
Og til slutt, Bill Gates som 20 år gammel droppet ut av Harvard for å grunnlegge Microsoft. For noen kan dette virke dumt, men vurdert at han som 20-åring hadde tilbrakt nesten halvparten av sitt unge liv med programmering. I 1975 hadde kanskje bare 50 personer i verden den erfaringen han hadde. Hans erfaring ga ham innsikten til å se fremtiden i Microsoft.
Peter Norvig diskuterer også 10 000 timers regelen i sitt essay “Teach Yourself Programming in Ten Years”.
I boken Mastery by George Leonard, gis store detaljer om hvordan man mestrer en ferdighet. Man må øve på ferdigheten om og om og om igjen. Jo mer repetisjon, jo mer blir man klar over forskjellene i hver repetisjon. Bare med denne innsikten kan du bli bedre.
Programvareindustriens titler (Junior, Mid-Level og Senior) er misvisende og inkonsistente fra organisasjon til organisasjon. Jeg har jobbet med selskaper som definerte en Senior Utvikler som noen som hadde 5 år eller mer erfaring. Det er ingen omtale av kvaliteten på erfaringen, bare at de har sittet foran en datamaskin i 5 år. I arbeid med disse folkene hadde mange av dem ennå ikke forstått objektorientert programmering, likevel ble de betraktet som Senior Utviklere.
Det må være en bedre mer objektiv måte å måle ferdighetene til en programvareingeniør. John Haugeland har kommet opp med en dataprogrammerers ferdighetsmatrise. Den gir en felles, objektiv måte å måle en programmerers ferdighetsnivå, som ellers stort sett overlates til magefølelse.
Når jeg ser på programvareingeniører ser jeg 4 nivåer av ferdigheter: Luminary, Senior, Mid-Level og Junior.
Luminary (10+ år) er en som har mestret en ferdighet og har satt i gang med å forbedre sin respektive disiplin. Noen eksempler inkluderer: Ted Neward, Uncle Bob Martin, Donald Knuth, Oren Eini, Peter Norvig, Linus Torvalds. Dette kan endre seg avhengig av ditt ferdighetssett.
Senior (7 til 10+ år, Nivå 3) er en som har tilbrakt de siste 10 000 timene med programmering i en spesifikk sjanger. Det er en sterk forståelse av designmønstre, De utnytter asynkron programmering, køer, caching, logging, sikkerhet og persistering når det er hensiktsmessig.
Det er meget mulig at en Senior aldri vil nå Luminary. Luminary’er finnes ofte som foredragsholdere og forfattere. De prøver aktivt å påvirke sin disiplin.
Mid-Level (4 til 6 år, Nivå 2) er en som forstår daglig programmering. De jobber selvstendig og skaper robuste løsninger. Imidlertid har de ennå ikke opplevd å skape eller vedlikeholde store eller komplekse systemer. Generelt er Mid-Level utviklere flotte med komponentnivå utvikling.
Junior (1 til 3 år, Nivå 1) er en som forstår det grunnleggende i programmering. De har enten en grad i programvareteknikk eller datavitenskap eller de er selvlærte. Koden deres blir kontinuerlig gjennomgått. Veiledning gis med hensyn til algoritmer, vedlikeholdbarhet og struktur.
Forfatter: Chuck Conway spesialiserer seg på programvareutvikling og Generativ AI. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube.