• Ei tuloksia

2 OHJELMOINNISTA JA OHJELMOINNIN OPETUKSESTA

2.2 Ohjelmointitaitojen ja ohjelmoinnin ulottuvuudet

Ohjelmointia on tarkasteltu monista eri näkökulmista, ja tässä tutkimuksessa se nähdään seuraavien ulottuvuuksien kautta: tekninen ohjelmointitaito,

ohjel-10 mointi lukutaitona, ohjelmointi ajattelun taitona sekä ohjelmointi itseilmaisun välineenä. Ohjelmointitoiminnan käsitetään edellyttävän, ja toisaalta myös opettavan, niin teknistä ohjelmointitaitoa, ohjelmointilukutaitoa kuin ohjel-mointiajattelun taitoa, sekä lisäksi mahdollistavan itseilmaisua ja luovuutta.

Neljään ulottuvuuteen jaottelun pohjana on hyödynnetty aiemmissa tut-kimuksissa tehtyjä jaotteluja ja käytettyjä käsitteitä (ks. Kaila 2018; Lye & Koh 2014; diSessa 2000; Vee 2013). Kaila (2018) esimerkiksi jakaa ohjelmointitaidot kahtia tekniseen osaamiseen ja algoritmisiin ongelmanratkaisutaitoihin. Lye ja Koh (2014) taas jäsentävät ohjelmointia sen harjaannuttamien taitojen näkökul-masta kolmijakoisesti käsitteiden, käytänteiden ja näkökulmien kautta. He nos-tavat esiin ohjelmoinnin keskeisten käsitteiden ja ajattelukäytänteiden ymmär-tämisen kehittymisen, joka lisää mahdollisuuksia itseilmaisuun ja luovuuteen suhteessa muihin ja teknologiseen ympäristöön. Myös käsitettä ohjelmointilu-kutaito (diSessa 2000; Vee 2013) on käytetty näkökulmana ohjelmointiosaami-seen. Näiden näkökulmien avulla pystytään kuvaamaan, miten ohjelmointi edellyttää enemmän kuin vain yhtä yksittäistä taitoa; osaamista vaaditaan jou-kossa eri taitoja (Vahldick, Mendes ja Marcelino 2014).

Tekninen ohjelmointitaito. Perinteisen näkökulman mukaan ohjelmointi tarkoittaa ja kehittää ennen kaikkea teknistä ohjelmointitaitoa. Ohjelmointia tehdään usein tietokoneella ja eri ohjelmointikielillä koodia kirjoittamalla (Har-su 2005; Kaijanaho 2010), jolloin tavoitteena on ohjeistaa tietokone toteuttamaan tietty tehtävä (Balanskat & Engelhardt 2015). Ohjelmoidessa harjaannutetaan kykyä ymmärtää ohjelmointikäsitteitä ja ohjelmoinnin logiikkaa (Sáez-López, Román-González & Vázquez-Cano 2016). Ohjelmointia opiskeltaessa tutustu-taan keskeisiin ohjelmointikäsitteisiin ja periaatteisiin eli ohjelmoinnin teknisiin yksityiskohtiin kuten muuttujiin ja toistorakenteisiin (Brennan & Resnick 2012;

Lye & Koh 2014) sekä peräkkäisyyteen ja ehdollisuuteen (Sola 2002). Ohjel-moinnin avulla voidaan oppia myös matemaattisia käsitteitä ja taitoja, kuten laskutaitoa, lukujen vertailua ja vastaavuuden ymmärtämistä (Fessakis ym.

2013) sekä etäisyyden ja ajan mittaamista (ks. Flannery ym. 2013). Ohjelmointi-käsitteitä ja -periaatteita voi oppia ymmärtämään myös ilman formaalia

opetus-11 ta, itse ohjelmointiympäristöjä käyttämällä ja kokeilemalla (Maloney, Peppler, Kafai, Resnick & Rusk 2008).

Ohjelmointilukutaito. Digitaalisissa ympäristöissä tarvitaan uudenlaisia lukutaitoja. Goughin ja Tunmerin (1986) mukaan peruslukutaito tarkoittaa tek-nisen lukemisen ja tekstin ymmärtämisen taitoja. Tekniseen lukutaitoon sisältyy sanojen tunnistamisen taito sekä kirjain−äänne-vastaavuuden hallinta, ja tekstin ymmärtäminen pitää sisällään luetun ymmärtämisen ja tekstin tulkinnan taidot.

García-Peñalvo (2018) esittää, että digitaalisessa maailmassa tulee oppia kielelli-sen lukutaidon lisäksi myös digitaalista lukutaitoa, joka pitää sisällään joukon taitoja, joita tarvitaan lukemiseen ja kirjoittamiseen digitaalisissa ympäristöissä.

