Teksti ja kuva: Tanja Parkkonen 20.3.2018
Aloitin hiljattain ohjelmoinnin perusteiden verkkokurssin Helsingin yliopiston Avoimessa yliopistossa. Ystäväni sai minut houkuteltua kokeilemaan, ja minähän tietysti innostuin. Uusi kieli on jo vienyt minut mukanaan.
Kurssi on herättänyt lisäksi monenlaisia ajatuksia ajasta, jossa elämme. Olen esimerkiksi pohtinut ohjelmoinnin ohessa ihmisen opastamista ja ohjaamista. Ihminen tietää ja tuntee paljon, kone ei itsessään yhtään mitään. Työhöni liittyviä ohjeistuksia tehdessäni mietin usein, miten kohderyhmä katsoo maailmaa: onko kuvallinen materiaali puhutteleva ja tuttu, vai toimisivatko tekstit vai peräti numerot paremmin. Lisäksi on mietittävä, miten opastettavien ymmärrys aiheesta kehittyy, vieläpä niin, että kehitys tapahtuu tehokkaasti. Toimivan vuorovaikutuksen mahdollistaminen ihmisten välille on tärkeintä. Tarkoitan, että minun on seurattava ja ohjattava opastettavien ymmärrystä, jotta opastajana voin korjata omaa toimintaani tulosten varmistamiseksi. Usein kätevintä on, että esimerkiksi työohjeita tehdään yhdessä, jotta pääsemme nopeammin rakentamaan merkityksen siihen mitä teemme. Koneiden kohdalla sinänsä ei voi puhua oppimisesta, koska niillä ei ole tapaa hahmottaa maailmaa samassa mielessä kuin on ihmisellä.
Ohjelmointi on tietämisen ja tuntemisen näkökulmasta ajateltuna ihmisen ohjaamista yksinkertaisempaa. Ohjelma on kuin tyhjä taulu, valkoinen A4. Ohjelmointi koostuu lähes yksinomaan algoritmeista ja muuttujista eikä ennakko-oletuksia, tietoisuutta tai alitajuntaa ole. Algoritmeista eli miten-listoista on hyvä aloittaa toki ihmistenkin kanssa, jos asia on uusi ja tekijät eivät vielä ole hahmottaneet kokonaisuutta ja sitä, miksi eri vaiheita tarvitaan. Ihmisen ja ohjelman eroja voi käsitellä lisää kysymällä, onko koodilla kulttuuria. Vai pitäisikö ennemmin kysyä, mistä kulttuurista koodi on lähtöisin. Koneoppimisen kehittyessä todennäköisesti joudumme vielä tarkasti määrittämään ohjelmille juuri kulttuurin. Koneeseen tulisi ohjelmoida paljon merkityksellisiä taustaoletuksia, joiden mukaan sen muuntuminen ohjautuu ihmisen haluamaan suuntaan.
Algoritmeilla on merkitystä ohjelmille sekä ihmisille. Silti ohjelmointia joskus jopa mystifioidaan irrottamalla se omasta kokemuspiiristä. On helppoa vain julistaa, että ihmisyys ei ole koodissa ja että kaikki eivät osaa koodata. En usko, että asia on näin yksinkertainen. Meidän tulisi vaatia itseltämme perehtyneisyyttä siihen, miten koneiden avulla toimitaan merkityksellisesti. Vuorovaikutus on suurelta osaltaan kielellistä toimintaa ja yhä suurempi osa kommunikoinnista on digitaalista ja konekielistä. Digitaalisuus on mielestäni yksi ihmiskunnan suurimpia kehitysmahdollisuuksia. Algoritmit, muuttujat, metodit ja ohjelmat ovat kaikki ihmisen tekemiä, joten meidän pitää ymmärtää niiden sisällöt ja mahdollisuudet eikä vain yrittää etsiä niistä ihmisen kaltaista tietoisuutta.
Ohjelmoinnin ja algoritmien luomisen perusta on yksinkertainen, mutta silti haasteellinen. Kirjoitin syksyllä artikkelin Säröilevä algoritmi, jossa pohdin säädellyn algoritmin kankeutta ja mahdollisuuksia varioitua, säröillä ja tuoda esille uusia ennen kokemattomia aloituksia. Ihmisen oppiminen sallii nämä säröt. Tässä on ehkä oleellisin ero ihmisen ja koneen välillä, jos eroja halutaan välttämättä tarkastella. Ihmisen oppimisessa ovat mukana kaikki elämän mittaan mukaan tarttuneet taustaolettamukset. Ohjelmat ovat nekin osa näitä kokemuksia. Varmasti monia meitä suorastaan ärsyttää kaikenlainen käskyttäminen. Onkohan kyse kuitenkin siitä, että koneille tarkoitetut toimintakäskyt tulevat puheeseemme liiankin helposti?
Mieleeni muistuu erään ystäväni helpottunut huokaus muutaman vuoden takaa, kun hän totesi robottien karttavan hänen alaansa. Hän toimii lastenhoitajana ja hänen mukaansa lastentarhoihin koneet eivät tule. Pelkään hänen olevan väärässä. Asiaa pitäisi käsitellä toisin: vauvojen vaipat voidaan vaihtaa ohjelmoidun robotin avulla, mutta millainen on tarkoituksenmukainen algoritmi. Oleellista on, että robotin toiminta määritellään sellaiseksi, että se hoitaa tehtävänsä merkityksellisesti oikein. Kaikessa tietotekniikassa niin lisätyssä todellisuudessa, koneoppimisessa kuin tekoälyssä, kyse on kielestä ja tavasta rakentaa toimintaa meille ihmisille. Minua suorastaan pelottaisi, jos esimerkiksi humanistit eivät olisi mukana ohjaamassa koneita eli määrittämässä niille algoritmeja eli merkityksellistä toimintaa.
Ohjelmoinnin kielet ovat loppujen lopuksi yksinkertaisia ja mikä parasta, ne ovat yksiselitteisiä. Koodissa ei ole tilaa tulkinnalle – väärä koodi ilmenee heti ohjelman virheenä. Ihmisen kohdalla epäselvä sana saattaa vaipua unholaan ja pulpahtaa pintaan vasta aikojen päästä, jolloin virheen alkuperää on lähes mahdoton jäljittää. Ohjelmoinnin haasteet ilmenevät tavoitteiden määrittelyssä, kokonaisuuden ymmärtämisessä ja etenkin siinä, että mitään taustaolettamuksia ei ole.
System.out.println(”Tule hyvä koodi!”);