Kokemuksia ohjelmistokehityksen opettamisesta lapsille

Monesti kokemusartikkelien kipinä syntyy tarpeesta jakaa selkiyttääkseen muilla olevia käsityksiä. Tapaaminen Otto Kekäläisen kanssa koodikerhotoimintaan liittyen toi esiin yhden selkiyttämisen arvoisen käsityksen: Teaching Kids Programming (TKP, teachingkidsprogramming.org) –kurssimateriaali ei opeta Javaa tai C#:ia vaikka molemmille kielille materiaali löytyykin. Koitan tässä artikkelissa jakaa kokemukseni siitä mitä TKP opettaa ja miksi minä olen kyseiseen opetusmateriaaliin erityisen tykästynyt.

Taustaa kokemukselleni

Olen nainen ohjelmistoalalla. Identifioidun ohjelmistotestaajaksi. Minulla on maailman mahtavin työ, teemme tiimityön voimin taikaa, joka muuttaa maailmaa. Luen koodia. Puhun koodista. Kirjoitan koodia, jos toteuttava asia on sen arvoinen. Minun perspektiivistäni sen arvoista on omien sovellusideoiden toteuttaminen, eivät toisten tilaamat sovellukset. Sujuvuus koodin kanssa tukee mainiosti muita ohjelmistokehitystaitoja. Koodin ymmärrys on minulle ennen kaikkea kykyä toimia rinta rinnan kavereiden kanssa, jotka ovat minua innostuneempia koodista, kun minua kiinnostaa ennen kaikkea se mitä koodilla (ja ilmankin) voi tehdä.

Teen töitä C#-talossa. Olen tehnyt suurimman osan ohjelmoinnista Javalla ja JavaScriptillä. Olen päässyt kokeilemaan Schemeä, C:tä, C++:aa, Pythonia, Perliä, Rubya, PHP:tä, Objective C:tä, Cobolia ja Fortrania. Saatoin jo unohtaa jonkin. HTML ja SQL ovat arkipäivää. En rakasta tai inhoa näistä mitään, mutta joka kerta kun lähdetään keskustelemaan kielten vastakkainasettelusta, vetäydyn. Ohjelmointi on keino, ei tarkoitus.

Omat lapseni ovat 6- ja 7-vuotiaat ja näistä nuoremman, tyttäreni, osalta olen jo jonkin aikaa seurannut tyttömäistä laumatrendiä: sosiaalinen yhdessä tekeminen ja kavereiden kanssa samojen juttujen tekeminen on tärkeää. Samaa olen itse kokenut vuosien varrella: tietotekniikan valitseminen Teknillisessä korkeakoulussa ei ollut laumapäätös vaan enemmänkin vastavirtaan uimista. Kokemuksesta tiedän tekeväni äärimmäisen sosiaalista yhteistyötä, jossa muutetaan ajatuksia koodiksi – kunhan saadaan ajatukset paloiteltua ja selkiytettyä. Sen sijaan ystäväni ja sisarukseni, ennen kaikkea lähipiirini naiset, kokevat ohjelmistokehityksen tylsänä ruudun tuijottamisena ja ihmettelevät mistä puhunkaan kun väitän jatkuvasti näkeväni ihmisiä. Uskomukset istuvat tiukassa. Ammatillisesti olen vahvasti kallellaan ketteriin menetelmiin (arvoa tuotantoon jatkuvasti pienissä palasissa jatkuvasti oppien), joka lisää työn sosiaalisia sisältöjä pitäen teknistä erinomaisuutta ja muutosta varten suunnittelua keskiössä.

Ohjelmistokehitys on minun ammattini (ja iso osa harrastuksiani) ja tulevaisuuden keskeisiä taitoja on olla ohjelmiston luomisen puolella kuluttamisen sijaan. Haluan varmistaa että molemmat lapseni pääsevät omilla painotuksillaan nauttimaan ohjelmistojen luomisesta omien kiinnostustensa puitteissa, avoimin mielin erilaisia juttuja kokeillen. Tämän vuoksi olen lähtenyt tekemään tietotekniikkaa lasten kanssa.

