9.10.11

Piiloleikkiä: ote softapäiväkirjasta


Olen piilossa. Tässä ryteikössä on kyllä piilopaikkoja, mutta minulla on pahaenteinen aavistus. Tilanne tulee kiristymään. Tiedän haukanneeni suuremman palan kuin pystyn nielemään. Sen kommunikaatioyhteyden katkaiseminen saa heidät perääni. He eivät lepää ennenkuin minut on napattu. He saattavat jo etsiä minua. On parasta vain pysyä piilossa. 
Pysyttelen hengittämättä hiljaa. Kaukainen hälinä tiivistyy varjoiksi. Varjot haravoivat maastoa. Kummallista. Aivan kuin he eivät etsisikään minua. Mitä ihmettä? Olen tainnut kuulla tästä taktiikasta, mutta luulin sen olevan vielä kaukana tulevaisuudessa. Jos heillä on käytössään tällaista tekniikkaa, olen pahemmassa kuin pulassa. He eivät etsi minua, vaan käyvät läpi kaikki mahdolliset piilopaikat. Järjestelmällisyys paljastaa kaiken. 
Kyseessä taitavat olla hakuammuntaan erikoistuneet MAGIC-joukot. He merkkaavat jokaisen nimettömän vakiopiilopaikan tällä kentällä. Tilanteen kartoitus on vasta alkua. Tiedän naamiointini hämäävän etsijöitä vielä. En piilottele vakiopoterojonon pohjalla enkä missään standardikuopassa. Niitä on kyllä kaikkialla ympärilläni. MAGIC-miehet poistuvat.

ELSE-yksiköltä piilottelukaan ei tuota vaikeuksia, kunhan en ole piiloutunut ehdon juurelle. Ennen muinoin paikallisen heimon poppamies uutti pyhästä ehdosta taikajuomaa. Taikajuoman juotuaan hän näki erilaisia tulevaisuuden visioita. Puulla lienee loogis-psykedeelisiä ominaisuuksia. ELSE-yksikkö kiinnittää robottimaisen mielenkiintonsa vain ehtojen haaroihin. Kaikki aukot tutkitaan. Pahoin pelkään, että se uusi kaveri on unohtanut paniikissa koulutuksensa ja löytyy suuren ehdon juurelta. Joukkomme hajaannuttua ei mitään ole tehtävissä. Meidän täytyy kunkin selviytyä tästä omin avuin.

Minua ei vieläkään ole havaittu, mutta pelkään tilanteen vielä tiukkenevan. He tietävät alueella olevan sabotöörejä, joten he eivät luovuta. He tietävät sabotöörejä olevan kaikkialla, aina. Yhtäkkiä läheisestä ojasta nousee periskooppi! Se kääntyilee ja tiedän pinnan alla olevan sammakkomiehen tutkivan ympäristöä. Keskeneräiset poteron kaivuut tai epämääräiset varjopaikat joutuvat vielä tarkempaan syyniin. Kommenttivuojoukot ovat erikoistuneet jokiin, järviin, puroihin, ja pääsevät uimaan jopa ojissa. Tällä kertaa he näyttävät käyttävän TAG-taktiikkaa (Terminating Ambiguities, and General unfinished business). Heillä ei täällä ole juurikaan tehtävää, tuo läheinen oja taitaa olla ainoa kosteuden läiskä tällä kuivalla tasamaalla.

