Innlegg
Mestring av håndverket: Essensielle ferdigheter for en senior programvareingeniør
31. oktober 2012 • 4 min lesing

Når jeg hører “Senior Developer” 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 ytelsesbottlenecker, men vet ikke å pre-optimalisere. Denne personen vil utnytte asynkron programmering, køing, caching, logging, sikkerhet og persistens når det er hensiktsmessig. Når de blir spurt, kan de gi en detaljert forklaring på 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 objektorientert i hjertet. De er dyktige i risikostyring og viktigst av alt kan de kommunisere det nevnte til sine jevnaldrende.
Hva er mestring? Det er en generelt akseptert idé om at for å mestre ENHVER ferdighet tar det 10 000 timer med repetisjon for menneskekroppen og sinnet å forstå og internalisere en ferdighet. Dette er skrevet på lengde i Malcolm Gladwells bok Outliers.
Noen eksempler fra Malcolm Gladwells Outliers er:
Mozart hans første konsert i den unge alderen av 21 år. Som ved første øyekast virker ung, men han har 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 brukte 3 år i Tyskland og spilte omtrent 1200 ganger på forskjellige steder, hver gang i 5 til 8 timer. De dukket opp igjen som The Beatles vi kjenner og elsker i dag.
Og til slutt, Bill Gates i alderen 20 år droppet ut av Harvard for å grunnlegge Microsoft. For noen kan dette virke dumt, men vurdert ved 20 år hadde han brukt nesten halvparten av sitt unge liv på programmering. I 1975 hadde kanskje bare 50 mennesker i verden erfaringen han hadde. Hans erfaring ga ham innsikten til å se fremtiden i Microsoft.
Peter Norvig diskuterer også 10 000-timersregelen i sitt essay “Teach Yourself Programming in Ten Years”.
I boken Mastery by George Leonard gis det stor detalj om hvordan man mestrer en ferdighet. Man må øve på ferdigheten igjen og igjen og igjen. Jo mer repetisjon, jo mer blir du klar over forskjellene i hver repetisjon. Bare med denne innsikten kan du bli bedre.
Programvareindustriens titler (Junior, Mid-Level og Senior) er villedende og inkonsistente fra organisasjon til organisasjon. Jeg har jobbet med selskaper som definerte en Senior Developer 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, men de ble likevel ansett som Senior Developers.
Det må være en bedre og mer objektiv måte å måle ferdighetene til en programvareingeniør på. John Haugeland har kommet opp med en matrise for dataprogrammererens ferdigheter. Den gir en felles, objektiv måte å måle en programmerers ferdighetsnivå, som ellers er overlatt mest 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 seg for å forbedre sin respektive disiplin. Noen eksempler inkluderer: Ted Neward, Uncle Bob Martin, Donald Knuth, Oren Eini, Peter Norvig, Linus Torvalds. Dette kan endres avhengig av dine ferdigheter.
Senior (7 til 10+ år, Nivå 3) er en som har brukt de siste 10 000 timene på programmering i en spesifikk sjanger. Det er en sterk forståelse av designmønstre. De utnytter asynkron programmering, køing, caching, logging, sikkerhet og persistens når det er hensiktsmessig.
Det er helt mulig at en Senior aldri når Luminary. Luminary er ofte funnet som taler og skribenter. 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 uavhengig og lager robuste løsninger. Imidlertid har de ennå ikke erfaring med å lage eller vedlikeholde store eller komplekse systemer. Generelt sett er Mid-Level-utviklere flotte med komponentnivåutvikling.
Junior (1 til 3 år, Nivå 1) er en som forstår det grunnleggende om programmering. De har enten en grad i programvareutvikling eller informatikk eller de er selvlært. Deres kode blir kontinuerlig gjennomgått. Veiledning gis med hensyn til algoritmer, vedlikeholdbarhet og struktur.
Forfatter: Chuck Conway er en AI-ingeniør med nesten 30 års erfaring innen programvareutvikling. Han bygger praktiske AI-systemer—innholdspipelines, infrastrukturagenter og verktøy som løser virkelige problemer—og deler det han lærer underveis. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube og på SubStack.