Teaching Kids Programming-kokemuksia

Tampere Goes Agile –tapahtumassa lokakuussa 2014 yhtenä puhujana oli Llewellyn Falco, joka puhui Teaching Kids Programming –yhdistyksestä. Yhdistys on aatteellinen ja kotoisin USA:sta. Yhdistyksellä on avoimen lähdekoodin opetusmateriaalia, jota on yhdistyksen tukemana koulutettu ympäri maailman. Jäsenneltyä materiaalia on lukukauden verran. Kohdeikäryhmä on peruskoulun yläluokat.

Opittuani että materiaali on olemassa, halusin kokea materiaalilla opettamisen. Tilaisuuden sai pyytämällä ja tapahtuman jälkeen olen saanut mahdollisuuden opettaa TKP-materiaalilla Llewellynin valmentamana viittä 7-9 –luokkalaisten ryhmää. Ensin neljää ryhmää Helsingissä Ylä-Malmin peruskoulussa, ja myöhemmin kahta Turussa Vasaramäen koulussa. Kussakin ryhmässä kävimme läpi materiaalin ensimmäisen moduulin. Moduuleita on lukukauden verran, joten raapaisimme sessioissamme vasta pintaa kokonaisuudesta.

Kerron alla kokemuksestani tarkemmin, mutta ennen sitä tiivistettynä se mitä opin ja miksi pidän kokeilemisen jälkeen TKP:n materiaaleista erityisen paljon.

  1. Asioita opetetaan rivien välistä osana ohjeistusta siitä miten opetus tapahtuu eikä selittämällä vaikeita käsitteitä niitä ymmärtämättömälle yleisölle. Fokus on tekemisessä. Opetustapaan (mm. opettajaparin mallintaminen mies-naisparina ja parissa roolin vaihto oppilaiden tahdissa) on kiinnitetty erityistä huomiota.
  2. Kurssimateriaali opettaa ohjelmoinnin ohessa ketteriä teknisiä käytäntöjä (pari/ryhmäohjelmointi, testi ensin –kehitystapa, pienet inkrementit, refaktorointi, puhdas koodi, tutkiva testaus) ja tuo mukanaan yhdessä tekemisen ja oppimisen riemun.
  3. Ohjelmoinnin lisäksi opetuksessa on aidot työkalut: Eclipse ja sen tehokäyttö, ohjelmointi ei ole tekstin tuottamista vaan työkalut helpottavat elämäämme paljon. Koodaaminen ilman kunnon työkaluja on kidutusta enkö halua opettaa asioita, joita en haluaisi itsekään oikeasti tehdä.
  4. Moduulin rakenne on hyvä opetuksellisesti sekä ryhmädynamiikan kannalta: rivi kerrallaan oppimisesta kertauksen kautta muunteluun, visuaalista palautetta antavaan loppukokeeseen sekä syventäviin yksikkötestauksen kautta toteutettuihin harjoituksiin (Koans).
  5. Ensimmäinen toimiva koodi syntyy nopeasti tarkoituksellisella menetelmällä muodostaen suomesta englantia ja englannista koodia (koska suomenkieliset aivomme ovat koodiaivojamme paljon fiksummat), mutta oivalluksen voima on erityisesti koodin muuntelussa. Visuaalinen tekeminen näkyy ryhmässä innostuksena. ”Hei maailma”-ensikoodi visuaalisena ”Näytä kilpikonna”-toteutuksena vakuuttaa tusinan eri ohjelmointikielen kurssilla ”Hei maailma”-tulostumista toteuttaneen allekirjoittaneen.
  6. Java/C#-materiaalin lisäksi TKP-yhdistyksen puitteissa on jaettu mahtavia esimerkkejä tavoista opettaa lapsille tehokkaasti kirjoittamista tietokoneella sormia tuijottamatta sekä 3D-tulostuksen kokemisesta käytännössä.
  7. Resepteissä löytyy juttuja jotka vetoavat laajemmin myös tyttöihin – materiaalista näkee että sen on luonut yhdessä mies ja nainen, kun aivan liian monet opetusmateriaalit henkivät tahattomasti tekijänään vain miestä. Materiaali ei myöskään koita muotoilla ohjelmointia matematiikaksi. Ohjelmointi on automatisointia, eikä sillä aina ole linkkiä matematiikkaan. Ohjelmoinnilla voi tehdä paljon muutakin. Ja enimmäkseen tehdäänkin.