Jos selviydyn vielä puoli tuntia, he kyllästyvät etsintään. Toivon niin. Nielaisen säikähdyksestä, kun kuulen erikoisjoukkojen ajoneuvojen parkkeeraavan aivan lähelle. Vaunun kyljessä lukee sotilaallisen selkeällä kirjasinlajilla “CLOSURE”. Kunpa kukaan meistä ei olisi piilossa sillan tai tunnelin päässä. Nämä joukot katsastavat jokaisen päätepisteen. Heillä on selkeä periaate. Jos kerran silta tai tunneli alkaa jostain, täytyy sen myös päättyä johonkin. Periaatteessa kyseessä on erinomainen piilottelupaikka, muttei enää CLOSURE-joukkojen ilmaannuttua. Ainut selviämisen mahdollisuus piilee näiden erikoisjoukkojen vähyydessä. Mikään symmetrinen sulkupaikka ei ole turvallinen piilo heidän ollessa kentällä.
Eivät minua löydä myöskään PTHESES-miehet, vaikka kuinka pistimet ojossa ryntäilisivät! Minä en ole niin tyhmä, että yrittäisin piilotella jokaisen kenttäkoodarin perusvarustukseen kuuluvan presedenssitaulukon ohjeiden mukaisesti loogisesti arveluttavassa laajassa ehtokasassa. Siihen kun kerran pari survaisee pistimellä, kaikki piilottelijat kyllä ilmoittavat itsestään. Kaikki tietävät legendan Kakkosrivin Kallusta. Hän oli valinnut piilopaikakseen ikivanhan, jo kelottuneen ehdon suluttoman juurakon ja käynyt siihen sen ainoan rivin viereen pitkäkseen. Lisäsuojaksi hän oli vielä vetänyt päälleen sisennyspeitteen. Kolme vuotta myöhemminkään häntä ei ollut löytynyt. Kenties hän makaa siellä edelleen.

Viimeinen vyörytys alkaa. Kun tarkka seulonta on läpikäyty, he siirtyvät suurempiin kuvioihin. CALL-tykkien keskitys liippaa läheltä. Sirpaleita sinkoilee ympärilläni, meteli on korviarepivää, mutta taidan olla vielä yhtenä kappaleena. Hiljaisuus laskeutuu taistelukentän ylle. Olen selvinnyt! Maasto on täynnä erikoisjoukkojen jälkeensä jättämiä arpia. Oikealta vasemmalle ylitseni lentää keveästi hyristen maastonkuvauskone. Vasta ensimmäinen vaihe on ohi. 
Iloitsin liian aikaisin. Pahin on vielä edessä. Maastosta otettu kuva ja kaikki erikoisjoukkojen havainnot, tikit, tutkitaan. Analyysin suorittaa merkitysten asiantuntija, eli koko kentän ja sen tuhoutuneen kommunikaatioyhteyden suunnittelija ja rakentaja. Tilastojen mukaan suurin osa meistä katoaa analyysin yhteydessä. Monien kohtalo on kadota analyysissa.

Keitä me olemme? Me olemme kaikkialla koodissa. Meitä riittää. Me olemme huolimattomuus. Me olemme epähuomion poikia. Meitä ei ole ymmärretty. Me olemme poikkeavia.

Kukako olen, kysyt? Minä olen tuntematon bugilas.

25.9.11

Miksi koodia ei juuri lueta?

