Tein puolitoista vuotta sitten asiakkaalle suhteellisen monimutkaisen ajanvarausjärjestelmän, eikä mulla ollut sen valmistuttua silloin eikä vielä nytkään käsitystä, miksi se toimi. Siinä on reilu tuhat riviä koodia, mutta selkeesti niin monimutkaisella tavalla tehty, että en pysty seuraamaan koodia ja sanomaan mitä tapahtuu tarkalleen ottaen missä ja miksi (en tietenkään kommentoinut silloin koodia).
Ai kamala, en kyllä kehtaisi tunnustaa etten ymmärrä omaa koodaustani. Joku tuhannen rivin ohjelmanpätkä on minun silmissäni vielä pieni nyssäkkä, jonka hallitsemisessa ei pitäisi olla mitään ongelmaa.
Joskus todella muinoin tehtiin vielä ohjelmia, jotka olivat kuin lautasellinen keitettyä spagettia. Sen jälkeen kun tajuttiin, että ohjelmaan pitää pystyä kohtuullisella vaivalla tekemään muutoksia, koska maailma sen koodinpätkän ympärillä ei pysähdy. Ympäristö ja tarpeet muuttuvat, joten se väistämättä heijastuu myös uusina vaatimuksena ohjelma toimntaan. Nuo spagettikoodit muuttuivat kertakäyttötuotteiksi, koska joskus oli taloudellisempaa tehdä koko roska uudelleen ja paremmin.
Jotta ohjelmasta saa ylläpidettävän, on sen toimintalogiikka ensin purettava auki. Siihen kynä ja paperi tai seinä ja post-it laput ovat edelleen parhaat välineet ainakin minun mielestäni. Varmaan koneella on nykyisin helppo tehdä toimintakaavioita, mutta niistä tulee aivan liian siistejä ja valmiin näköisia heti ensimmäisellä yrityksellä, joten puutteita on vaikeampi nähdä. Tuollainen lappuhahmotelma on helpompi purkaa ja rakentaa uudelleen ja etenkin isomman toiminnallisen kokonaisuuden voi hahmottaa helpommin.
Vasta kun toimintalogiikka on pöytätestattu, voi lähteä sitä toteuttamaan kooditasolle ja kukin yksittäinen toiminto omana moduulinaan / lohkonaan. Vähän varmaan kielestä sitten riippuu, miten noita toteutetaan, mutta varmasti jäsennelty tapa toteuttaa koodia mahdollista millä kielellä tahansa.
En kehu omaa työtäni, vaan firmani tapaa tehdä työtä, kun kerron, että joskus 90-luvun alussa suunnittelemani suuri laskentaohjelma oli vielä viime syksynä käytössä. Ohjelman looginen runko säilyi muuttumattomana, mutta siihen liitettiin vuosien mittaan uusia moduuleita ja moduuleiden toiminnallisia yksityiskohtia muutettiin lähes vuosittain. Muutokset johtuivat juuri vaatimusten muuttumisesta ei siitä, että vain virheitä olisi korjattu. Tosin kyllähän noin suureen ohjelmaan virheitäkin mahtui sinne lillukanvarsiin, mutta perustoiminta oli jokseenkin järkkymätön. Koodin rivimäärää en pysty arvoimaan, mutta oman ryhmämme koodaamia moduuleita oli toista sataa ja sen lisäksi vielä pakettiin kuului muiden järjestelmien tuottamia palveluita.
Se, että tuo nyt loppusyksystä haudattiin, johtui siitä, että firmamme koko tietojärjetelmät ollaan uusimassa aivan uudelle pohjalle ja noista vanhoista ohjelmista ei jää jäljelle kuin kauniit muistot.
Harmikseni olen huomannut, että uudessa järjestelmässä dokumentaation taso on huomattavasti heikompi ja koodauskin kuuluu hoidettavan ilman kokonaisuuden hahmottamista.