Palaan siis alkuperäiseen viestiini: TKP-kurssimateriaali ei opeta Javaa tai C#:ia. Kieli kulkee opetuksen mukana ja kurssimateriaalin arvioiminen sen käyttämän kielen perusteella kun sen erinomaisuus on jossakin aivan muualla tuntuu väärältä.

Katsoen kurssia koodauskurssina, kurssi opettaa joko Javaa tai C#:ia. Moni meistä ohjelmistoammattilaisista on kuitenkin monikielinen ja monikielisenä katsoo ohjelmointikielen ohi yleistettäviin asioihin – eihän kielen rakenteita kannata opettaa, ne saa googlattua. Samaisesta syystä en pidä koodikerhosta tai koodikoulusta: minä haluan opettaa lapsille kerhoissa luovaa tuottamista tietokoneilla. Google-pomo Eric Schmidtin sanoin, tarvitsemme Smart Creatives –osaamista: ihmisiä jotka yhdistävät teknistä tietämystä, liiketoiminnan ymmärrystä ja taiteellista luovuutta. Ihmisiä tai ryhmiä ihmisiä, jotka osaavat tehdä yhteistyötä. Meidän tarvitsee varmistua että tulevat sukupolvet eivät ole aivottomia koneiden orjia kuluttajina, vaan ymmärtävät riittävästi valjastaakseen tietokoneet ratkomaan itse kohtaamiaan ongelmia. Kaikkien ei tarvitse ohjelmoida, mutta ymmärrys siitä että ohjelmointi on olemassa ja omiin intresseihin soveltuvan roolin löytäminen maailmassa, jossa tietokoneilla on keskeinen rooli on peruskansalaistaito.

Miten opetimme TKP:n ensimmäistä moduulia?

Kerroin yllä opeista, jotka poimin TKP-materiaalilla opettaessani. Nämä opit määrittävät TKP-materiaalia enemmän kuin kieli. Seuraavaksi käsittelen sitä mitä oppitunnilla tapahtui.

Kunkin ryhmän kanssa käytettävissä oli kaksi oppituntia. Jokaisella sessiolla oli kaksi opettajaa. Molemmissa kouluissa aloitimme Llewellyn-Maaret –opettajaparilla, ja vaihdoimme seuraavissa sessioissa ottaen Malmilla mukaan paikallisen opettajan (Jukka Pajunen) ja Turussa paikallisen ohjelmistokehittäjän (Aki Salmi) korvaamaan Llewellyniä, muuttaen opetuskieleksi suomen. Opettajaparissa oleellista on pyrkiä aktiivisesti siihen että toinen opettajista on mies ja toinen nainen. Miehet voivat kertoa, että tietotekniikka sopii myös naisille / tytöille, mutta nainen toisena opettajan on tästä vahvempi viesti. Pari on myös tärkeä mallintamisen vuoksi: kun oppilaat vaihtavat pareissa rooleja, myös opettajaparissa vaihdetaan rooleja. Opettajan ei tarvitse olla erityisen taitava ohjelmoija, jokaisesta oppilaille kerrottavasta asiasta ja kertomisen tyylistä on vaiheittaiset ohjeet osana oppimateriaaleja.

Opetus alkaa järjestäytymisellä, jossa oppilaille opetetaan muutamia perussääntöjä. Kullakin koneella on kaksi ihmistä, ja pariohjelmoinnissa toinen on “aivot” ja kertoo mitä tehdään ja toinen on “lihakset” kirjoittaen toisen ohjeiden mukaan. Rooleja vaihdetaan neljän minuutin välein, saman parin kanssa toimien. Pariohjelmoinnin on tarkoitus olla äänekästä, joten jos opettajat haluavat huomion ryhmältä, käden nosto tarkoittaa että kaikki nostavat käden ylös hiljentyen.