Psykologiset syyt
Miksi koodia ei juuri lueta? Ehkä sitä ei ole kirjoitettu luettavaksi. Koodin tärkein ominaisuus on eittämättä sen toimivuus. Pelkkä toimivuus riittää, kun  puhutaan pienestä määrästä testikoodia ja pienten hyötyohjelmien tekemisestä. Isommissa projekteissa koodin ylläpidettävyys nousee suureen arvoon. Väittäisinpä jopa, että joskus koodin ylläpidettävyys on tärkeämpää kuin sen toimivuus [Saa kommentoida. Onko kellään teistä Tikkikingeistä esimerkkiä? Milloin koodi saa olla rikki, jos se on luettavaa?]. 
    Jos kerran riittää, että koodi toimii, miksi lukea sitä? Tilastotiede kertoo, että suuri enemmistö menee sieltä mistä aita on riittävän matala. Nämä Norminörtit eivät sinänsä ole pahoja, he vain tekevät työnsä niin hyvin kuin osaavat tai kuin heiltä osataan vaatia. Tilastotieteen valossa koko populaatiosta pieni vähemmistö yrittää huijata ja luikerralla aidan ali. Heitä voikin hyvällä syyllä nimittää Koodikyiksi. He ovat langenneet Voiman Pimeälle Puolelle.  Yhtä pieni vähemmistö pyrkii aktiivisesti nostamaan rimaa. Te Tikkikingit, eli tämän blogin lukijat, olette ohjelmistokehityksen paras ja ainoa toivo. 
    Norminörtit kirjoittavat usein koodia, joka vain toimii. He eivät usein ajattelekaan joutuvansa lukemaan omaa koodiaan. Lukukelvottoman koodin kirjoitustapa saa vain vahvistusta niistä painokelvottomista voimasanoista, jotka seuraavat Norminörtin joutuessa lukemaan muiden kirjoittamaa koodia. Jokainen itseään arvostava keittiöpsykologi tietää, että oma asennoituminen värjää suhtautumista muihin ihmisiin. Jos Marjatta juoruaa hänelle uskottuja salaisuuksia eteenpäin, hän on luultavasti varovainen kertomaan omia salaisuuksiaan kenellekään. Jos Marjatta ei osaa pitää salaisuuksia, kuinka hän voisi olettaa muiden tekevän niin? Koska Keijo puijaa ja valehtelee jopa ja erityisesti puolisolleen, täytyy hänen sisäisesti lähteä siitä olettamuksesta, että muutkin valehtelevat lähes koko ajan. Koska Mikko on aina kivuliaan rehellinen, hänen sinisilmäisyyttään on helppo hyödyntää. Hänhän uskoo kaikkien puhuvan koko ajan pääasiassa totta.
    Jos siis koodi, jota itse tuotan, ei ole lukukelpoista, kuinka kenenkään muunkaan kirjoittama olisi. Lukukelvotonta koodia ei juuri lueta, vaikka juuri sitä pitäisi lukea.


Täydellisyyden metsästys
Miksi koodia ei juuri lueta? “Kaikella on aikansa ja paikkansa” sanoo vanha kansa ja, kuten kaikki yleistykset, on väärässä kuin suunnistaja kiitoradalla. Koodin lukemiselle ei oikeaa aikaa löydy. Jos koodi ei ole aivan valmis, kannattaako sitä vielä lukea? Jos koodi on ollut jo pitkään mukana suht toimivassa järjestelmässä, kannattaako sitä enää lukea? Täydellinen koodinlukuaika on kangastus, illuusio, olematon. Aaveenmetsästäjillä on tuloksekkaampaa kuin täydellisen koodinlukuajan odottelijoilla. 
    Vanhan viidakon legendan mukaan täydellinen koodinlukuaika on heti koodin valmistumisen jälkeen, ennen testausta, viimeisen muutoksen jälkeen, niin aikaisin kuin mahdollista, vasta kun kirjoittaja on koodiinsa tyytyväinen ja ennen kuin suuria väärinymmärryksiä on ehditty lisätä koodiin. Kuten legendat yleensäkin, aikaikkunan vaatimuksia on paisuteltu mahdottomuuteen asti. Vaikka aikaikkunan vaatimuksia lievennettäisiin tasosta “Täydellinen” tasolle “Juuri Oikea”, aikaikkunan koko on kiivaan projektin aikajanalla silti superlyhyt. Juuri oikea aika lukea koodia vilahtaa ohi liian nopeasti ja päästää mennessään samanlaisen äänen kuin Douglas Adamsin pitämät deadlinet
    Ällöimelissä, romanttisissa Hollywood-komedioissa jännite syntyy sen Ainoan Oikean etsimisestä. Joko sellaista ei yrityksistä huolimatta löydy, tai sitten löydetystä koitetaan etsiä mitä tahansa vikoja, jotka osoittaisivat ettei kyseessä ole Juuri Se Oikea. Sen Ainoan  Oikean koodinlukuajan odottaminen on yhtä turhaa. Paljon käytännöllisempää on tajuta, että täydellisyyttä ei ole olemassa missään muodossa (paitsi Olkiluodossa).


