Coding Horror kirjoittaa, kuinka tulla paremmaksi ohjelmoijaksi ohjelmoimatta ja esittelee ajatuksen, että keskinkertainen ohjelmoija ei kokemuksen lisääntyessä muunnu taianomaisesti hyväksi ohjelmoijaksi. Hyvät ohjelmoijat tuntuvat omaavan luonnollisen kyvyn ohjelmointiin jo alusta alkaen. Asia ei tietenkään ole aivan näin yksiselitteistä ja esimerkiksi harjoittelemalla päästään parempiin tuloksiin.
Tiedetään, että on leveä kuilu ohjelmointia osaavien ja sitä osaamattomien välillä, mutta sama pätee myös ihmisiin, jotka osaavat ohjelmoida; hyvien ja keskinkertaisen ohjelmistokehittäjien välillä on suuri ero.
Jeff Atwood, Coding Horror -blogin kirjoittaja, lainaa Programmers at Work -teosta, jossa haastatellaan kuuluisia ohjelmoijia vuoden 1986 tienoilla.
Does accumulating experience through the years necessarily make programming easier?
Bill Gates: No. I think after the first three or four years, it’s pretty cast in concrete whether you’re a good programmer or not. After a few more years, you may know more about managing large projects and personalities, but after three or four years, it’s clear what you’re going to be. There’s no one at Microsoft who was just kind of mediocre for a couple of years, and then just out of the blue started optimizing everything in sight. I can talk to somebody about a program that he’s written and know right away whether he’s really a good programmer.
Jeff Atwood puoltaa Bill Gatesin ajatuksia ohjelmointitaitojen kehittymisestä ja on itsekin todennut, että hyvä ohjelmointitaito joko omataan, tai sitten sitä ei ole. Mikä sitten tekee ohjelmoijasta paremman ohjelmoijan, jos ei kokemus? Onko taitojen kehittäminen mahdotonta?
Coding Horror -blogin kirjoituksen mukaan paremmaksi ohjelmoijaksi kehitytään omaamalla ja kehittämällä intohimo kaikkeen muuhun ohjelmoinnin ympärillä. Et voi kehittyä paremmaksi ohjelmoijaksi vain pelkästään ohjelmoimalla, vaan voit vain täydentää ja parantaa jo olemassa olevaa ohjelmointitaitoasi laajentamalla sitä. Paremmaksi ohjelmoijaksi kehittymiseen tarvitaan oppimista ja kiinnostusta käyttäjistä, alasta ja bisneksestä. Mitä enemmän olet kiinnostunut eri asioista, sitä parempaa tulee työsi olemaan.
You’ve been haacked -blogi vastaa Coding Horrorin kirjoitukseen otsikolla ”Paremmaksi ohjelmoijaksi ohjelmoimalla paremmin”. Blogin kirjoittaja Phil Haack on samaa mieltä Jeff Atwoodin kanssa, että suurten kuvioiden ymmärtäminen on tärkeää etenemisessä hyväksi ohjelmistokehittäjäksi, etenkin jos olet ohjelmointitaidoissa 99 prosentin tasolla. Kuitenkaan useimmat ohjelmistokehittäjät eivät ole 99% tai edes 90% tasolla ja täten pystyvät kehittämään ohjelmointitaitojaan edellä mainittujen tärkeiden taitojen lisäksi.
Phil Haack ei tosin ole vakuuttunut, että ohjelmointitaitojen kanssa synnytään, sillä väitteen tueksi ei ole empiirisiä todisteita. Voiko ohjelmoija siis nousta 50% tasolta 90% tasolle? Haack kirjoittaakin, että viimeaikaisten tutkimusten mukaan uskomus ”synnynnäisiin lahjoihin” on vailla kovia todisteita väitteen tukemiseksi. Scientific American artikkeli ”The Expert Mind” toisaalta puoltaa Atwoodin ajatusta, että henkilön kokemus ei vaikuta suorituskykyyn, mutta lisää yhtälöön suunnitelmallisen opiskelun ja harjoittelemisen.
Suunnitelmallisella opiskelulla ja harjoittelulla ohjelmoija voi nostaa itsensä keskinkertaisuudesta hyväksi ohjelmoijaksi. Kehittymisessä ei ole kyse ohjelmoinnin määrästä, vaan ohjelmoimisesta paremmin. Mitä enemmän ja paremmin, sen parempi. Useimmilla ohjelmoijilla on vielä tilaa kehittää ohjelmointikykyjään ja ohjelmointiin liittyviä taitojaan. Ohjelmoijan osaamat oheistaidot erottavat hänet toisista ohjelmoijista ja lisäävät ohjelmoijan arvoa enemmän, kuin kehitys ohjelmointitaidoissa. Ohjelmointitaidot eivät rakennu pelkästään syntaksin, kontrollirakenteiden tai muiden teknisten ominaisuuksien osaamisesta.
Ei liene yllätys kenellekään, että harjoittelulla ja suunnitelmallisuudella kehitytään paremmaksi halutussa taidossa. Oli kyse sitten hyvää fyysistä kuntoa vaativista urheilulajeista, älykkyyttä vaativista peleistä, loogista päättelyä sisältävistä tehtävistä tai tässä tapauksessa ohjelmoinnista. Sisäinen lahjakkuus tai taipumus tiettyihin ominaisuuksiin auttaa tietylle tasolle pääsemistä, eikä kaikki välttämättä saavuta harjoittelemallakaan korkeaa tasoa, kuten urheilija suomen- tai maailmanmestaruutta. Hyväksi kehitytään kuitenkin vain harjoittelemalla, oli lahjakkuutta tai ei.
Toisaalta Atwoodin ja Haackin kirjoitusten kommenteissa heräteltiin kysymystä, miten määritellä hyvä ohjelmoija ja mikä tekee toisista ohjelmoijista parempia kuin toiset. Miten mitata koodia ja mihin verrata lopputulosta? Koodi ei ole samalla tavalla fyysinen saavutus, kuten urheilutulokset, joita voisi helposti vertailla. Tietenkin on erilaisia mittareita ja keinoja, joita koodeihin voi soveltaa.
On kuitenkin selvää, että jos ohjelmoimme enemmän, paremmin ja omaamme intohimon ohjelmointiin liittyviin asioihin, kehitymme kohti parempaa ohjelmoijaa.