Kullakin koneella on Eclipse IDE (sovelluskehitysympäristö), joka vaatii koneelle Javan, mutta kahden koulun kokemuksella onnistuu ilman asennuksia jopa opetustoimen haastavissa verkkoratkaisuissa. Eclipsessä on avattuna valmiiksi ensimmäisen moduulin ensimmäinen resepti – suomeksi.

Toinen opettaja istuu koneelle ja mallintaa parityöskentelyä kirjoittaen koneelle esimerkkivastauksia vain toisen opettajan näin ohjatessa. Toinen opettaja vetää opetusta. Ajastin kilauttaa parinvaihdon neljän minuutin kohdalla, ja myös opettajat vaihtavat tässä vaiheessa roolejaan. Oppilaat nousevat ylös vaihtaakseen paria, toimintatapa, joka perustuu tutkimukseen siitä että pienikin jaloittelu pitää mielen virkeänä.

Aktiivinen opettaja pyytää oppilaita lukemaan ääneen ensimmäisen suomenkielisen lauseen, jota lähdetään muuttamaan koodiksi. Oppilaita saa yleensä alkuun muistuttaa, että ääneen lukeminen tapahtuu koko ryhmän voimin. Sitten kysellään että mitäköhän ”Näytä kilpikonna” olisikaan englanniksi, ja kirjoitetaan suomenkielisen kommenttirivin perään kommenttirivi, jossa vastaava on sanottuna englanniksi. Englantia koodiksi käännettäessä opetetaan kielioppi: aloitetaan substantiivilla koodissa, yhdistetään pisteellä, valitaan listalta haluttu vaihtoehto joka vastaa tavoitetta. Kun koodi vastaa tavoitetta, otetaan kommentit pois – opettaen rivin poistamisen pikanäppäin. Oppilaalle opetetaan ohjelman ajaminen ja aktiivisesti kehotetaan kokeilemaan onko oma ratkaisu toimiva sen sijaan että kerrottaisiin miten asia on oikein.

Ohjerivit on numeroitu, ja ne tehdään numerojärjestyksessä. Numerojärjestys ohjaa toteutusjärjestykseen, jossa jokainen palanen tuottaa näkyvän tuloksen. Esimerkiksi ei kannata toteuttaa toistolausetta ennen kuin on jotakin jota toistetaan.

Kun reseptin mukainen koodi on luotu, sitä lähdetään muokkaamaan muuttamatta sen toiminnallisuutta. Oppilaille puhutaan siitä, että saman asian voi tehdä monella tapaa, ja ohjataan nostamaan esiin muuttaja toisensa jälkeen ja tekemään näistä ohjelmallisesti muokattavia. Toiminnallisuus piirtää edelleen alkuperäisen neliön, kunnes oppilaita ohjataan kokeilemaan erilaisia arvoja eri muuttujille. Ehkä kulmia voikin olla eri määrä, ehkä viivan paksuus voi vaihdella, ehkä kierroksia onkin enemmän kuin yksi täysi kierros ja ehkä väri viivalle onkin satunnainen sen sinisen sijaan. On hauska huomata kun oppilaat oivaltavat että nyt kukin voikin luoda haluamansa näköisiä kuvioita. Oppimateriaaliin kuuluu Virtual Proctor –palvelu, jolla opettaja pystyy koko ajan omalta koneeltaan näkemään missä kukin oppilaspari on menossa ja loppua kohti näkemään kuinka erilaisia teoksi pareilta syntyy.

Osion päätteeksi on kertaus (recap), joka löytyy videona ja ohjaa muistamaan niitä asioita, joista oppilailla on nyt omakohtainen kokemus tekemisen kautta. Ja kertauksesta siirrytään loppukokeeseen, josta yleensä on pidetty kovasti. Oman oppimisen pääsee kokeilemaan soveltamalla opittua kysymys kerrallaan kokeessa, jossa ennen kuin on riviäkään kirjoittanut voi ajaa kokeen ja saada arvostelun. Toteutuksen täydentyessä olemaan oikein, arvostelusta alkaa saada pisteitä ja piirtää nk. palkintokuvion vastausten ollessa vaikka yrityksen ja erehdyksen kautta oikein.