Taitamaton lykkää mieluiten
Miksi koodia ei juuri lueta? Asioiden lykkääminen on helpoimmillaan, kun niiden sisältö ei ole täysin selvillä. Norminörtit eivät tiedä, miten koodia tulisi lukea ja mitä sieltä olisi syytä hakea. Luulisi, että koska Norminörtit osaavat kirjoittaa koodia, he osaisivat myös lukea sitä. On kuitenkin kaksi aivan eri asiaa lukea kirjaa viihteenä kuin lukea sitä taka-ajatuksenaan kirjoittaa siitä arvosteleva raportti. Kriittinen lukeminen poikkeaa tavallisesta lukemisesta kuin seepran raidat. Tekstin tuottaminen on huomattavasti helpompaa kuin hyvän tekstin tuottaminen, mikä selittänee Norminörttien kyvyn tuottaa koodia. Koodin lukeminen kriittisesti vaatii taitoa ja kokemusta. Kun koodia tuijottaa riittävän pitkään saamatta aikaan juuri mitään mainitsemisen arvoista, jää homma helposti seuraavalla kerralla kokonaan aloittamatta. 


Palautteen antaminen on sosiaalisesti vaativaa
Miksi koodia ei juuri lueta? Jos kritiikin luominen on vaikeaa, sen välittäminen kirjoittajalle se vasta taitoa vaatiikiin. Palautteen antaminen vaatii sosiaalisia taitoja. Jokainen johtaja tietää, kuinka vaikeaa erityisesti negatiivisen palautteen antaminen on. Kuinka arvostella toista siten, että tämä silti haluaa jatkaa työtään ja vielä parantaa tulostaan? Kritiikki tulee muotoilla rakentavasti, mutta sitä ei saa naamioida liian positiivisesti, niin ettei sitä tunnista arvosteluksi. Arvonsa tuntevan ammattilaisen saamat ansaitsemattomat kehut valuvat tämän korvien ohitse kuin vesi hanhen selästä. Kun yhtälöstä poistetaan hierarkian suoma auktoriteetti, eli kun samassa työtehtävässä olevan työtoverin työtä tulee arvostella, liikutaan hyvin herkällä alueella. Huolimattomuusvirheistä huomauttaminen vaikuttaa kirjoittajasta pahimmillaan epäluottamuslauseelta ja suurien virheiden osoittaminen saattaa saada kirjoittajan tuntemaan itsensä tyhmäksi tai työhönsä kelpaamattomaksi. Kummassakaan tapauksessa palautteen antaminen ei ole sujunut oikein. Terveeseen työympäristöön kuuluu myös jatkuva rakentavan kritiikin jakelu. Kaikilla on aina aihetta parannukseen.


Tarkistaminen on aliarvostettua
Miksi koodia ei juuri lueta? Norminörttien mielestä työn tulosten tarkistaminen ei tunnu yhtä tuottavalta työltä kuin uuden koodin kirjoittaminen. Tämä syy saattaa olla myös testaamattomuuden takana. Jos tarkistamisen tärkeys ei ole riittävän korkealla, ei sitä koskaan priorisoida niin korkealle, että se tulisi tehtyä. Tehtävän arvo riippuu sen tuottamista tuloksista, joten jos tarkistamalla ei pysty löytämään riittävän arvokkaita korjauskohteita, ei itse tehtävääkään kannata tehdä. Sen sijaan että hukkaisi aikansa toisarvoiseen työhön, voi tehdä lisää koodia, jonka itseisarvo tuntuu suurelta, vaikka suuri osa ns. normikoodista olisi huomattavasti järkevämpää yksinkertaisesti jättää kirjoittamatta.


Ratkaisu
Koodia luetaan,
-kun jokainen kirjoittaa koodiaan muille ihmisille, 
-kun koodin tarkistaminen nähdään välttämättömänä osana ohjelmistokehitystä,
-kun koodin lukeminen ja tarkistaminen osataan, 
-kun tarkistamisen tuottama palaute on rakentavaa ja kehittävää ja 
-kun tarkistamisen tulokset parantavat tarkistettua koodia (ja kaikkea tulevaisuudessa tuotettua koodia) silminnähden.