Tutkijankammarissa on ollut hyvää aikaa istua lukemaan ja pohdiskelemaan syntyjä syviä. Viime viikkoina olen ehtinyt pohtimaan muun muassa seuraavaa asiaa: mitä tuore tutkimus sanoo Innokas-verkostonkin toiminnan yhdestä keskipisteestä: kouluikäisten ohjelmoinnin opettamisesta ja oppimisesta?
Ohjelmointi ja robotiikka ovat uusia ilmiöitä koulumaailmassa, mutta koska kiinnostus niiden opettamiseen on kansainvälisesti vain lisääntymään päin, aihetta tutkitaan yhä enemmän ja enemmän. Opetuksen toteuttamiseen on tullut rutkasti erilaisia toteutuskeinoja, kuten robotiikkaa, värkkäystä, erilaisia työkalukittejä (digitaalisia ja analogisia) ja pelien, kännykkäsovellusten ja interaktiivisten animaatioiden tekemistä (Garneli et al., 2015; Lee et al., 2011; Szabo et al., 2019; Yu & Roque, 2019). Itse asiassa hyvin suuri osa tutkimuksesta on toteutettu aivan viime vuosina. Näin ollen kouluissa on saatettu aloitettaa toimintaa jo kauan ennen kuin tieteellisen tutkimuksen keinoin on saatu lisävarmuutta siihen, millaiset asiat toimivat opetuksessa ja oppimisessa erityisen hyvin. Vaikka opettajat toki huomaavat parhaita käytänteitä päivittäin omassa kouluarjessaan, mahtavatko samat asiat päteä kaikkialla?
Mikä on paras ohjelmointiympäristö? Tuoreen, hyvin laajan tutkimuskatsauksen (Scherer et al., 2020) mukaan ei ole yhtä parasta tapaa opettaa ja oppia ohjelmointia. Tai toisin sanoen: on useita oikein hyviä tapoja opettaa ja oppia sitä! Erityisesti Scratchin on kuitenkin havaittu olevan merkittävästi muita ohjelmointiympäristöjä opettavaisempi. Sen menestyksen taustalla uskotaan olevan sen ainutlaatuinen taipumus mahdollistaa hyvin omalaatuisten projektien tekemistä, huomioida monenlaisia kiinnostuksenkohteita ja palvella eri oppimistyylejä. Kaiken kaikkiaan graafiset ohjelmointikielet ovat keskimäärin opettavaisempia kenties ennen kaikkea siksi, että ne keventävät oppijan kognitiivista kuormitusta ja auttavat luomaan toimivia ajatusmalleja ohjelmoinnillisista ilmiöistä visuaalisten representaatioiden kautta.

Ohjelmointikielen visuaalisuuttakin merkittävämmäksi seikaksi on kuitenkin nyt osoitettu se, että kun ohjelmoidaan jotakin fyysistä laitetta (esim. robottia), oppiminen on tehokkaampaa. Fyysisten laitteiden “opettavaisuuden” taustalla uskotaan olevan se, että konkreettiset kapistukset antavat käyttäytymisellään ohjelmoijalle välitöntä palautetta. Onhan oman laitteen liikuttaminen myös hyvin mukaansatempaavaa. Tosin tutkimustulokset näyttävät siltä, että erityisesti merkityksellistä on laitteiden uutuusarvo ja niihin liittyvä alkuinnostus, eli pidemmällä ajalla laitteet eivät välttämättä jaksa ylläpitää kiinnostavuuttaan ja siten myös opettavaisuuttaan. Tärkeää ohjelmoinnissa, kuten muuallakin, on aihepiiriin tutustuminen monista eri näkökulmista!

Miten ohjelmointia kannattaa opettaa? Ylläkin mainittu tutkimuskatsaus (Scherer et al., 2020) osoitti myös, että oppilaiden ohjelmoinnin oppiminen on keskimäärin hedelmällisempää erityisesti kahdenlaisessa kontekstissa: pelillisessä oppimisessa (ts. sekä pelillistetyissä oppimisympäristöissä kuin omien pelien ohjelmoinnissa) ja niin kutsutuissa sulautuneissa oppimisympäristöissä. Jälkimmäisessä korostuu se, että oppijat laativat omia ohjelmoituja tuotoksiaan, joiden tueksi heillä on käytettävissään rikkaasti oppimista tukevia materiaaleja, kuten testattavia koodiesimerkkejä, tutoriaaleja, videoita ja alustoja jakaa tuotoksiaan toisille. Lisäksi ohjelmointi yhdessä muiden kanssa on keskimäärin tehokkaampaa kuin ohjelmointi yksin. Siispä: yhteisöllinen maker-tekeminen kunniaan!
Vaikka tutkimustulokset vasta nyt ovat näitä ajatuksia vahvistaneet, ohjelmoinnin oppimisessa pidettiin itse asiassa jo vuosia sitten arvokkaina teeseinä puhua pelkän teknisen ohjelmakoodin sijaan koodin merkityksellisistä käyttötarkoituksista, erilaisten koodattujen tuotosten itse valmistamisesta ja tekemisen yhteisöistä (Kafai & Burke, 2013). Kotimaan saralla Pekka Mertala tutkimusryhmineen (2020) ovat hiljattain kirjoittaneet oivallisen pohdinnan, kuinka ohjelmoinnin pedagogiikassa olisi ensiarvoisen tärkeää käsitellä vähemmän koodin loogis-funktionaalisia ulottuvuuksia (niiden tärkeyttä kuitenkaan väheksymättä) ja enemmän koodin sosiaalista ja yhteiskunnallista vaikuttavuutta.