Tähän yleensä kaksituntinen jää. Osioon kuuluu lisäksi vielä syventävä materiaali (deep dive), jossa opetetaan osion laajuuteen kuuluvaa knoppitietoa yksikkötestien avulla. Kussakin toteutuksessa on tyhjä kohta merkittynä täydennettäväksi, ja testit menevät läpi kun on oivaltanut mitä tyhjään kohtaan kuuluu. Esimerkiksi toistorakenteesta opetetaan että toisto voi olla muutakin kuin yksi lisää kerrallaan, se voi olla jopa negatiivinen luku.

Opetustyylin oppii nopeasti ja erityisen nopeasti tietysti kun kurssimateriaalin toinen pääkehittäjä on mukana opettamassa. Myös tukimateriaalit opettajalle (penflip) ovat erinomaiset ja kuvaavat vaiheittain mitä tehdä.

Reseptejä on monenlaisia, ja kukin osio syöttää oppilaille seuraavan pureskeltavan kokoisen palasen. Lukukauden loppuun mennessä ollaankin jo tekemässä testiohjattua kehitystapaa.

Malmilla annoimme erikseen ohjausta paikalliselle opettajalle, joka suunnitteli vievänsä kurssia läpi lukukauden tietotekniikkaluokalleen. Kuten yhdistystoimintaan kuuluu, apua saaneet (minä) auttavat muita eteenpäin. Ole siis yhteydessä, jos kaipaat apuja materiaalin käyttöönotossa, tulen mielelläni alkuun kakkosopettajaksi.

Muista opetuskokemuksista

Pääasiallinen kohderyhmäni ei ole yläkouluikäiset, vaan omien lasteni ikäryhmät eli eskarit ja ekaluokkalaiset. Eskareille olen pitänyt kaksi sessiota päiväkoti Viskurissa. Opetin ensin Code.Org:n Frozen-tutoriaalia yhdessä päiväkodin ohjaajien kanssa ja myöhemmässä sessiossa tietokoneettomalla tekemisellä kuppirobotin ohjelmointia. Ekaluokkalaisille opetin Code.Orgin Frozen ja Angry Birds –tutoriaaleja koodaustuntiviikolla.

Kaikissa näissä sessioissa olen ottanut TKP:n opetustavasta käyttöön pariohjelmoinnin (nk. strong style pairing: jokainen idea kulkee kaksien aivojen läpi, eli näppäimistöllä toimitaan kirjurina kun taas irrallaan näppäimistöstä ohjataan). Pariohjelmointi tasoittaa osaamisia ja kärsimättömyyttä niin eskareilla kuin ekaluokkalaisillakin ja tuo hyvän dynamiikan 4 minuutin vuorovaihtojen myötä.

Kotivalmistelussa on kaikenlaista tulevaa näille ikäryhmille:

  • Lego-robotteja, joissa lähdetään rakennetusta robotista muokkaamaan olemassa olevaa koodia siitä miten robotti käyttäytyy esim. lähestyttäessä.
  • Multimediakirjan tekemistä, jossa tehdään käsikirjoitus, kuvitus, äänet ja tekstit ja liimataan ne yhteen mobiilisovellukseksi.
  • 3D-piirtämistä ja -tulostamista avaimenperän tekemiseksi
  • Dragonbox –algebrapelin pelaamista
  • Tekstinkirjoituspelin pelaamista (näppäin kerrallaan peittäen)
  • Lautapelien pelaamista, jotka opettavat ongelmanratkaisua tai yhdessä tekemistä kilpailemisen sijaan

Viime aikoina olen huomannut, että toimivin tapa minulle opettaa lapsia on ottaa valitsemani parhaat kaverit mukaan perheen kesken tehtyihin harjoituksiin viikoittaisen vakioajan lupaamisen sijaan. Tässä ikäryhmässä vapaaehtoisia vielä löytyy molemmista sukupuolista.

Seuraa Koodikerhoa!