Hva gjør en skikkelig god utvikler bedre enn andre?

Jeg har tenkt på det noen ganger, hva er det som faktisk gjør at jeg synes en utvikler er bedre enn en annen. Hvem er de og hva er det de gjør som jeg ikke gjør? Og hvordan kan jeg bli bedre?

I huset mitt har det vært en snekker som bryr seg om faget. Du ser det på listene. Noen ganger kommer jeg inn i kode hvor jeg tenker det samme. Det er så ryddig, så oversiktlig og lett å lese. Det er kunst (høhø)! De beste utviklerne jeg kjenner bryr seg om det. De holder det ryddig og gir gode navn.

De beste utviklerne jeg kjenner er gode med folk. De er gode på å få formulert hva de mener og gode på å lære opp andre. De er også gode på å stille de riktige spørsmålene, både før og underveis. Spørsmål som gir de best mulig oversikt over det de prøver å oppnå. Og det bringer meg over på mitt neste punkt.

Jeg tror de er bedre enn andre på å få oversikt. Jeg opplever at de oftere enn andre evner å stoppe opp, ta et skritt tilbake, se på saken på nytt og så eventuelt gjøre nødvendige endringer. Vi andre er så fokuserte på å få gjort de oppgavene vi har for øyeblikket (som andre ofte har formulert og lagt føringer for) at vi glemmer det store bilde. Vi fortsetter i samme spor og blir for opptatt av detaljer.

De beste utviklerne jeg kjenner tar saken i egne hender, men er også opptatt av å høre andres meninger. De får ting gjort. De ender ofte opp som “the go to person” på mange ting fordi det er de som har laget det. Det er de som tok seg bryet med å plukket ut noe av koden de hadde skrevet og puttet det inn i en pakke slik at alle kunne bruke det. De tok seg også bryet med å refakturere den andre pakken slik at den ble bedre å bruke, mer oversiktlig og lettere å lese.

De beste utviklerne jeg kjenner kan mye. Og jeg tror de kan mye fordi de er flinkere enn andre på å ta i bruk nye ting. Personlig gjør jeg som regel det jeg kan fra før fordi det er mest effektivt. Det får jobben gjort så fort det er mulig for meg å gjøre den. Ofte skriver jeg også kode på en bestemt måte av ren vane og jeg tror de beste er flinkere til å bryte ut av den vanen og implementere nye måter å løse ting på.

Dette ble et langt innlegg så jeg stopper her. Men hva tenker dere? Hva gjør en god utvikler god?

3 Likes

du nevner mange egenskaper til en god utvikler, en god utvikler kan nok mye men de vet ikke alt, allikevel kan de ta ny lærdom og se hva som fungerer og ikke fungerer i det store bildet… og ikke minst, være åpen for ny kunnskap, også fra juniorer.

2 Likes

Veldig interresant tema! Og jeg tror dere begge er inne på noe her! Enig i at kode er kunst! :smiley:

Det er viktig som Lostfields skriver å være åpen for ny kunnskap, hvor enn man finner den. Kommer litt tilbake til dette i sammenheng med intuisjon.

En annen viktig egenskap er også det å kunne se begrensingene man har, og jobbe med de. En klok man sa en gang at de mest kreative løsningene blir laget innenfor sunne begrensninger. Altså har man for mange blir det vanskelig å være kreativ, har man for få så blir også, tro det eller ei, faktisk like vanskelig å være kreativ (da er mulighetene er for mange til at man klarer å gjøre kloke valg, eller få oversikt, blant annet).

Leste i en bok en gang (enten Refactoring eller The Pragmatic Programmer), at man alltid bør tenke over det man gjør, og alltid tenke “kan jeg gjøre dette på en annen måte? Hvordan ville det isåfall blitt?”. For å kunne “få oversikt” som du sier må man fokusere på hvordan en gitt kodesnutt brukes og resultatet av kodesnutten, så er det lettere å kunne tenke nytt, tror jeg.

Til slutt tror jeg også at det handler mye om intuisjon, som jeg tror man opparbeider seg over tid. Når man studerer andres løsninger, får erfaring med ulike løsninger, studerer kode som er på språk og/eller platformer man ikke til daglig jobber med, osv, så bygger man stadig på intuisjonens muligheter til å komme på nye løsninger.