Ohjelmointia itsessään vai osana eri oppiaineita? Lukuisissa kansainvälisissä tutkimuksissa on esitetty tapoja, joilla ohjelmointia voidaan yhdistää eri maiden opetussuunnitelmien sisältöalueille. Käytännön esimerkkejä löytyy eri oppiaineista, aihesisällöistä ja kokonaisuuksista, kuten kielten oppimisesta, luonnontieteistä, käsitöistä ja matematiikasta, ja näiden havainnollisempi läpikäynti kaipaisi aivan oman blogipostauksensa. Myös Suomessa ohjelmointia on sisällytetty mielekkäästi osaksi eri oppiaineiden opetusta. Kuten edellä on todettu, ohjelmointi eri oppiaineissa on opettavaista itse ohjelmoinnin kannalta (Scherer et al., 2020), ja ennen kaikkea ohjelmointi saa aikaan kiinnittymistä myös muiden sisältöjen oppimiseen (Luo et al., 2020). Siitä huolimatta ei ole kaikessa rehellisyydessä vielä valitettavasti täysin selvää, kuinka tehokkaasti ohjelmointi suoranaisesti edistää eri oppinaineiden sisältöjä tai niihen kuuluvien taitojen oppimista (Tang et al., 2020). Tässä onkin tärkeä lisätutkimuksen aihe.

Kuka voi oppia ohjelmointia? Kenties vähemmän yllättäen (joskin sitäkin tärkeämmin) tuoreeltaan on yksiselitteisesti osoitettu, että ohjelmointia voidaan oppia sen sijaan, että se olisi jotenkin sisäsyntyinen taito, ja että ohjelmoinnin opetus saa keskimääriin aikaan oppimista. Nämä yksinkertaiselta kuulostavat havainnot ovat tärkeitä siinä mielessä, että voimme kasvattajina luottaa siihen, että monenlaiset koulussa tapahtuvat ohjelmoinnin opetustoimet tukevat oppilaiden oppimista. (Scherer et al., 2020.) Eikä tämä koske vain vanhempia oppilaita, vaan myös pienempiäkin lapsia aina esiopetusta myöten (Çiftci & Bildiren, 2020; Del Olmo-Muñoz et al., 2020).

Käytännössä ohjelmoinnin oppiminen ei ole aina suoraviivaisen helppoa. Se on itseasissa pahamaineisen haastavaa, sillä siihen kuuluu pelkän ohjelmakoodin syntaktisen laatimisen lisäksi monia askareita, kuten ohjelman suunnittelu ja koodin järjestely, ongelmanratkaisuprosessin ja edistymisen seuraaminen, reflektointi ja teknisten vikojen löytäminen ja korjaaminen. Graafisiin ohjelmointiympäristöihin voi myös liittyä huomiota häiritseviä tekijöitä, kun taas myös oppijoissa voi olla paljonkin yksilöllisiä eroja. On esimerkiksi hyvin mahdollista, että ryhmän jäsenet eivät aina opi tasaveroisesti, vaikka osallistuisivatkin samaan työskentelyprosessiin. On myös ensiarvoisen tärkeää, että oppilailla olisi ylipäänsä riittävät ryhmätyö- ja ongelmanratkaisutaidot. (Scherer et al., 2020.) Monenlaiset pedagogiset menetelmät, kuten metaforien eli kielikuvien käyttö opetuksessa, vaihtoehtojen rajaaminen ja valmiista koodiesimerkeistä liikkeelle lähteminen kohti vapaavalintaisempia töitä on kuitenkin havaittu hyvinkin toimiviksi (Carlborg et al., 2019; Lye & Koh, 2014).
Kenties voimme tiivistää tuoreimmat tutkimustulokset seuraavalla tavalla:
Kuka tahansa voi oppia (ja opettaa) ohjelmointia hyvin vaikkapa Scratchilla tai lego-roboteilla omia töitään keksien, suunnitellen ja toteuttaen yhdessä muiden oppijoiden kanssa.
Tämä lausahdus ei ehkä yllätä monia, jotka ovat ohjelmoinnin parissa toimineet. Toisaalta ohjelmoinnin tutkimusta on vasta nyt ryhdytty tekemään oikein kunnolla, joten tämän koonnin perusteella voisi ehkä ajatella, että nyt pedagoginen ajattelu, joka Innokas-verkostonkin monen käytännön toiminnan taustalla vaikuttaa, alkaa olla jämäkän tutkimusperustaisestikin varmaa tai vähintääkin äärimmäisen lupaavaa. Toki aihepiirissä on vielä monia aukkokohtia, mutta tästä saamme kaikki varmasti paljonkin rohkaisua oman toiminnamme tueksi.
Kevätterveisin,
Janne Fagerlund / Jyväskylän yliopiston OKL