Luovaa ohjelmointia yläkouluun

Toisin kuin moni luulee, ohjelmointi ei ole vain matematiikanopettajan harteilla. Koodaus tarjoaa parhaimmillaan modernin, motivoivan tavan itseilmaisuun ja teknologian haltuunottoon, joka tukee monialaisia projekteja, esitelmiä ja luovaa ilmaisua. Tässä artikkelissa käymme läpi ohjelmointia yläkoulun näkökulmasta, autamme OPSin virheiden tulkinnassa ja pohdimme työelämätaitojen kehittymistä. 

Tämä artikkeli on jatkoa Luovaa ohjelmointia alakouluun -artikkelille (Dimensiolehti 13.1.2022), jossa käsiteltiin visuaalista ohjelmointia ja alakoulun osaamistavoitteita. Suosittelemme myös yläkoulun opettajia tutustumaan siihen, sillä se antaa hyvä yleiskuvan koodauksesta luokanopettajien työssä.

Koodaus ei ole oma oppiaineensa, vaan laaja-alaisen osaamisen osa. Se koskee kaikkia luokka-asteita ja kaikkea opetusta. Toisin kuin useimmissa muissa maissa, joissa koodaus on osa teknologia-nimistä oppiainetta, Suomen kouluissa koodaus, teknologian ymmärrys ja kaikki muutkin laaja-alaiset osaamisalueet tulisi huomioida kaikessa opetuksessa sopivalla tavalla.

Opetussuunnitelman valuvika

Kun OPSia lukee tarkasti, huomaa, että koodaukseen liittyviä konkreettisia osaamisvaatimuksia on yläkoulussa ainoastaan matematiikan ja käsityön oppiaineissa, ei muissa. Mistä tämä johtuu?

OPSia laadittaessa kunkin oppiaineen omat työryhmät laativat oman osuutensa. Työryhmillä oli ensimmäistä kertaa tehtävänä myös laaja-alaisten osaamisalueiden huomioiminen oman oppiaineensa kuvauksessa. Lienee ymmärrettävää, että tämä työ ei ehkä mennyt aivan virheettömästi.

Tarkoitus oli, että koodauskin olisi mainittuna jokaisen oppiaineen osiossa, mutta jostain syystä vain matematiikan ja käsityön työryhmät osasivat tämän huomioida. Tämä on harmillinen takaisku, koska useimmissa yläkouluissa aineenopettajat nykyisin pitävät koodausta vain matikanopettajan vastuulla.

On selvää, että kun OPS seuraavan kerran päivittyy (eli noin 2026), tämä virhe tullaan korjaamaan ja koodaus, ICT-taidot ja kaikki muukin laaja-alainen osaaminen otetaan paremmin huomioon jokaisessa oppiaineessa. Mutta tässä välissä monessa yläkoulussa on jo totuttu siihen, että koodausta tehdään matematiikassa ja muut pesevät kätensä koko teemasta.

Tekoäly työkaverina

Perimmäinen syy ICT-osaamisen ja koodauksen opetukseen on yleissivistys, eli lasten valmistaminen teknologisessa yhteiskunnassa toimimiseen. Kun jo maanviljelijänkin on osattava hallita GPS-navigoivaa älytraktoria ja sääennusteiden mukaan toimivaa kastelujärjestelmää, on selvää, että valtaosa työikäisistä joutuu työskentelemään tietotekniikan kanssa.

Vaikka tekoäly (AI, artificial intelligence) onkin pahasti hypetetty termi, on kuitenkin selvää, että koneoppimisen (ML, machine learning) kautta koulutetut asiantuntijajärjestelmät ovat arvokas lisä moniin työtehtäviin. Lääkärin työtä helpottaa, kun väsymätön kone tekee alustavan diagnoosin röntgenkuvasta perustuen miljooniin vastaaviin kuviin. Kelavirkailijan työtä helpottaa, kun kone käsittelee tiedot ja hakemuksen ja antaa alustavan ehdotuksen toimenpiteiksi tai jatkoselvityksiksi.

