keskiviikko 14. syyskuuta 2016

Koodausta kaikille

Uutinen ohjelmoinnin eli koodauksen opetuksesta peruskoulussa ärsytti minua kovasti. Mutta ei niinkään itse asian vuoksi, vaan sen takia, millaiset tahot tätä hehkuttivat, ja miten uutinen tarjoiltiin. Mutta unohdetaan nyt tämä huono konteksti. Itse ideahan on erinomainen.

Koetan perustella näkökantaani, ja se on oikeastaan aika helppoa. Ohjelmointi on tietysti vain teknistä suunnittelua, mutta se perustuu aivan erityiseen ajattelutapaan. Eräs koodauksen määrittely on, että siinä laaditaan algoritmeja (toisiaan seuraavista vaiheista koostuvia toimintakuvauksia). Se ei kuitenkaan ole koko totuus. Kaikki ohjelmoinnilla tuotetut ratkaisut eivät nimittäin ole kovin "algoritmisia". Koodaus on selvästi sukus matematiikalle, mutta nykyinen matematiikan opetus ei perehdytä siihen ajatteluun, jota koodauksessa tarvitaan. Koodaus ei nimittäin ole itsenäinen matematiikan haara. Matematiikka tarjoaa kyllä melkoisen joukon kiinnostavia formalismeja: ne ovat kalkyylejä, joita voidaan hyödyntää ohjelmointikielissä ja tietokonalaitteissa. Mutta se on jo kokonaan "toinen juttu".

Koodaus poikkeaa matematiikasta muun muassa siksi, että siinä pitää kiinnittää huomio kahteen asiaan: pitää keskittyä siihen ongelmaan, joka koodauksella yritetään ratkaista, ja samalla pitää ohjata sen järjestelmän (tietokoneen ja sen ohjelmien) toimintaa, jonka avulla laadittu ohjelma sitten suoritetaan. Yksinkertainen esimerkki on laskea matemaattisen lausekkeen arvo, jossa on erilaisia laskutoimituksia, vaikkapa yhteen- ja vähennyslaskua, kerto- ja jakolaskua ja potensseja. Jos koodaajalla on käytössään kehittynyt ohjelmointikieli, riittää, että hän vain kirjoittaa laskettavan kaavan. Koko ohjelma on vain muutama rivi koodia. 

Mutta jos käytössä olisi vain symbolinen konekieli eli assembler, koodaajan pitäisi huolehtia lukujen ja laskennan välitulosten talletuksista muistiin, laskutoimituksien kokoamisesta yksinkertaisista konekäskyistä, ja koko laskentaprosessin vaiheittaisesta kontrolloimisesta. Koko ohjelma on varovaisestikin arvioiden useita satoja koodirivejä, paperille painettuna kymmeniä sivuja ohjelmalistausta. Kun kehittyneellä ohjelmointikielellä tehtävän ratkaisu on koodattu alle minuutissa, assembler- kielellä koodaukseen voi kulua useita päiviä. Siis, toisin kun abstraktissa matematiikassa, koodauksessa käytössä oleva tietokone ja sen ohjelmointikielet vaikuttavat voimakkaasti tehtävän suoritukseen.

Toistan vielä, että koodaamisen opettaminen pikku koululaisille on ehdottomasti hyvä idea. Tietenkään koulussa saatu koodausopetus ei ole välittömästi hyödyllistä työelämässä, ehtiihän tekniikka muuttua aika paljon ennen kuin oppilaat menevät töihin, eikä koulussa päästä alkeita pidemmälle. Mutta kysymys onkin muusta: yleissivistyksestä ja hyödyllisen ajattelutavan omaksumisesta. Kaikkien on syytä ymmärtää, millaista ohjelmointi on.

Asiantuntijat osannevat valita opetuksessa käytettävät välineet: ohjelmointikielen ja laskentaympäristön. Kielen tulee olla riittävän yleinen, ja ympäristön tulee olla sellainen, että koodaamalla voidaan saada aikaan konkreettisia tuloksia. Tehtävät voivat olla mitä vain: pelejä, robotin ohjaamista, musiikkia, grafiikkaa, animaatiota. Tämä houkuttelee varmaan oppilaita. Koodaaminen kehittää oppilaiden keskittymiskykyä ja lisää motivaatiota. Ja mikä parasta, sen voi oppia, se ei ole ylivoimaista. Sekin on tärkeä oppi: "minä pystyn tähän!".