Ohjelmointiurani tähän päivään asti hienoimman kokemuksen sain joskus yliopiston ensimmäisinä vuosina. Olin tutustunut ohjelmoimiseen lukiossa innostuneen opettajamme ansiosta. En varsinaisesti harrastanut ohjelmointia, mutta menin kuitenkin lukemaan tietojenkäsittelytiedettä yliopistoon. Ohjelmointi yliopistokursseilla oli sinänsä mukavaa ja haastavaa, mutta projektit olivat siinä vaiheessa pääosin leikkiä.
Sain sitten jossain vaiheessa idean ohjelmaan, joka auttaisi harrastuksessamme: vakioveikkauksessa. Teimme nimittäin parin kaverin kanssa vakioveikkausta haravajärjestelmillä, joiden käyttämiseen liittyi monimutkaisia taulukoita, joiden perusteella piti täyttää vakioveikkauskuponkeja. Perusajatus niissä oli se, että tehtiin perusrivi, jossa oli tietty määrä varmoja, tietty määrä kahden ruksin kohteita ja loput kolmen ruksin kohteita. Haravajärjestelmä sitten varmisti, että kun perusrivissä sai esimerkiksi 13 oikein, niin haravassa oli vähintään 11 oikein.
Veikkauksella itsellään oli näitä haravia, mutta niitä oli muistaakseni vain muutama. Tällaisia itsekehitettyjä haravia oli sitten yleisessä levityksessä ja halusimme, syystä tai toisesta, käyttää niitä. Ongelma oli siinä, että niiden täyttäminen oli vaivalloista, ikävää ja hidasta. Tajusin, että olisi varmaan ihan mahdollista tehdä ohjelma, joka tulostaisi suoraan näitä järjestelmän rivejä veikkauskupongeille.
Meillä oli kotona mustesuihkutulostin ja ensin piti tehdä prototyyppi tulostuksesta, että selviäisi oliko projekti edes mahdollinen. Tein testitulosteita ja laitoin tulostimeen veikkauskupongin. Tulostus ei mennyt aina täysin suoraan, mutta se näytti kuitenkin toimivan riittävän hyvin. Tästä seurasi tietysti valtava innostus.
En tiennyt silloin tietokoneista tai ohjelmoinnista hirveästi. Erityisesti en tiennyt, miten voisin ohjelmallisesti tulostaa tai että miten voisin asetella tulosteen vapaasti. Mutta olin tutustunut yliopistossa kryptiseen ladontajärjestelmään nimeltä TeX (tai LaTeX) ja tiesin, että siinä pystyi antamaan aika yksityiskohtaisia ladontaohjeita. Se ei ollut varsinaisesti suunniteltu vapaamuotoiseen muotoiluun vaan tarkoitus oli itse asiassa miltei päinvastainen: kuvailla pääosin sisältöä ja antaa ladontajärjestelmän hoitaa ladonta. Mutta koska joskus näitä tarkempia asemointejakin tarvittiin, niin siinä oli mahdollisuus myös siihen.
Tästä seurasi tietysti seuraava prototyypitysvaihe. Piti selvittää oliko kaikki asemointitarpeeni toteutettavissa LaTeX-komentoina. Jälkikäteen ajateltuna tämän ladontajärjestelmän valinta ei ehkä ollut paras mahdollinen, mutta siinä tilanteessa sillä ei ollut väliä. Tärkeintä oli vain tietää, että sillä oli mahdollista toteuttaa kaikki tarpeellinen. Ei tullut edes mieleen, että toteutuksen pitäisi olla jotenkin tarkoituksenmukainen tai elegantti. Minulla oli visio mitä olin tekemässä, enkä antanut pienten yksityiskohtien häiritä hommaa.
Tämän jälkeen homma vaati vain tiukkaa ohjelmointia. Muistan hämärästi, että se ohjelmointi oli jotenkin erityisen antoisaa. Kai se innostus liittyi siihen, että ohjelma vaikutti mielessäni niin hyödylliseltä. Eihän sitä kukaan muu kuin minä ja kaverit tulisi koskaan käyttämään. Mutta se vakioveikkauskuponkien täyttäminen käsin oli niin tuskallista ja hidasta, että ajatus automaatiosta oli jotenkin niin vapauttava.
Lopputuloksena syntyi C-kielellä tehty ohjelma, jossa curses-pohjainen käyttöliittymä. Siitä valittiin haluttu haravajärjestelmä ja sille annettiin valittu rivi. Tämän jälkeen se teki näistä syntyneistä riveistä LaTeX-tiedostoja, jotka ohjelma kävi kääntämässä LaTeX:lla postscript-tiedostoiksi, jotka ohjattiin edelleen tulostusjonoon. Syötin sitten veikkauskuponkeja tulostimeen yksi kerrallaan ja ohjelma tulosti niille valmiita haravarivejä. Tyypillinen harava mahtui 10-20 vakioveikkauskupongille (eli niissä oli 100-200 riviä), joten yhdelläkin kerralla säästyi valtavasti turhauttavaa käsityötä.
Kerron usein, varmaan liiankin usein, tätä anekdoottia ja se herättää yleensä jokseenkin väheksyviä hymähdyksiä. (Tai ainakin kuvittelen niin.) Mutta se oli ehdottomasti antoisin ohjelmointiprojekti minkä olen koko ohjelmointiurani aikana kokenut. Kuten jo sanoin, toteutus ei ollut elegantti, mutta se hoiti hommansa ja sillä hommalla oli käytännön merkitys. Kokemuksen muisteleminen saa minut vieläkin hyvälle tuulelle.
Stille Nächte
13 tuntia sitten