Tekoäly ei korvaa ihmistä, sillä tekoäly ei ole oikeasti älykästä, eikä se ymmärrä kontekstia. Kun yksi tekoäly koulutetaan analysoimaan röntgenkuvia, se voi kenties tunnistaa hiusmurtumia yhtä hyvin kuin parhaat lääkärit parhaimpina päivinään, mutta se ei ymmärrä, että se tutkii ihmisten luista otettuja kuvia, ja mitä seurauksia murtumilla on ihmisten elämään. Yleistä tekoälyä, joka todella ymmärtäisi maailmaa, ei ole olemassa eikä edes teoriassa tiedetä, miten sellainen syntyisi.

Tekoäly on väsymätön datan analysoija ja tietyissä työtehtävissä oiva apuri. Se toimii siis ihmisen avustajana. Mutta jos työntekijä uskoo tekoälyn olevan jokin superälykäs olento, hän ei kyseenalaista tekoälyn tekemiä johtopäätöksiä. Siksi on arvokasta, että koulussa avataan tietotekniikan toimintaa, ymmärretään ohjelmointia ja myös tekoälyn toimintalogiikkaa. Arvokas työntekijä ymmärtää, miten tekoäly poikkeaa ihmisälystä, ja huomaa, kun tekoäly toimii huonosti.

Kymmenen valokuvaa kilpikonnista, jotka on värikoodattu sen mukaan, onko ne luokiteltu kilpikonniksi vai ei. Tekoälyn mielestä nolla kuvista on kilpikonnia.
Kuva 1: Tekoäly ei toimi kuten ihmisäly. Kun tekoäly on opetettu tunnistamaan vaikkapa erilaisia esineitä valokuvista, voidaan valokuvia manipuloida siten, että ihmisen silmiin mikään ei näytä erilaiselta, mutta tekoälyä huijataan täysin. Tässä on selvästi kuvia kilpikonnista, mutta kuviin lisätyt ihmiselle näkymättömät pikselit saivat tietyn tekoälyn luokittelemaan kuvat kivääreiksi. Lähde:  Athalye, A., Engstrom, L., Ilyas, A. & Kwok, K. (2018). Synthesizing Robust Adversarial Examples. Proceedings of the 35th International Conference on Machine Learning

Opetussuunnitelma

Opetussuunnitelman edellytykset on avattu uudetlukutaidot.fi-sivustolla jaotellen ne kolmeen osa-alueeseen: ohjelmoinnillinen ajattelu, tutkiva työskentely ja tuottaminen, ohjelmoidut ympäristöt ja niissä toimiminen. Seuraavaan taulukkoon on kerätty kaikki osaamiskuvaukset yläkoulun osalta.

Taulukko 1: Ohjelmointiosaamisen kuvaukset vuosiluokat 7–9

VUOSILUOKAT 7–9
Hyvän ohjelmointiosaamisen kuvaus
Looginen ajattelu ja tiedon käsittelyOppilas käsittelee erilaisiin yleistyksiin sisältyviä tietoja, käyttää erilaisia merkintätapoja ja toteuttaa erityyppisen tiedon kanssa loogisia operaatioita.
Ongelmien ratkaiseminen ja mallintaminenOppilas analysoi ongelmia ja arvioi niiden mahdollisia ratkaisuja erilaisten kriteerien perusteella sekä visualisoi ongelmia ja ratkaisuja yleistysten ja kaavioiden avulla.
Ohjelmoinnin käsitteet ja perusrakenteetOppilas ymmärtää algoritmin merkityksen ja osaa suunnitella ohjelman, jossa hyödynnetään tarkoituksenmukaisesti ohjelmoinnin perusrakenteita, kuten peräkkäisiä, toistuvia ja ehdollisia toimintoja.
Käytännön taidotOppilas ohjelmoi ohjelmia eri ympäristöissä sekä tuntee perusasiat yhdestä tekstipohjaisesta ohjelmointikielestä ja osaa tulkita sillä tehtyä ohjelmakoodia.
Yhteiskehittelyn prosessitOppilas ymmärtää erilaisia ryhmärooleja ja yhteistyön tapoja sekä työskentelee vastavuoroisesti ja aktiivisesti osallistuen ohjelmointiprojekteissa.
Luova tuottaminenOppilas suunnittelee ja toteuttaa yhteistyössä muiden kanssa prosessina ratkaisun, jossa käytetään jotakin kehitysalustaa sekä hyödynnetään erilaisia antureita ja automatisaatiota. Oppilas suunnittelee ja toteuttaa pelin, simulaation tai sovelluksen, joka ratkaisee jonkin oppiaineisiin tai oikeaan elämään liittyvän ongelman.
Ohjelmointi oppimisen välineenäOppilas tuntee eri oppiaineisiin liittyviä teknologisia sovelluksia ja selittää niiden toimintaperiaatteita. Oppilas hyödyntää algoritmista ajattelua ja ohjelmointia eri oppiaineisiin ja projekteihin liittyvässä ongelmanratkaisussa ja tutkimisessa sekä tiedon tuottamisessa ja esittämisessä.
Ohjelmoitu teknologia elämän eri osa-alueillaOppilas tuntee algoritmien, automaation ja robotiikan toimintalogiikkaa ja sovelluksia elämän eri osa-alueilla. Oppilas pohtii ohjelmoidun teknologian mahdollisuuksia, riskejä ja eettisiä näkökulmia.
Ohjelmoidun teknologian vaikutukset arjessaOppilas osaa kertoa, miten digitaalisia palveluja personoidaan ja mainontaa kohdennetaan käyttäjälle. Oppilas pohtii digitaalisten palveluiden keräämän tiedon ja ohjelmoinnin merkitystä sosiaalisessa ja yhteiskunnallisessa vaikuttamisessa.

