Tuoreimmassa opetussuunnitelmassa ohjelmointi tuli osaksi matematiikan oppisisältöä. Opekollegoiden keskuudessa tämä herätti monenlaista keskustelua puolesta ja vastaan; miksi ohjelmointi on osana matematiikkaa, miksi tietotekniikka ei ole oma oppiaine ja ohjelmointi osa sitä? Oppikirjasarjassamme, jota tuolloin käytimme, ei koodausta käsitelty millään tasolla. Miten koodausta pitäisi opettaa, millä ohjelmointikielellä ja mitä sisältöjä olisi hyvä käsitellä? Myöhemmin tarkennetut päättöarvioinnin kriteerit antoivat kuitenkin hieman osviittaa myös ohjelmointirakenteista, joita oppilaiden kanssa tulisi harjoitella.
Eräs kollegani esitti keskusteluissa heti aluksi ajatuksen, että ohjelmointi matematiikan opetuksessa on kullakin vuosiluokalla integroitava tiiviiksi osaksi käsiteltäviä matematiikan sisältöjä – ohjelmoinnin on oltava yksi uusi työväline eri aihepiirien matemaattisten ongelmien ratkaisemiseen. Ohjelmointikielikokeilujen jälkeen valitsimme Pythonin käytettäväksi ohjelmointikieleksi sen yksinkertaisuuden ja yleisyyden vuoksi. Aluksi käytimme Pythonin rinnalla myös racket-kieltä, mutta se tuntui syntaksiltaan turhan monimutkaiselta.
Nykyisin ohjelmoimme täysin omalla ohjelmointisuunnitelmalla ja -materiaalilla. Uudessa oppikirjassamme, Säteessä, on myös laadukkaat ohjelmointimateriaalit saatavilla. Niitä on tosin kritisoitu turhan hankaliksi ja nopeasti eteneviksi yläkouluikäisille, joilla ylipäätään tietokoneen peruskäyttötaidot ovat viime vuosien aikana rapistuneet älypuhelimien käytön lisääntymisen seurauksena.
7. luokalla käsittelemme Turtle-grafiikan perusteita tasogeometrian yhteydessä. Oppilaiden tehtävänä on esimerkiksi piirtää erilaisia kulmia, suoria ja monikulmioita Turtle-grafiikkaa hyödyntäen. Lisäksi 7. luokalla harjoittelemme muuttujien ja lausekkeiden käsittelyn yhteydessä tulostus-komennon (print), muuttujien, laskutoimitusten ja hieman erilaisten tietotyyppien käyttöä.
8. luokalla prosenttilaskennan yhteydessä teemme erilaisia prosenttilaskureita eri tilanteisiin. Tässä osuudessa kerrataan 7. luokan ohjelmoinnin käsitteitä, syvennetään eri tietotyyppien hallintaa (int, float, str) ja uutena asiana harjoitellaan käyttäjien antamien syötteiden käyttöä (input). Suorakulmaisen kolmion ja ympyrän yhteydessä suunnittelemme ja koodaamme näihin liittyviä, esimerkiksi ympyrän pinta-alan, kehän pituuden tai suorakulmaisen kolmion hypotenuusan pituuden laskevia, ohjelmia. Uusina ohjelmointirakenteina käsittelemme ehtorakenteen (if, elif, else) ja tutustumme hieman Pythonin valmiisiin kirjastoihin (math).
9. luokalla kertaamme aikaisempia ohjelmoinnin rakenteita avaruusgeometrian osa-alueen yhteydessä tekemällä erilaisia avaruuskappaleiden pinta-aloja ja tilavuuksia laskevia ohjelmia. Lisäksi tässä osa-alueessa harjoitellaan silmukkarakenteiden (while ja for) perusteita. Funktiot ja aliohjelmat (def) ohjelmointikäsitteinä käsitellään samaan aikaan kuin funktioita treenataan matematiikan sisältönä.
Toimintamalli on osoittautunut varsin toimivaksi, mutta kompurointiakin on ollut. Kun ohjelmointia opiskellaan noin 5-10 tuntia lukuvuodessa, ehtii monet ohjelmoinnin perusasiat unohtumaan ohjelmointikertojen välissä, jolloin aikaisempien asioiden kertaamiseen kuluu aina yllättävän paljon aikaa. Portfoliotyöskentelymallinen työtapa auttaa tässä hivenen. Olemme koonneet kaikki yläkoulun ohjelmointitehtävät yhteen ja samaan Colab-tiedostoon, jolloin omia aikaisemmin tehtyjä ohjelmia on voinut tarkastella myös myöhemmin. Valitettavasti ympäristön käytössä on ollut viime aikoina suuria haasteita Googlen uusien ikärajasäädösten vuoksi, joten toisena ohjelmointiympäristönä on jouduttu turvautumaan tuttuun ja turvalliseen repl.it -ympäristöön (muokkaus 6.1.2022: Google Colaboratory toimii taas).
Opetussuunnitelmassa ohjelmoinnin eri arvosanojen kriteerit ovat mielestäni varsin korkeat, erityisesti arvosanan 7 kohdalla. Ehto- ja toistorakenteiden käyttö arvosanan 7 kriteerinä on oman kokemukseni mukaan hankala – tähän päästäkseen lähes kaikkien oppilaiden on tehtävä kovasti töitä. Sen sijaan arvosanojen 8 ja 9 kriteerit (”ohjelmoi pieniä ohjelmia”, ”hyödyntää ohjelmointia ongelmanratkaisussa”, ”muokkaa ja kehittää ohjelmia”) ovat helpommin saavutettavia, sillä nämä tavoitteet on muotoiltu laveasti.
Ylipäätään sopivien ohjelmointisisältöjen rajaaminen opetukseen on aika hankalaa. Aliohjelmia ja funktioita ei opetussuunnitelmassa mainita lainkaan, mutta toisaalta ne ovat usein erittäin käyttökelpoisia erilaisissa ohjelmissa. Listoihin ja merkkijonoihin liittyvät operaatiot sen sijaan olemme rajanneet opiskeltavan asian ulkopuolelle. Ohjelmointirakenteiden tarkempi erittely opetussuunnitelmassa olisi mielestäni tarpeellista. Toisaalta opetussuunnitelmassa ei myöskään oteta kantaa ohjelmointikieleen – edes siihen, suositaanko tekstipohjaista vai graafista ohjelmointia. Se, mikä on oikea määrä koodausta yläkoulussa, on myös vaikea kysymys. Joissakin oppikirjoissa siihen käytetään jopa kymmeniä tunteja lukuvuoden aikana, mutta toisaalta esimerkiksi Otavan tuloillaan oleva Ääretön-kirjasarja kertoo sisällyttävänsä ohjelmointia matematiikan opetukseen vain 3-5 tuntia lukuvuodessa. Eri kouluissa ympäri Suomen on siis varsin vaihtelevat käytännöt ohjelmoinnin opetuksen suhteen.
Ohjelmoinnin opetuksen pedagogisiin kysymyksiin pitäisi paneutua vielä lisää. Miten opetuksesta saisi mahdollisimman sujuvaa ja erilaiset oppijat huomiovaa? Mihin asioihin olisi erityisesti hyvä kiinnittää huomiota? Millaiset erilaiset tehtävätyypit tukisivat parhaiten algoritmisen ajattelun kehittymistä ja ohjelmoinnin oppimista? Toistaiseksi ohjelmoinninopetukseen liittyvä keskustelu on pääosin ollut sisältökeskeistä.
Tutustu halutessasi meidän tekemään ja meillä käytössä olevaan ohjelmointimateriaaliin tästä. Materiaali on tehty sillä ajatuksella, että opiskelija voi edetä materiaalin avulla omaan tahtiin.