Voidaan puhua myös digitaalisesta sujuvuudesta tai osaamisesta (ks. Balanskat

& Engelhardt 2015; Hockly 2012; Resnick ym. 2009). Resnickin ja kumppanei-den (2009) mukaan digitaalinen lukutaito edellyttää taitoa suunnitella, luoda, keksiä ja yhdistellä. Beshaw (2011) sisällyttää digitaalisiin lukutaitoihin kulttuu-risen, kognitiivisen, konstruktiivisen, viestinnällisen, yhteisöllisen, luovan ja kriittisen osaamisen, kuten myös luottamuksen omiin kykyihin teknologian käyttäjänä. Bawden (2008) huomauttaa, että digitaaliset lukutaidot muuttuvat ajan kuluessa ja teknologian kehittyessä, sillä teknologia muuttaa kommuni-kointitapoja.

Digitaalisen lukutaidon osa-alueiksi on mainittu sekä ohjelmointilukutaito (engl. computational literacy) että koodinlukutaito (engl. code literacy) (ks. diSessa 2000; Vee 2013). Niihin sisältyy koodauksen perusajatuksen ymmärtäminen (Hockly 2012) sekä kyky kirjoittaa ja lukea koodia (Vee 2013). Ohjelmoin-tiosaaminen voidaankin nähdä lukutaitona, jonka keskiössä ovat ohjelmointi-kielillä lukemisen ja kirjoittamisen osaaminen, ja jonka avulla pystyy ilmaise-maan itseään ja ajatuksiaan kirjoittamalla ja lukiessaan tulkitseilmaise-maan muiden tekstejä (Vee 2013). Vee (2013) esittää, että tietokoneohjelmoinnissa ihminen pystyy tekstilukutaidon tavoin ilmaisemaan ja tulkitsemaan ajatuksia koodin avulla. Hänen mukaansa ohjelmointilukutaito sisältää tekstilukutaidon ominai-suuksia, kuten tekstin kirjoittamisen ja lukemisen elementit, mutta tekstiluku-taidosta poiketen siinä rakennetaan rakenteita ennalta määritellyistä palasista.

Vee näkee ohjelmointilukutaidon laajana taitokokonaisuutena, jonka avulla

osa-12 taan palastella kokonaisuuksia pienempiin vaiheisiin ja ilmaista nämä vaiheet ohjelmointikielellä. Ohjelmointisovellusten, kuten Scratchin, on havaittu har-jaannuttavan koodinkirjoittamistaitoa ja koodinlukutaitoa, kun koodia rakenne-taan lohkoista ja rakennettua koodia luerakenne-taan (Flannery ym. 2013).

Ohjelmointi ajattelun taitona. Ohjelmointikielen lukeminen ja kirjoitta-minen ovat varsinaista tietokoneohjelmointia (Balanskat & Engelhardt 2015), mutta ohjelmointiajattelu on sen taustalla oleva kognitiivinen ongelmanratkai-suprosessi, joka mahdollistaa sen (García-Peñalvo & Mendes 2018). Ohjelmoin-titaito voidaankin nähdä myös ajattelun taitona. Wingin (2006) mukaan ohjel-mointiajattelu on jokaisen tarvitsemaa perusosaamista. Ohjelohjel-mointiajattelu ku-vaa ihmisen tai koneen toimintaa, kun tämä määrittelee ongelmaa ja kehittelee ratkaisua. Se on ratkaisun selvittämiseen tähtäävää järkeilyä, joka pitää sisäl-lään ongelmanratkaisua, suunnittelua ja käyttäytymisen ymmärtämistä. Ohjel-mointiajattelu yhdistetään usein koodaukseen ja tietokoneohjelmointiin, mutta se tarkoittaa laajempaa kokonaisuutta. Ohjelmointiajattelua hyödynnetään myös monenlaisissa arkisissa toiminnoissa, joita ei yleensä varsinaisesti ajatella koodaustehtävinä (Wing 2006). Ohjelmointiajattelu onkin olennainen taito op-pia, koska sitä tarvitaan jokaisen arjessa (ks. Lye & Koh 2014).

Ohjelmoinnin opetus tukee ohjelmointiajattelun kehittymistä (Lye & Koh 2014; Resnick ym. 2009; Sáez-López ym. 2016). Ohjelmoinnin opetus onkin en-nen kaikkea ajattelun taitojen opettamista (Liukas & Mykkäen-nen 2014). Resnickin ja kumppaneiden (2009) mukaan ohjelmoiminen harjaannuttaa ohjelmointiajat-telua, ongelmanratkaisuntaitoja ja suunnittelustrategioita, jotka kantavat arjen muillekin alueille kuin vain tietotekniikkaan. Barrin ja Stephensonin (2011) mu-kaan ohjelmointiajatteluun sisältyy muun muassa analysoiminen, ongelmien purkaminen pienempiin osiin, luokitteleminen ja soveltaminen. Ohjelmoin-tiajattelu on osaamista, jossa pystyy löytämään rakentavia ratkaisuja ja sovel-tamaan niitä ongelmiin (Jacobsen 2015). García-Peñalvo (2016b) korostaa, että pelkkää koodaustaitoa oleellisempaa on opettaa ongelmien ratkaisemista oh-jelmointiajattelun avulla, kuten esimerkiksi asioiden palastelua pienempiin osiin ja ohjelmoinnillisen ajattelun soveltamista.

