n+1 sätt att bli en bättre programmerare

IBM 1403 printout (from the power-of-two program)

Det är en enorm skillnad mellan de bästa programmerarna och de mediokra:

… many studies have shown order of magnitude differences in the quality of the programs written, the sizes of the programs written, and the productivity of the programmers. /…/ They studied professional programmers with an average of 7 years’ experience and found that the ratio of intitial coding time between the best and worst programmers was about 20:1; the ratio of debugging times over 25:1; of program sizes 5:1; and of program execution speed about 10:1.

(Notera alltså att studien jämförde programmerare som jobbade aktivt som programmerare och som hade gjort det i genomsnitt i 7 år. Alltså inte praktikanter eller studenter mot företagens superstjärnor.)

Fog Creek Softwares vd och grundare, Joel Spolsky, skriver också om detta, och är känd för att enbart vilja anställa de allra bästa programmerarna:

The real trouble with using a lot of mediocre programmers instead of a couple of good ones is that no matter how long they work, they never produce something as good as what the great programmers can produce.

En slutsats av detta är att om du är en riktigt, riktigt smart och effektiv programmerare så kan du få riktigt bra betalt och välja och vraka bland jobberbjudandena (med brasklappen att du faktiskt måste marknadsföra din kompetens också). Det kan man se exempelvis på hur mycket företagen satsar på att locka till sig oss duktiga programmerare och hur de försöker överträffa varandra i personalförmåner, lön och ”kul på jobbet”.

Hur blir man då en ännu bättre programmerare?

Peter Norvig har en del bra tips i sin artikel Teach Yourself Programming in Ten Years. (Glömde jag nämna att detta är något som tar tid? Programmering är som ett gammalt hantverk, där du behöver din lärlingstid innan du kan bli mästare.) Jeremy Morgan har också en del tips.

Det är dock viktigt att poängtera att erfarenhet inte automatiskt gör dig skickligare:

They found no relationship between a programmer’s amount of experience and code quality or productivity.

Jag skulle säga så här: att byta ramverk, programmeringsspråk eller paradigm är väldigt utvecklande. Men ju längre tid du jobbar med samma tekniker, desto mer avtar din personliga utveckling. Du kanske känner dig trygg som en expert, men du skulle förmodligen bli ännu duktigare om du utmande dig själv och lärde dig något nytt.

Boken The Pragmatic Programmer säger så här:

Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut.

Jag har själv märkt hur jag har blivit en bredare och smartare programmerare genom exempelvis min utbildning — där vi lärde oss många programmeringsspråk och teoretiska koncept. När jag har bytt jobb har jag ofta också bytt språk och ramverk, och har även programmerat en hel del på fritiden i allt från C++ till Python och Bash. Utan allt detta, tror jag att jag hade varit en mycket sämre programmerare.

Här får du därför några tips för det kommande året — för att du ska utvecklas så mycket som möjligt och bli smartare, effektivare och mer välbetald:

  • Lär dig ett nytt programmeringsspråk, helst så olikt det du vanligtvis använder som möjligt. Har du testat Ruby eller Python än? Har du skrivit något i Erlang och Objective-C? Det finns en oändlig mängd språk, och vill du tänka nytt kan Prolog eller Haskell också vara något att prova på. Har du brottats med pekare och minnesallokering i C?
  • Lär dig ett nytt MVC-ramverk för att se olika implementationer och filosofier kring MVC-mönstret (de skiljer sig åt en del). Exempel beror förstås på ditt programmeringsspråk. Eller varför inte utmana tanken med MVC och prova något annat mönster?
  • Lär dig en ny databasmodell för att utmana dina tankar om hur du kan strukturera data. Du måste tänka om när du ska lagra data i en key-value store istället för i en relationsdatabas! Exempel: MongoDB, Redis, Neo4j.
  • Lär dig ett nytt CMS eller e-handelssystem för att se hur andra system tänker kring innehåll. Om du exempelvis bara jobbar med WordPress, lär dig Joomla, Drupal eller Umbraco.
  • Lär dig en ny plattform för att helt byta kontext; skriv en app för Android, iPhone eller Windows Phone; skriv en webbapplikation; skriv ett Windows/Linux/Mac-program.

Som bonustips föreslår jag att du också läser ett par böcker inom programmering, exempelvis någon av dessa:

Hur gör du själv för att utvecklas och bli en duktigare programmerare?

Det är inte uppenbart vem som är den bästa programmeraren

På den rätt så anonyma bloggen awesomeness länkar Hising till John Cooks artikel om varför programmerare som är 10 gånger mer produktiva än sina kolleger inte får 10 gånger mer betalt.

Intressant läsning, även den podcast med Joel Spolsky som John Cook länkar till.

But just when they are being their most productive, nobody says “Wow! You were just 100x more productive than if you’d done this the hard way. You deserve a raise.” At best they say “Good idea!” and go on.  It may take a while to realize that someone routinely comes up with such time-saving insights. Or to put it negatively, it may take a long time to realize that others are programming with sound and fury but producing nothing.

Något att tänka på för alla chefer, kanske.