Olipa kerran kaksi koodaria: juniori ja seniori. Seniori käveli työpisteeltään kahvinkeittiminen luokse ja ohitti matkalla juniorin työpisteen. Juniori oli saanut sivuston rikki ja etsi kuumeisesti ratkaisua. Juniorin näytöllä vilahti Googlen hakusivu, samoin Stack Overflow. Ratkaisua ei kuitenkaan tuntunut löytyvän. Kun kolmaskaan ratkaisu ei toiminut, juniorin suusta kuului jo epätoivoinen parahdus.
– “Onko tätä edes mahdollista korjata”, mietti juniori hiljaa mielessään.
Viimein juniori sai sivuston toimimaan. Luojan kiitos copy-pastesta ja Stack Overflowsta! Tyytyväisenä itseensä juniori siirtyi seuraavaan tehtävään, mutta ennen kuin hän kerkesi aloittamaan, seniori tuli täyden kahvikupin kanssa työpöydän äärelle ja kysyi:
– “Ymmärrätkö myös, mitä koodaat?”
Tämä tarina ei ole tosi, mutta voisi olla. Uskoisin, että kaikki koodauksen hiljattain aloittaneet voivat samaistua tarinan junioriin – itse ainakin voin. Epätoivoinen googletus, Stack Overflown koodien suora kopiointi, tyytyväisyys ongelman ratketessa ja välitön siirtyminen seuraavaan tehtävään. Tämä on ollut minulle tuttu workflow, mutta siinä on kuitenkin yksi ongelma: välitön siirtyminen seuraavaan tehtävään.
Älä kopioi koodia kritiikittömästi
Koodaamisessa yhtä tärkeää kuin se, että saat ongelman ratkaistua, on nimittäin se, että ymmärrät mitä koodaat. Miksi ratkaisu A ei toimi, mutta ratkaisu B toimii? Koodin kopioimisessa ei sinänsä ole mitään väärää ja monesti se on jopa suotavaa, koska pyörää ei kannata keksiä uudestaan. Toisaalta on hyvä tietää edes perusteet siitä miten pyörä toimii ennen kuin sillä lähtee ajamaan. Muuten voi löytää itsensä helposti ojasta.
Koodin kopiointi tulisi siis tehdä kriittisesti ja reflektoiden. Mitä kopioidussa koodissa oikeastaan edes tapahtuu? Ilman ymmärrystä koodista avaat oven mahdollisille tietoturvaongelmille sekä vaikeutat tulevaa jatkokehittämistä ja debuggausta. Koodin tarkempi pureskelu puolestaan avaa oven järjestelmän parempaan ja syvempään ymmärtämiseen.
Koodi ei ole magiikkaa
Itse huomasin muutamia vuosia sitten, että en oikeastaan ymmärtänyt JavaScript -ohjelmointikieltä ollenkaan. Käytin JavaScriptiä onnellisesti töissä, mutta koodaukseni oli lähinnä sarja yrityksiä ja erehdyksiä. Jos sain homman viimein toimimaan, siirryin seuraavaan tehtävään miettimättä mitä olin juuri tehnyt. Kunnes lopulta turhauduin siihen, että JavaScript tuntui joka kerta olevan vain kasa maagista koodia. Tämä johti minut erilaisten videokurssien äärelle opettelemaan JavaScriptin logiikkaa ja ominaisuuksia. Nyt olen pitänyt “Javascript for dummies” -tyyppisen puheen sekä Jyväskylän että Seinäjoen WordPress Meetupeissa. Näistä ei ole jäänyt nauhoitetta, mutta voit halutessasi vilkuilla esityksen Github repoa täältä.
Olenko nyt JavaScript -guru, joka tietää kaikesta kaiken? En. Mutta ymmärrän JavaScript -koodia paremmin nyt kuin mitä ymmärsin kolme vuotta sitten. Oppimista on edelleen edessä ja siinä piileekin koodarin ammatin suola. Ei ole väliä, oletko koodannut vuoden vai kuusi vuotta, aina löytyy jotain uutta ja tuntematonta.
Kaikkea ei tarvitse ymmärtää
Ymmärrätkö myös mitä koodaat? Tähän olisi helppo todeta: “Tottakai sinun pitää ymmärtää mitä koodaat”, mutta se olisi naiivi yksinkertaistus. Jopa simppeli WordPress -sivusto on monimutkainen kokonaisuus, johon liittyy sellaisia teknologioita kuin HTML, CSS, PHP, JavaScript, MySQL, Nginx/Apache, DNS, cache, jne. Jos juniorilta vaadittaisiin näiden kaikkien ymmärtämistä ennen kuin hän voi saada mitään aikaiseksi, ei tulisi ikinä valmista. Hän joko lähtisi turhautuneena viljelemään porkkanoita tai viimein ymmärrettyään koko teknologiastackin huomaisi, että kaikki opittu onkin jo vanhentunutta tietoa.
Vaikka on siis ensisijaisen tärkeää ymmärtää mitä koodaa, rajansa silläkin. Jotta hommat tulee tehdyksi, jotain täytyy jättää abstraktioksi. Läpinäkymättömäksi laatikoksi, joka vain ottaa vastaan tiettyä inputtia ja syöksee ulos tietynlaista outputtia. Se mitä tapahtuu näiden välillä selvitetään sitten myöhemmin.