Lähde: uudetlukutaidot.fi, Ohjelmointiosaamisen kuvaukset -taulukko

Luovaa tekemistä joka oppiaineessa

Kun katsoo näitä opetussuunnitelman osaamisvaatimuksia, näkee hyvin, ettei koodauksen käsittely matematiikan opintojaksoissa ole riittävää. Saavuttaakseen vaatimukset oppilaiden tulisi pohtia palveluiden personointia, algoritmien vaikutusta yhteiskuntaan, tutustua robotiikkaan ja tehdä eri oppiaineisiin soveltuvia ohjelmointiprojekteja.

Muiden aineiden opettajat eivät kuitenkaan ota koodausta käyttöön OPSin vaillinaisuuden vuoksi, ellei siihen erikseen kannusteta. Suuri merkitys onkin koulun johdolla, jonka tulisi huomioida OPSin valuvika ja johtaa yläkoulun opettajia yhdessä ottamaan tämän nykymaailmassa keskeinen teema opetuksensa osaksi.

Useimmissa reaaliaineissa koodausta voidaan hyödyntää oppimisvälineenä kuten kirjoittamistaitoakin: koodaamalla voidaan luoda digitarinoita, simulaatioita, pelejä, esitelmiä ja taidetta. Näin tekemällä opitaan, ohjelmoinnin lisäksi, ymmärtämään miten tekstejä voidaan tulkita ja tuottaa monessa eri muodossa. Tätä on monilukutaito, joka on ohjelmointiin läheisesti kytkeytyvä laaja-alaisen osaamisen tavoite.

Alakoulussa käyttöönotetut visuaaliset ohjelmointiympäristöt ovat edelleen täysin riittäviä yläkoulussa, joten koodaustaitojen puolesta yläkoulun opettajille ei aseteta suurempia vaatimuksia. Periaatteessa yläkoulussa pitäisi jo voida luottaa siihen, että alakoulussa on jo koodattu ja oppilailla on jonkinlaiset perustaidot. Käytännössä näin ei ole, sillä koodauksen toteutuminen kouluissa on todella vaihtelevaa. Opettajien on siis seiskojen kanssa varmistuttava lähtötasosta ja usein aloitettava koodaus ihan perusteista.

Lienee todennäköistä, että monissa yläkouluissa matematiikan opettajalle jää vastuu oppilaiden ohjelmointiosaamisen perusteiden kuntoon saattamisesta. Tämä kannattaa aloittaa visuaalisilla ohjelmointiympäristöillä ja jatkaa tekstuaalisilla ohjelmointikielillä sitten, kun oppilaat osaavat käyttää visuaalisia välineitä ongelmitta.

