Paniikkikoodi, uuden ohjelmoijan riesa
Uusien ohjelmoijien keskuudessa yleisin virhe on koodata itsensä suohon. Mikä saa ohjelmointinoviisin hukuttamaan itsensä monimutkaisuuteen?
Olen ollut ohjelmoinnin opetuksessa tavalla tai toisella mukana useita vuosia. Aloitteleva ohjelmoija joutuu opettelemaan paljon uutta ja suhtautumaan tietokoneeseen ehkä ensimmäistä kertaa elämässään loogisena automaattina maagisen sijaan. Muutos ajattelutavassa voi olla raju, ja virheitä syntyy väistämättä. Eräs toimintatapoihin liittyvä virhe on silmiinpistävän yleinen ja merkitsee mielenkiintoista taitekohtaa aloittelevan ohjelmoijan ajattelutavan kehittymisessä.
Kyseessä on ilmiö, jota kutsun paniikkikoodirefleksiksi. Kun koodista tulee niin monimutkaista ettei ohjelmoija itse enää pysty hahmottamaan ja ymmärtämään sitä, hän yrittää korjata ohjelmointivirheitä lisäämällä ohjelmakoodia ”satunnaisesti”. Muuttujia, ehtolausekkeita, silmukoita, mitä vain kielen ominaisuuksia tuleekaan mieleen!
Koska olen itse korjannut lukemattomien opiskelijoiden paniikkikoodia, olen alkanut pohdiskelemaan, mikä tekee siitä niin yleisen toimintatavan ohjelmointinoviisien keskuudessa. Uskon, että se juontuu ohjelmointia opettelevan tavasta hahmottaa kirjoittamaansa koodia. Ennen kuin ymmärtää ohjelmointikieltään sujuvasti, on ulkoa opeteltujen rakenteiden varassa.Valitettavasti koodin lisääminen summamutikassa tuottaa harvoin halutun tuloksen. Oikeastaan se on jopa haitallista, sillä ohjelmakoodin monimutkaisuus lisääntyy näin entisestään ja ohjelmoija on entistä pahemmassa pulassa! Tällöin saatetaan tarvita edistyneemmän ohjelmoijan apua, jotta koodi saadaan palautettua sellaiseen tilanteeseen jossa aloitteleva ohjelmoija ymmärtää sen toiminnan, ja voi jatkaa sen kehitystä itse.
Uskon että ”paniikkikoodin” syntyperä on ohjelmointikielestä opituissa ”fraaseissa”, niiden sekoittumisessa keskenään ja aloittelevan ohjelmoijan toistaiseksi puutteellisessa ymmärryksessä siitä, mitä ulkoa opetellut rakenteet tarkoittavat. Kun ohjelma ei toimi odotetusti, syytä lähdetään hanakasti etsimään siitä että jokin tutuista rakenteista puuttuu, sen sijaan että analysoitaisiin valmiin koodin toimintaa. Vertauksena voisi käyttää vieraalla kielellä puhumista. Ranskaa osaamaton pääsee vähän aikaa helpommalla opettelemalla tärkeitä fraaseja eri tilanteisiin – kuten ”L’addition, s’il vous plaît!” – sen sijaan että perehtyisi sanastoon ja kielioppiin tarpeeksi voidakseen tuottaa jokaiseen tilanteeseen sopivan lausahduksen lennossa.
”Käytin sisäkkäisiä silmukoita edellisessä ohjelmassa kun oli monta lukua syötteenä, ehkä tarvitsen tässäkin toisen silmukan” tai ”Laskun tulos on väärin, ehkä tarvitsen tässä toisen muuttujan tai taulukon johonkin väliin”. Epäilen myös, että ohjelmointikielen valinnalla on paljon merkitystä siihen miten koodikäsitys kehittyy. Esimerkiksi Javaa ohjelmoiva joutuu latomaan koodiinsa paljon ”loitsuja” saadakseen edes Hello World! -ohjelmansa kääntymään, mikä osaltaan voi vaikeuttaa ohjelmakoodin hahmotusta ohjelmointiuran alkutaipaleella.
Mitään pysyvää vahinkoa en kuitenkaan usko paniikkirefleksin aiheuttavan. Tästä kivuliaasta kasvuvaiheesta ohi pääsevät ohjelmoijat oppivat lukemaan ohjelmakoodia loogisesti ja hahmottamaan kielen rakenteet sujuvasti, ei vain ulkoa opeteltujen esimerkkien varassa. Lisääntyvä ymmärrys käytetystä kielestä ja kasvavat ohjelmointitaidot mahdollistavat selkeämmän ohjelmakoodin syntymisen, jolloin ohjelmointivirheitä syntyy vähemmän ja ne on helpompi ratkaista.
Viimeinen naula paniikkirefleksin arkkuun on kuitenkin systemaattinen virheiden etsinnän taito, joka kehittyy ohjelmoijalle hiljalleen ja poistaa ohjelmointivirheet huomattavasti paremmin kuin koodin muuntelu sokkona arvaillen. Eli kyllä se siitä!
Teksti: Kalle Viiri