Men det aller viktigste er som du skriver å bry seg om faget :slight_smile:

Spent på å høre flere synspunkter!

Edit: Med begrensinger mener jeg ikke personlige, men i systemet/platformen/kodebasen/språket liksom :slight_smile:

1 Like

Veldig godt spørsmål, noe jeg har lurt på selv mange ganger…

Først og fremst tror jeg en god utvikler må være god på å skaffe forståelse av problemet (litt det samme som du nevner med oversikt):

  • Hva er essensen av det man prøver å oppnå?
  • Hvilket kundebehov er det?
  • Hvilken teknisk problemstilling er det man faktisk prøver å løse?

Hvis man er god på dette kan man:

  • Lage nøyaktig den løsningen som trengs, hverken mer eller mindre
  • Finne features som gir lite verdi, men som potensielt har stor utviklingskostnad / vedlikeholdskostnad, og kjempe for å sløyfe disse eller finne andre løsninger. Den beste løsninga er å gjøre ingenting (hvis mulig)
  • Finne ut hvilke kundebehov som må løses, kontra de behovene som har oppstått fordi en lang rekke med andre dårlige løsninger har ledet til et “behov”. Noen ganger er løninga å bare fjerne rekka med dårlige løsninger, og lage en enkel liten sak for å løse det egentlige behovet
  • Unngå å løse tekniske problemer man ikke har. Hvor skalerbart må det faktisk være? Gjør det noe om jeg laster inn hele denne lista hver gang, eller er den så stor at jeg må begrense, og dermed måtte holde styr på hva jeg har til enhver tid? Alle sånne små avgjørelser har mye å si over tid. Mange blir opphengt i diverse “prinsipper” som gjør det vanskelig å ta gode avgjørelser her (har selv falt i fella mange ganger).
  • Gjenkjenne fundamentale problemstillinger som har gode løsninger (parsing, graf, søk, etc). Her er man begrenset av erfaring, og uansett hvor god man er må man lene seg på andre for denne (som @Lostfields også nevner).

Hvordan man blir god på dette er jeg ikke sikker på, men det må være en kombinasjon av å hele tiden prøve, samt lære av andre man ser på som gode. Rein erfaring i antall år må også til (ref intuisjon som @Enochian enochian nevner), men er ikke nok. Det er noen som har 10 års erfaring, også er det de som har 1 års erfaring 10 ganger. Forøvrig må jeg legge til at man selvfølgelig er prisgitt hva slags ledelse/team man har og hva slags situasjon man er i. Noen av punktene ovenfor er helt umulig å få til i enkelte situasjoner, og da skifter nok meningen av en “god utvikler” litt.

Videre tror jeg det er noen personlige egenskaper som kanskje er gode å ha. Du har nevnt noen av de allerede, men jeg vil legge til / understreke:

  • Bry seg
  • Evne til empati, ydmykhet, og steelmanning (ta andre opp i beste mening / se på den sterkeste versjonen av argumentene deres), og samtidig evne å si det man mener, ikke gi etter for dårlig argumentasjon, og å kunne si nei. Ingen enkel kombinasjon altså.
  • Evne til å spørre andre om hjelp (Dette handler om å legge sin egen stolthet til side)
  • Evne til å hjelpe andre (Dette handler om å ofre sin egen produktivitet, og helst med glede)

Og når det kommer til selve koden man skriver:

  • Tenker på den neste personen som skal lese koden. Mesteparten av tida er det deg selv, så det burde i teorien være lett :stuck_out_tongue: Et pro-tip jeg leste her om dagen var å gjøre code review på seg selv. Da får man bl.a. merke smerten av 50 commits med random innhold.
  • Rydder alltid opp i litt teknisk gjeld.
  • Vurderer alltid koden kritisk, også den de ikke har skrevet selv. Kanskje er det ingen god grunn til at den ble skrevet på den måten? Finn svaret på det spørsmålet.
  • Slett kode. Ikke spar på ting bare fordi de er kule eller kjekke å ha. Minst mulig kode er målet.
  • Tredjeparts biblioteker løser ofte mange problemer man ikke har, men kompleksitet og bugs får man uansett. Er det verdt det?
  • Sov på det, eller gå en tur

Det var en lang (men samtidig veldig kort) liste over ting jeg tenker må til. Veldig interessert i å høre flere meninger om det temaet her!

1 Like