Koodaus soveltuu kaikkiin oppiaineisiin, kun sitä käytetään oppilaan itseilmaisun välineenä. Aiheesta on kerrottu enemmän tämän artikkelisarjan ensimmäisessä osassa, mutta myös tässä on joitain esimerkkejä:

  • Digitarina Sammon ryöstöstä (uskonto)
  • Angry Birds -tyylinen ritsapeli (fysiikka)
  • Animaatio toisen maailmansodan tapahtumista karttapohjalla (historia)
  • Animoitu sarjakuva (vieraat kielet)
  • Peli, jossa yhdistettävä lippu oikeaan valtioon (maantiede)
  • Älyvaate tai hälytyslaite (käsityö)
  • Kieliopin tietyn alueen kuulustelupeli (äidinkieli)
  • Esitelmä annetusta aiheesta animaation, simulaation tai pelin muodossa (mikä tahansa oppiaine)

Kun oppilaat tuottavat näitä pelejä ja tarinoita, he samalla oppivat loogista ajattelua, ongelmanratkaisua, täsmällistä systemaattista ilmaisua, perusaritmetiikkaa ja geometriaa, monilukutaitoa sekä ohjelmoinnillisen ajattelun taitoja. 

Koodausosaamisen portaat yläkoulussa

  1. Koneettomat harjoitukset
  2. Harjoitellaan visuaalisen ohjelmointiympäristön käyttöä.
  3. Tuotetaan digitarinoita.
  4. Tuotetaan pelejä, simulaatioita, yms.
  5. Harjoitellaan robotiikan alkeita eli fyysisten laitteiden ohjausta koodaamalla.
  6. Rakennetaan erilaisia robotiikkaprojekteja.
  7. Harjoitellaan tekstuaalisen ohjelmointikielen käyttöä.
  8. Tuotetaan kaikkea, käyttäen visuaalisia, tekstuaalisia ja robotiikkaympäristöjä.

Python ensimmäisenä kirjoitettuna ohjelmointikielenä

Python on ammattilaisten keskuudessa suosittu, mutta samalla yksi selkokielisimmistä tekstuaalisista ohjelmointikielistä. Sen käyttö yläkoulussa on siis perusteltua; kyseessä on teollisuudessa merkittävä kieli, jota on myös helppo käyttää. 

Pythonin haaste on siinä, mitä koodi pohjimmiltaan on: tekstiä, jossa jokainen merkki on merkitsevä. Tekstuaalisen ohjelmoinnin alkeiden opettelu voi olla turhauttavaa, koska se on hidasta ja virheitä tulee helposti. Koodia ei enää koota “palapelin” palasista, kuten esimerkiksi Scratchissä, mutta samalla halutaan samanlaisia näyttäviä tuloksia. Tässä yhtälössä usein langetaan koodin kopiointiin ja lauseeseen “Tätä kohtaa ei tarvitse ymmärtää, kunhan vain laitatte sen sinne, niin se toimii”. Miten tekstillä ohjelmoinnista saadaan sekä mielenkiintoista että oikeasti opettavaista? Yksi hyvä keino on ohjelmoida leikkimielisiä tehtäviä merkityksellisessä viitekehyksessä. 

Työelämäntaidot ja yrittäjyys (L6) on hyvä viitekehys tällaisille ohjelmointitehtävillä. Oppilaiden kanssa voidaan toteuttaa oppimiskokonaisuus, jossa oppilaat perustavat ryhmissä leikkimieliset pienyritykset. Yritysten tehtävänä on ratkaista kuvitteellisten asiakkaiden sähköpostitse lähettämiä ongelmia. Tässä työelämän simulaatiossa oppilaat harjoittelevat niitä taitoja, joita vaaditaan asiakkaiden tilaamien sovellusten tekemiseen. Tällä tavalla tekstuaalisen ohjelmoinnin alkeet saadaan naamioitua motivoivaksi kokonaisuudeksi ilman, että tarvitsee saada heti näyttävää jälkeä. Oppimiskokonaisuuteen saadaan myös halutessa mukaan kilpailua. Voittajaryhmä on se, joka tienaa eniten eli suorittaa eniten asiakastöitä. 

Kuva sähköpostiohjelmasta, jossa fiktiivinen asiakasviesti.. Viesti pyytää ohjelmoimaan ohjelman, joka tekee personoituja sähköpostiviestejä mallin pohjalta.
Kuva 2: Esimerkki ongelmanratkaisutehtävästä, joka on tehty sähköpostiviestin muotoon. Oranssilla korostetut osat edustavat ylöspäin eriyttävää sisältöä. Lähde: Koodikoulun oppimateriaali.