13 Ohjelmointi harjoittaa myös muita kognitiivisia taitoja. Ohjelmointia opis-keltaessa harjaannutetaan esimerkiksi loogista päättelyä (Balanskat & Engel-hardt 2015), avaruudellista hahmotuskykyä (Flannery ym. 2013; Harlow ym.

2015) sekä kykyä visualisoida ja käsitteellistää (Liukas & Mykkänen 2014).

Brennanin ja Resnickin (2012) mukaan ohjelmoinnin avulla harjaannutaan myös vaiheittaisessa toiminnassa, testaamisessa, virheiden korjaamisessa, ideoiden uudelleenkäytössä ja yhdistelemisessä. Oppilas oppii ohjelmoidessaan myös arvioimaan, ennustamaan, yhdistelemään ja erottelemaan (Flannery ym. 2013).

Brennanin ja Resnickin (2012) mukaan ohjelmointiajatteluun liittyy myös ky-seenalaistaminen, joka viittaa siihen, että teknologian käyttäjä ei ota teknologiaa itsestäänselvyytenä vaan esittää kysymyksiä ja jäsentää sen kautta ohjelmointi-maailmaa.

Ohjelmointiajattelun taitojen kehitystä voidaan tukea esimerkiksi käyttä-mällä asianmukaisia ohjelmointiympäristöä. Sáez-López ja kumppanit (2016) ovat todenneet visuaalisten ohjelmointikielten, kuten Scratchin, käytön tukevan oppilaiden ohjelmointitaitojen kehittymistä ja tietokonekäytäntöjen ymmärtä-mistä. Visuaalisten ohjelmointiympäristöjen on havaittu kehittävän myös on-gelmanratkaisutaitoja (Esteves, Fonseca, Morgado & Martins 2011) ja mahdol-listavan välittömän palautteen saamisen, minkä on esitetty tukevan ohjelmoin-tiajattelun kehittymistä (Esteves ym. 2011; Fessakis ym. 2013). Oppilas saa oh-jelmoidessaan tietokoneelta välitöntä palautetta saadessaan ohjelman toimi-maan, ja esimerkiksi visuaalisessa ohjelmointiympäristössä näkee heti, toimiiko ohjelma halutulla tavalla (Esteves ym. 2011). Lye ja Koh (2014) esittävät, että ohjelmointiajattelua voidaan tukea myös luomalla ongelmanratkaisukeskeinen oppimisympäristö, jossa ratkotaan aitoja ongelmia, prosessoidaan aitoa infor-maatiota ja reflektoidaan ja jossa tuetaan oppilaita sopivasti. Ohjelmointiajatte-lua voidaan kehittää myös hyödyntämällä opetuksessa pelillisyyttä (Kaila 2018) ja opetuspelejä (Kazimoglu, Kiernan, Bacon & Mackinnon 2012).

Ohjelmointi itseilmaisun välineenä. Erilaiset ohjelmointiympäristöt mahdollistavat luovuuden (Balanskat & Engelhardt 2015; Smith, Sutcliffe &

Sandvik 2014) ja tarjoavat mahdollisuuksia itseilmaisuun (Kahn, Sendova, Sac-ristán & Noss 2011) sekä esimerkiksi luovaan tarinankerrontaan (Burke 2012).

14 Resnickin ja kumppaneiden (2009) mukaan koodaustaito laajentaa luomisen ja itsensä ilmaisun mahdollisuuksia tietokoneella. Brennan ja Resnick (2012) esit-tävät, että ohjelmointi voidaan nähdä pelkän ohjelmien käyttämisen sijaan myös suunnittelun, luomisen ja itseilmaisun välineenä. Tietotekniikka luo Res-nickin (2007) mukaan lisää mahdollisuuksia luovan ajattelun oppimiseen. Oh-jelmointiympäristöjen avulla voi esimerkiksi luoda animaatioita, pelejä tai vir-tuaalimaailmoja (Kelleher, Pausch & Kiesler 2007). Scratch Jr.:n kaltaiset sovel-lukset harjaannuttavat oppijaa muun muassa tarinankerronnassa, luovassa ajat-telussa ja itseilmaisussa (Flannery ym. 2013). Scratchissä oppilas voi personoida projekteja esimerkiksi lisäämällä omia kuvia (Resnick ym. 2009). Resnick kolle-goineen (2009) korostaa, että luovuuden ilmaisua ja luovan ajattelun oppimista on tärkeää mahdollistaa kouluopetuksessa antamalla oppilaille tilaisuuksia toimia keksimällä, luomalla, leikkimällä, jakamalla ja reflektoimalla.

Ohjelmoinnin opetuksen on havaittu tukevan oppilaiden sosiaalisia ja yh-teistyötaitoja sekä omaa ilmaisua yhdessä muiden kanssa (Fessakis ym. 2013).

Brennan ja Resnick (2012) ovat korostaneet ohjelmoinnin roolia yhteisöllisenä jakamisen välineenä, sillä sen avulla voi luoda sekä toisille että toisten kanssa.

Luovuuteen ja oppimiseen liittyykin Brennanin ja Resnickin mukaan vahvasti sosiaalisuus: muita voidaan viihdyttää, osallistaa tai opettaa tai heille voidaan jakaa ideoita.