Esimerkin asiakasviestintätehtävä voi olla motivoiva, mutta ei ohjaa luovuuteen. Sellaisia tarvitaan myös. Mitä jos asiakas haluaakin vuosijuhlien tunnelman kevennykseen räppinimi-generaattorin? Entä jos arvotaankin käyttäjälle päivittäin vaihtuva onnennumero, käyttämällä hänen kengännumeroaan, ikää sekä nimeä, eikä luku saa olla yli sadan? Työelämäteemankin parissa voidaan päästää irti vakavuudesta ja antaa tilaa luovuudelle. Esimerkkien avulla oppilaita voidaan myös rohkaista keksimään omia ongelmanratkaisutehtäviä toisilleen.

Kuva fiktiivisestä asiakassähköpostista, jossa pyydetään luomaan satunnaislukugenaraattori
Kuva 3: Esimerkki matemaattiseen luovuuteen ohjaavasta tehtävästä. Lähde: Koodikoulun oppimateriaali.

Pedagogisia huomioita

Kuten aiemmassa artikkelissamme todettiin, yhtäläisyyksistään huolimatta ohjelmointi poikkeaa sekä matematiikan että vieraiden kielten opettamisesta, ja siihen on suhtauduttava pedagogisesti eri tavalla.

Ohjelmoitaessa syntyy ymmärrys tietokoneen toiminnasta ja käskyjen antamisesta sille. Kyse on ohjelmoinnillisen ajattelun kehittymisestä. Ohjelmoinnillinen ajattelu on päättelytehtävän pilkkomista osiin, ehto- ja toistorakenteiden sekä modularisoinnin hyödyntämistä, virheiden löytämistä omasta algoritmista sekä lopulta toimivan ohjelman hyödyntämistä sen alkuperäisen ongelman ratkaisemisessa.

Analogia matematiikkaan on selvä. Matematiikassakin on kyse tietyn ongelman ymmärtämisestä, ilmaisemisesta matemaattisessa muodossa, ratkaisun laskemisesta ja tuloksen tulkitsemisesta. Ohjelmointitaitojen kehittäminen tukeekin suoraan tiettyjä matemaattisen osaamisen alueita. Mutta ohjelmointiin liittyy monia muitakin piirteitä, jotka tekevät siitä monitahoisempaa ja ajattelua monipuolisemmin kehittävää. Ohjelmoinnin avulla voi esimerkiksi ilmaista itseään ja tuottaa monenlaisia erilaisia lopputuloksia, vaikkapa robotiikan parissa.

Ohjelmoinnillisen ajattelun kehittymisestä on hyötyä oppilaalle kaikessa hänen myöhemmässä opiskeluissaan ja elämässään. Aivan samoin kuin 40-luvulla jokainen oppilas sai perunannostolomaa (nyk. syysloma) ja oppi toimimaan maan tärkeimmän ruokakasvin kanssa, aivan samoin tulisi nykyisen peruskoulun valmistaa lapsia toimimaan teknologian, algoritmien, tekoälyjen ja erinäisten yritysten kyllästämässä yhteiskunnassa. Maagisesta teknologiauskosta on päästävä informoituun, kriittiseen ilmiön tarkasteluun ja siinä mediakriittisessä kehityksessä ohjelmoinnillisen ajattelun kehittyminen laaja-alaisesti on keskeisen tärkeää. Ja vaikka tätä työtä pitäisi kaikkien aineopettajien tehdä, päävastuu lankeaa toistaiseksi matematiikan opettajille.

Maksuton luovan ohjelmoinnin koulutus opettajille

Ota luova ohjelmointi haltuun maksuttomissa verkkokoulutuksissa. Koulutukset koostuvat kolmesta verkkotapaamisesta ja niiden välissä itsenäisesti tehtävistä harjoituksista, projektityöstä sekä kevyen opetussuunnitelman laatimisesta. Koulutukseen kuuluu oppilaan kirja, jonka avulla opiskelu tapahtuu ja jota voi käyttää myöhemmin omassa opetuksessa oppilaiden kanssa.

Lisätietoja ja ilmoittautumiset: https://www.suomenkoodikoulu.fi/oph/ 

Kirjoittajat