Martti Hyvönen OHJELMOINNIN VAIKEUS JA OPISKELIJOIDEN HEIKKO MOTIVAATIO OHJELMOINNIN ALKEISKURSSIEN HAASTEINA Tietotekniikan kandidaatintutkielma Jyväskylän yliopisto Aineenopettajakoulutus 21.10.2012 Tekijä: Martti Hyvönen Yhteystiedot: [email protected] Työn nimi: Ohjelmoinnin vaikeus ja opiskelijoiden motivaAtio Title in English: The Difficulty of Programming and Lack Of Student Motivation As a Challenge in CS1 Courses Työ: Kandidaaatintutkielma Sivumäärä: 26 Linja: Aineenopettajakoulutus Teettäjä: Jyväskylän yliopisto, tietotekniikan laitos Avainsanat: Ohjelmoinin opetus, motivaatio Keywords: Teaching programming, motivation Tiivistelmä: Abstract: Sisältö 1 JOHDANTO......................................................................................................................1 2 OHJELMOINNIN VAIKEUS..........................................................................................4 2.1 MIKÄ OHJELMOINNISSA ON VAIKEINTA?................................................................................4 2.2 MITEN OHJELMOINTIA OPPII PARHAITEN?...............................................................................6 2.3 OHJELMOINTIKIELTEN SYNTAKSI..........................................................................................8 3 OHJELMOINTIKIELEN VALINTA JA KEHITYSYMPÄRISTÖT.........................9 3.1 OPETUKSEEN SUUNNITELLUT KIELET...................................................................................10 3.2 OHJELMOINTIYMPÄRISTÖT OHJELMOINNIN OPETUKSESSA.........................................................12 4 MOTIVAATIO................................................................................................................14 4.1 MOTIVAATIOTEORIAA......................................................................................................15 4.2 MOTIVOIVA OPETTAJA......................................................................................................17 4.3 KOHTI MOTIVOIVAA OHJELMOINNIN OPETUSTA.....................................................................19 4.4 PELIT OHJELMOINNIN OPETUKSESSA....................................................................................19 4.5 ROBOTIT OHJELMOINNIN OPETUKSESSA: ROBOCODE JA LEGO MINDSTORMS..............................21 5 YHTEENVETO JA POHDINTA..................................................................................25 LÄHTEET..........................................................................................................................27 1 Johdanto Ohjelmoinnin alkeiden oppiminen tuntuu monien tutkimusten ja raporttien mukaan olevan erittäin vaikeaa. Tästä kertoo myös yliopistojen alkeiskurssien usein korkeat lopettamisprosentit. (Robins ym., 2003; Kinnunen ja Malmi, 2006) Kysymys kiinnostaa minua, koska olen itse opiskellut ja opettanut ohjelmointia ja havainnut, että suurella osalla opiskelijoita on aluksi huomattavia vaikeuksia hahmottaa ohjelmoinnin alkeita, vaikka he tekisivätkin paljon töitä asian eteen. Mitkä ovat syitä tähän ja kuinka näitä opiskelijoita voisi auttaa? Kinnunen ja Malmi (2006) tutkivat syitä kurssin kesken jättämiseen Helsingin teknillisessä yliopistossa. Tutkimus koostui kyselystä ja haastattelusta. Kysely lähetettiin kaikille kurssin keskeyttäneille, joista noin puolet (N=105) vastasi kyselyyn. Lisäksi 18 kurssin keskeyttänyttä opiskelijaa haastateltiin tarkemmin. Opiskelijoilla oli useimmiten enemmän kuin yksi syy kurssin keskeyttämiseen, mutta kaksi syytä nousi tutkimuksessa erityisesti esiin: opiskelijoilla ei ollut aikaa eikä motivaatiota. Kinnunen ja Malmi jakoivat opiskelijoiden motivaatio-ongelmat vielä kolmeen alaryhmään: 1. Opiskelijan yleinen opiskelumotivaatio on alhainen. 2. Kurssista saatava hyöty on vähäinen kurssin työmäärään nähden. 3. Kurssi tai jotkut osat siitä ovat liian vaikeita, joten motivaatio laskee. Kurssin vaikeus ei vaikuta ainoastaan motivaatioon, vaan Kinnunen ja Malmi (2006) havaitsivat sen aiheuttavan opiskelijoille myös ajankäytön ongelmia. Kun kurssi on vaikeampi kuin opiskelja olettaa, ei aika riitäkkään kurssin suorittamiseen. Se, että opiskelijat kokevat ohjelmointikurssin vaikeaksi, vaikuttaa siis molempiin pääsyihin joita tutkimuksessa havaittiin: sekä motivaatioon, että ajan riittämättömyyteen. 1 Tutkijat ja opettajat ovat löytäneet yliopisto-opiskelijoiden ongelmiin ohjelmointikursseilla myös joukon muita syitä. Syyt voidaan jaotella ainakin neljään ryhmään: oppijaan liittyvät syyt, opettajaan ja opetukseen liittyvät syyt, ohjelmointiin sinällään liittyvät syyt ja opetuksen järjestämiseen liittyvät syyt. Alla listattuna jotain syitä muutamasta eri tutkimuksesta. Lista ei pyri olemaan täydellinen. Oppijaan liittyvät syyt • Motivaatio (Jenkins, 2002; Kinnunen ja Malmi, 2006) • Väärät oppimisstrategiat (Jenkins 2002; Gomes ja Mendes, 2007) • Liian vähän aikaa opiskeluun (Kinnunen ja Malmi, 2006) • Opiskelijat eivät työskentele tarpeeksi ahkerasti (Gomes ja Mendes, 2007) Opettajaan ja opetukseen liittyvät syyt • Opettaja ei tue kaikkien oppilaiden luonnollisinta tapaa oppia (Gomes ja Mendes, 2007) • Opetetaan dynaamista asiaa staattisilla materiaaleilla, mutta osa oppilaista ei opi ohjelmoinnin dynamiikkaa näin (Gomes ja Mendes, 2007) • Opetetaan enemmän tietyn ohjelmointikielten syntaksia, kuin yleistä ongelmanratkaisua (Gomes ja Mendes, 2007) Ohjelmointiin sinällään liittyvät syyt • Ohjelmointi itsessään on vaikeaa (Smith ja Webb, 1999; Rogalski ja Samurcay, 1990; Jenkins, 2002; Du Boylay 1989) 2 • Ohjelmointikielissä on monesti vaikea syntaksi (Gomes ja Mendes, 2007) • Ohjelmointi vaatii abstrahointikykyä (Gomes ja Mondes. 2007) Opetuksen järjestämiseen liittyvät syyt • Suuret opetusryhmät (Gomes ja Mendes, 2007) • Ohjelmointikurssi järjestetään opintojen alusssa, jolloin juuri kotoa pois muuttaneilla opiskelijoilla on usein paljon muutakin opeteltavaa. (Jenkins, 2002; Gomes ja Mendes, 2007) Joskus myös puuttellisten matemaattisten taitojen ajatellaan aiheuttavan ongelmia ohjelmointikursseilla (mm. Beaubouef ja Mason, 2005; Gomes ja Mendes, 2007). Tästä on kuitenkin myös ristiriitaisia tutkimuksia ja mielipideitä (mm. Evans ja Simkin, 1989; Jenkins, 2002), joten se on jätetty listauksesta pois. Ohjelmointikursseilla ponnistelevien ongelmat saattavat siis olla hyvin monisyisiä, kuten Kinnunen ja Malmi (2006) tutkimuksessaan toteavat. Tässä tutkielmassa keskitytään lähinnä ohjelmoinnin vaikeaan luonteeseen sekä opiskelijoiden motivaatioon. Aluksi tutkielmassa käsitellään ohjelmoinnin vaikeaa luonnetta, jonka jälkeen tarkastellaan motivaatiota ohjelmoinnin oppimisen näkökulmasta. Lopuksi ohjelmoinnin vaikeutta ja motivaation yhteyttä pohditaan tarkemmin yhteenvedossa. 3 2 Ohjelmoinnin vaikeus Du Boulay (1989 viitattu Robins ym. 2003) kuvaa, kuinka ohjelmoinnissa täytyy hallita viisi yhteen limittyvää aluetta, jotka jokainen voivat osaltaan olla vaikeita: (1) mitä ohjelmat ovat ja mitä niillä voi tehdä, (2) käsitys siitä kuinka tietokone suorittaa ohjelmia, (3) käytettävän ohjelmointikielen syntaksi ja semantiikka, (4) rakenteita, kaavioita ja malleja sekä (5) pragmatiikka, eli kuinka suunnitellaan, kehitetään, testataan, debugataan ja niin edelleen. Myös Jenkinsin (2002) mielestä ohjelmointi vaatii useita eri taitoja. Boulaysta eroten Jenkins kuitenkin väittää, että taidot ovat hierarkkisessa järjestyksessä. Ensin opitaan syntaksin perusteet, sitten semantiikka, rakenne ja lopulta tyyli. Rogalskin ja Samurcayn (1990) ovat samaa mieltä Du Boulayn (1989 viitattu Robins ym. 2003) ja Jenkinsin (2002) kanssa siitä, että ohjelmoinnin oppiminen on monimutkainen prosessi. Rogalskin ja Samurcayn (1990) mielestä ohjelmointi on vaikeaa, koska siinä pitää hallita samanaikaisesti useita kognitiviisia aktiviteetteja ja mentaalisia malleja. Smith ja Webb (1999) puolestaan mainitsevat, kuinka ohjelmoinnissa tarvittavat mallit ja taidot voivat erota paljon opiskelijoiden aikaisemmin opituista taidoista. Ohjelmointi vaatii siis uudenlaista ajattelua, jota aikaisemmalla opinpolulla ei ole vielä opittu. Tutkimusten perusteella ohjelmointi ja sen oppiminen näyttäisikin olevan haastava prosessi. 2.1 Mikä ohjelmoinnissa on vaikeinta? Kun mietitään, kuinka ohjelmoinnin oppimista voitaisiin helpottaa, on oleellista ymmärtää mitkä asiat ohjelmoinnissa aiheuttavat opiskelijoille erityisesti vaikeuksia. Tällöin opetuksessa voidaan keskittää enemmän voimavaroja näiden erityisten vaikeiden ohjelmoinnin osa-alueiden opiskeluun. Lahtisen, Ala-Mutkan ja Järvisen (2005) tekemään kansainväliseen ohjelmoinnin opetusta koskevaan tutkimukseen osallistui yli 500 opiskelijaa ja yli 30 opettajaa. Vastaajista 73,4% 4 ohjelmoinnin peruskurssilla käytettiin C++-kieltä ja 17,3% Java-kieltä. Tutkimuksessa käytetty kysely oli viisiportainen, jossa ”erittäin helppo oppia” sai arvon 1 ja ”erittäin vaikea” arvon 5. Tutkimuksen mukaan vaikeinta ohjelmoinnin peruskurssilla oli ymmärtää, kuinka ohjelma suorittaa tietyn tehtävän, jakaa ohjelman toiminta aliohjelmiin ja paikantaa bugeja eli ohjelmointivirheitä ohjelmista (ks. taulukko 1). What kind of issues you feel difficult in learning programming? Students Avg Teachers Avg Using program development environment 2,43 2,61 Gaining access to computers/networks 2,11 1,97 Understanding programming structures 2,92 3,27 Learning the programming language syntax 3,27 2,70 Designing a program to solve a certain task 3,12 3,12 Dividing functionality into procedures 3,10 4,06 Finding bugs from my own program 3,28 3,91 Taulukko 1: ”What kind of issues you feel difficult in learning programming?” (Lahtinen ym., 2005) Vaikeimmat ohjelmoinnin rakenteet olivat puolestaan rekursio, osoittimet ja viitteet, abstraktit tietotyypit ja virheiden hallinta (ks. taulukko 2). Helpoimmaksi koettiin sen sijaan muuttujat, valintarakenteet ja silmukat. 5 Which programming concepts have been difficult for you to learn? Students Avg Teachers Avg Variables (lifetime, scope) 2,10 2,41 Selection structures 1,98 2,38 Loop structures 2,09 2,79 Recursion 3,22 4,06 Arrays 2,79 3,24 Pointers, references 3,59 4,44 Parameters 2,60 3,47 Structures data types 2,90 3,45 Absctract data types 3,02 4,06 Input/output handling 2,96 3,75 Error handling 3,33 4,13 Using language libraries 3,04 3,88 Taulukko 2: ”Which programming concepts have been difficult for you to learn?” (Lahtinen ym., 2005) Ohjelmoinnin opetusta suunniteltaessa on hyvä tiedostaa ohjelmoinnin oppimisen sudenkuopat ja kiinnittää näiden kohtien opettamiseen erityistä huomiota. 2.2 Miten ohjelmointia oppii parhaiten? Hyvän opetuksen kannalta on hyvin tärkeää tiedostaa, kuinka opiskelijat oppivat ohjelmointia parhaiten. On kuitenkin hyvä pitää mielessä, että oppiminen on yksilöllistä ja eri ihmiset oppivat eri tavalla. Niinpä on järkevää käyttää monipuolisia opetustapoja. Monipuoliset työtavat saattavat myös lisätä oppilaiden motivaatiota, kuten selviää luvusta 4.2. Lahtisen ym. (2005) tutkimuksessa selkeästi parhaimmaksi materiaaliksi sekä oppilaat että opettajat kokivat esimerkkiohjelmat. Oppilaiden mielestä seuraavaksi parhaat materiaalit järjestyksessä olivat luentomoniste, oppikirja, 6 interaktiiviset visualisaatiot, esimerkkitehtävät ja vastaukset sekä still-kuvat ohjelmoinnin rakenteista. Esimerkkiohjelmia lukuunottamatta oppilaat kokivat muut oppimateriaalit keskimäärin yhtä hyviksi. Opettajat löysivät muistakin oppimateriaaleista eroja selkeämmin. Esimerkkiohjelmien jälkeen seuraavina tulivat interaktiiviset visualisaatiot, still-kuvat ohjelmoinnin rakenteista, harjoitustehtävät ja vastaukset, luentomoniste ja viimeisenä oppikirja. What kind of materials have helped/would help you in learning programming? Students Teachers Programming course book 3,35 3,30 Lecture notes/copies of transparencies 3,39 3,47 Exercise questions and answers 3,33 3,62 Example programs 4,19 4,24 Still pictures of programming structures 3,15 3,70 Interactive visualizations 3,33 3,70 Taulukko 3: Opiskelijoiden vastaukset kysymykseen "What kind of materials have helped/would help you in learning programming?" (Lahtinen ym. , 2005) Lahtisen ym. (2005) kyselytutkimuksessa kysyttiin myös, että milloin opiskelijat kokevat oppivansa ohjelmointia. Opiskelijat kokivat oppivansa parhaiten silloin kun he työskentelevät yksinään kurssitehtävien parissa. Opettajat sen sijaan kokivat opiskelijoiden oppivan parhaiten käytännön harjoituksissa (demoissa) ja seuraavaksi parhaiten silloin kun he työskentelevät yksin kurssitehtävien parissa. Sekä opettajat että opiskelijat kokivat, että ohjelmointia oppii huonoiten istumalla luennoilla. Luentojen soveltuvuutta ohjelmoinnin opetukseen kannattaakin pohtia. Yliopisto-opettajan käsikirja sanoo, että luentojen tarkoitus ole ainakaan siirtää tietoa: ”Edelleenkin luento-opetus puoltaa paikkaansa yliopisto-opetuksessa, kun tavoitteena on opettaa suuria opiskelijamääriä samanaikaisesti. Tällöin on 7 kuitenkin tärkeää oivaltaa, ettei tarkoituksena niinkään ole siirtää tietoa vaan motivoida opiskelijoita kriittiseen ajatteluun, pohdintaan, kokonaisuuksien hahmottamiseen ja laajempaan itseopiskeluun. Koska kirjoja ja materiaaleja on nykyään runsaasti saatavilla, ei ole mielekästä käyttää arvokasta kontaktiopetusaikaa triviaalin tiedon siirtämiseen.” Yliopisto-opettajan käsikirja, s. 237-238. When do you feel that you learn issues about programming? Students Teachers In lectures 3,01 3,21 In exercise sessions in small groups 3,44 3,44 In practical sessions 3,77 3,77 While studying alone 3,79 3,42 While working alone on programming coursework 3,98 4,00 Taulukko 4: Tulokset kysymykseen "When do you feel that you learn issues about programming?" (Lahtinen ym. , 2005) 2.3 Ohjelmointikielten syntaksi Gomes ja Mendes (2007) esittävät yhdeksi ohjelmoinnin oppimista vaikeuttavaksi tekijäksi ohjelmointikielten monimutkaista syntaksia. Tätä ongelmaa voidaan helpottaa esimerkiksi valitsemalla opetukseen soveltuvan ohjelmointikielen tai käyttämällä jotain integroitua kehitysympäristöä (Integrated development environment = IDE). Seuraavassa luvussa käsitellään tarkemmin ohjelmointikielen valintaa sekä ohjelmoinnin oppimista helpottavia ympäristöjä. 8 3 Ohjelmointikielen valinta ja kehitysympäristöt Useimmat tutkijat ovat yhtä mieltä siitä, että ohjelmointikurssien tarkoituksena on opettaa opiskelijat ohjelmoimaan, eikä opettaa heille tiettyä ohjelmointikieltä. (Jenkins, 2002) Mielipiteet eriävät kuitenkin sen suhteen, pitäisikö ohjelmoinnin alkeiskursseille valita pedagogisesti hyvä kieli, joka olisi helppo oppia, vai kieli josta olisi mahdollisimman paljon hyötyä työelämässä. Jenkins (2002) esittää myös kolmannen näkökulman, jonka mukaan ohjelmointikielen valinnalla ei ole juurikaan merkitystä. Ohjelmointikielen valinnalla voi olla vaikutusta sekä siihen kuinka vaikeana opiskelijat ohjelmointia pitävät, että opiskelijoiden motivaatioon. Curzon ja Rix (1998) esittävät, että kaupallisesti yleinen ohjelmointikieli voisi motivoida opiskelijoita enemmän, koska näiden kielten osaajia työnantajat hakevat. Toisaalta he pohtivat myös, että jos kieli on monimutkainen, voi tämä myös vähentää opiskelijoiden motivaatiota, koska kieli on tällöin vaikeampi oppia. Vujosevic-Janicic ja Tosic (2008, sivu 67) esittävät, että ohjelmoinnin peruskurssille valittavalla ohjelmointikielellä pitäisi olla ainakin seuraavat ominaisuudet: • Helppokäyttöiset syöttö- ja tulostusoperaatiot • Luettava ja johdonmukainen syntaksi • Pieni ja ortogonaalinen määrä ominaisuuksia • Syntaktisesti selkeästi erilaiset ohjelmointirakenteet Vujosevic-Janicic ja Tosic (2008, sivu 67) korostavat myös, että ohjelmointiympäristössä pitäisi olla hyvä kääntäjä ja debuggeri, koska aloittelevat ohjelmoijat tekevät paljon virheitä ja ohjelmoijat oppivat pääasiassa kokeilemalla yrityksen ja erehdyksen kautta. 9 Kääntäjän virheilmoitusten tulisikin olla selkeällä kielellä ja heijastaa tapahtunutta syntaktista tai semanttista virhettä. 3.1 Opetukseen suunnitellut kielet Erityisesti opetuskäyttöön suunniteltu ohjelmointikieli ei ole uusi idea. Logo-kielen kehitys alkoi MIT:n tekoälylaboratoriosta ja sen ensimmäinen versio valmistui 1967. Pieni joukko MIT:n tutkijoita aloitti tutkimuksen Logon käytöstä peruskoulun opetuksessa. Useissa Logo-ohjelmointiympäristössä on käytössä kilpikonna ”Turtle”, jonka liikkumista pystyy ohjelmoimaan. (Logo, 2012) Vuonna 1971 Niklaus Wirth kehitti Algol-kielestä yksinkertaisemman version opetuskäyttöön ja antoi sille nimeksi Pascal, matemaatikko ja filosofi Blaise Pascalin mukaan. 10 3.1.1 RoboMind Kuvio 1: RoboMind-ympäristö on helppokäyttöinen työkalu ohjelmoinnin alkeiden opiskeluun RoboMind on ohjelmointiympäristö ohjelmoinnin alkeiden oppimiseen, jossa ohjelmoidaan robottia. Robotti pystyy liikkumaan, katsomaan ympärilleen, liikuttamaan esineitä ja maalaamaan. Tässä mielessä RoboMind muistuttaakin paljon Logon Turtlea, mutta siinä missä Turtle liikkua esteettömässä ympäristössä, voi RoboMindissa luoda robotille haastavampia esteitä sisältäviä karttoja. Ohjelmointikielenä ympäristössä on opetukseen suunniteltu oma yksinkertainen ROBO-kieli, joka muistuttaa syntaksiltaan hieman Java-kieltä. Ympäristö antaa silmäyksen myös robotiikkaan ja tekoälyyn, vaikka onkin ensijaisesti suunniteltu ohjelmoinnin alkeiden oppimiseen. Tähän se soveltuukin erittäin hyvin, sillä RoboMindia on helppo käyttää ja ennen kaikkea se oli todella helppo asentaa. Ohjelmointiympäristön asentaminen Windowsille tapahtui yhdestä exe-tiedostosta, jonka 11 jälkeen kaikki toimii automaattisesti. RoboMind on Windowsin lisäksi saatavilla myös Os X ja Linux -käyttöjärjestelmille. (Robomind, 2012) 3.2 Ohjelmointiympäristöt ohjelmoinnin opetuksessa Ohjelmointiympäristöissä on useita ominaisuuksia, jotka helpottavat ohjelmointia. Ne saattavat sisältää mm. automaattisen syntaksivirheiden korostuksen, koodin täydennystoiminnon ja jopa tiettyjen loogisten virheiden automaattisen korjaamisen. On selvää, että esimerkiksi syntaksivirheiden automaattinen korostus auttaa huomaamaan syntaksivirheet jo ennen ohjelman kääntämistä ja ajamista. Ohjelmointiympäristön voisikin olettaa helpottavan ohjelmoinnin alkeiden oppimista, mutta aloittelevalla ohjelmoijalla siitä voi olla myös haittaa. Chen ja Marx (2005) ovat todenneet, että osa kehitysympäristöistä on niin täynnä ominaisuuksia, että niiden oppiminen vie paljon aikaa. Ohjelmointiympäristön valinta ei siis ole helppoa. Pitäisikö valita ympäristö, joka on suunniteltu opetuskäyttöön, kuten esimerkiksi BlueJ, vai ns. ”oikea” teollisuudessakin käytössä oleva ympäristö, kuten Eclipse, jonka oppiminen voi viedä enemmän aikaa? Chen ja Marx (2005) ovat kokeilujensa perusteella päätyneet ratkaisuun, jossa he aloittavat Java-ohjelmointikurssin ohjelmoinnin perusteet. ilman ohjelmointiympäristöä, Kahdeksan viikon jälkeen jolloin he opiskelijat vaihtavat oppivat käyttämään teollisuudesakin käytettyä Eclipse-ohjelmontiympäristöä, jolloin opiskelijat ymmärtävät paremmin ohjelmointiympäristön toimintaa ja voivat tehostaa omaa ohjelmointiaan. 3.2.1 BlueJ BlueJ on Kentin yliopistossa kehitetty Java-ympäristö erityisesti olio-ohjelmoinnin alkeiden opiskeluun. Erityisen BlueJ:stä tekee se, että luokat ja oliot on mahdollista nähdä koko ajan sekä graafisena esityksenä, että koodina. Ympäristö on suunniteltu aloittelijoille ja siksi hyvin pelkistetty ja helppokäyttöinen. (BlueJ, 2012) 12 Kuvio 2: BlueJ Java-ympäristö näyttää luokat sekä graafisena esityksenä että koodina. 3.2.2 Codecademy Codeacademy on verkkokurssi ohjelmoinnin alkeiden opiskeluun JavaScript-kielellä. Sivustolla on tehtäviä, jotka tehdään sivustolla olevalla JavaScript-konsolilla. Sivusto antaa välittömän palautteen automaattisesti, eikä näin ollen vaadi opettajaa, vaan opiskelua voi tehdä täysin itsenäisesti omaan tahtiin. Motivointia on lisätty antamalla käyttäjälle pisteitä tehdyistä tehtävistä ja lisäämällä sovellukseen sosiaalisen median elementtejä. 3.2.3 Muita ympäristöjä Ohjelmointiympäristöjä on paljon muitakin. Teollisuudessa suosittuja ovat ainakin Eclipse, NetBeans ja Microsoftin Visual Studio. Ohjelmointiympäristön valintaan vaikuttaa tietenkin ohjelmointikurssille valittua ohjelmointikieli, tai ohjelmointiympäristön valinta vaikuttaa ohjelmointikielen valintaa – riippuen kumpi valitaan ensin. Useat ympäristöt tukevat useita eri kieliä, mutta jotkut on suunniteltu vain tietylle kielelle. 13 4 Motivaatio Kinnunen ja Malmi (2006) huomasivat tutkimuksessaan, että motivaation puute on yksi suurimpia syitä miksi opiskelijat jättävät ohjelmointikurssin kesken yliopistossa. He huomasivat myös, että ohjelmointikurssin vaikeudella saattaa olla yhteyttä opiskeljoiden motivaatiotaan. Myös Jenkins (2002) sekä Gomes ja Mendes (2007) ovat havainneet motivaation ongelmana yliopiston ohjelmointikursseilla. Oppilaat eivät välttämättä ole kiinnostuneita itse ohjelmoinnin oppimisesta, vaan sen oppiminen voi olla ainoastaan väline esimerkiksi hyväpalkkaisen työn saavuttamiseen. Toiset taas voivat opiskella ohjelmointia miellyttääkseen vanhempiansa. Tätä kutsutaan ulkoiseksi motivaatioksi (Malmberg ja Little, 2002). Tämän vastakohtana voidaan nähdä se, että ohjelmointi itsessään on kiinnostavaa ja motivoivaa, eli opiskelijalla on sisäinen motivaatio ohjelmoinnin oppimiseen. Jenkinsin (2002) motivaatiotutkimuksen mukaan yleisin syy ohjelmointikursseille osallistumiseen on se, että ne ovat pakollinen osa opintoja. Tutkimukseen osallistui 226 Leedsin yliopiston ensimmäisen ohjelmointikurssin opiskelijaa ja 139 Kentin yliopiston ensimmäisen vuoden ohjelmointikurssin opiskelijaa. Opiskelijoista 48% ilmoitti syyksi ohjelmointikurssille osallistumiseen, koska se on pakollinen osa opintoja, toiseksi yleisin tärkein syy kurssille tuloon oli oppiminen (20%) ja kolmanneksi sisältö (14%) . Muita syitä olivat mm. ura ja työllistyminen. (Jenkins, 2001) Middlesexin yliopistossa Lontoossa vuonna 1998 tehdyssä tutkimuksessa ainoastaan 23% opiskelijoista ilmoitti 10 vaihtoehdosta ensimmäiseksi syykseen ohjelmointikurssille tulemiseen olevan ”oppia ohjelmoimaan”. Opiskelijoista 20% halusi ymmärtää paremmin ohjelmia ja ohjelmointia. Suosituin syy, jonka 33% opiskelijoista valitsi, oli kuitenkin ”koska ohjelmoinnin ymmärtäminen auttaa minua tulevalla urallani”. Noin kolmasosa 14 opiskelijoista ei siis selvästikään ollut sisäisesti motivoituneita ohjelmoinnin oppimiseen. (Curzon ja Rix, 1998) Kolmannessa tutkimuksessa ainoastaan 22% valitsi ohjelmointikurssin, koska olivat kiinnostuneet itse ohjelmoinnista, ja loput vastanneista valitsivat kurssin jostain muusta syystä. Muita syitä olivat halu saada tai vaihtaa työpaikkaa (40%) ja kurssin pakollisuus (35%). (Mamone, 1992) Näiden kolmen tutkimuksen perusteella opiskelijoiden motivaatio saattaa olla alhainen jo kurssille tultaessa, eikä ohjelmoinnin oppimisen vaikeus ainakaan helpota tilannetta. Yllä mainittujen tutkimusten perusteella osalla korkeakouluopiskelijoista on heikko sisäinen motivaatio ohjelmointiin. Tässä luvussa esitellään nykypäivän motivaatioteorioita ja keinoja siihen, kuinka opettaja voisi lisätä opiskelijoiden motivaatiota. 4.1 Motivaatioteoriaa 4.1.1 Sisäinen ja ulkoinen motivaatio Motivaatio voidaan jakaa sisäiseen ja ulkoiseen motivaation. Sisäiseen motivaatioon kuuluu uteliaisuutta, spontaaniutta ja kiinnostusta ilman ulkoisia palkkioita. Ulkoisesti motivoituneelle ihmiselle sen sijaan tärkeitä ovat palkkiot, suosio, hyväksyntä ja rangaistuksen välttäminen. (Malmberg ja Little, 2002, s. 129) Linus Torvalds kertoo kirjassa ”Just for fun” Torvalds omaa suhtautumistaan ohjelmointiin: ”En tiedä miten voisin selittää, miten jännittävää koodin kirjoittaminen on, mutta yritän kuitenkin. Henkilölle, joka harrastaa ohjelmointia, se on jännempää kuin mikään muu maailmassa. Se on shakkia monimutkaisempi peli. Siinä ikään kuin 15 itse laatii pelin säännöt, ja lopputulos on se minkä pystyt siitä luomaan.” (Torvalds ja Diamond, 2001, s. 89) On helppo tunnistaa, että Torvaldsilla on sisäinen motivaatio ohjelmointiin. Kuvauksen perusteella häntä ei motivoi ulkoiset palkkiot kuten raha, menestys tai kunnoitus, vaan ainoastaan kiinnostus itse ohjelmontia kohtaan. Bergin ja Reilly (2005) havaitsivat tutkimuksessaan, että sisäisellä motivaatiolla on suuri positiivinen vaikutus ohjelmointikurssilla menestymiseen. Ihanteellista olisikin jos opiskelijoissa saisi sytytettyä sisäisen motivaation ohjelmointia kohtaan. On kuitenkin myönnettävä, että ohjelmointi ei voi herättää sisäistä motivaatiota kaikissa opiskelijoissa, joten myös ulkoiselle motivaatiolle on paikkansa. 4.1.2 Itsemääräytymisteoria Ryanin ja Decin (viitattu Malmberg ja Little, 2002) itsemääräytymisteorian mukaan ihmisellä on kolme universaalia psykologista perustarvetta: autonomia, kompentessi ja yhteenkuuluvuus, jotka vaikuttavat ihmisen ulkoiseen ja sisäiseen motivaation. Kompetenssilla tarkoitetaan yksilön tarvettta ”tuntea itsensä tehokaaksi sosiaalisessa ympäristössään ja kokemusta mahdollisuuksista harjoittaa ja näyttää omia kykyjään”. (Deci ja Ryan, 2002) Ohjelmoinnin opetuksen näkökulmasta kompetenssi nousee erityisesti esiin. Ohjelmointi on vaikea taito, kuten luvussa 2 todettiin. Niinpä ohjelmoinnin opiskelu ei välttämättä ainakaan aluksi anna opiskelijalle kompetenssin eli pätevyyden tuntua, joka itsemääräytymisteorian mukaan laskee opiskelijoiden motivaatiota. Itsemääräytymisteorian perusteella voikin olla, että ohjelmoinnin vaikeudella ja motivaatiolla on yhteys, joka perustuu opiskelijoiden kokemaan kompetenssiin. Jos tämä pitäisi paikkaansa, voitaisiin opiskelijoiden motivaatiota siis parantaa myös helpottamalla ohjelmoinnin oppimista ja lisäämällä opiskelijoiden onnistumisen kokemuksia. 16 Parhaimillaan kompetenssin kokeminen saattaa aiheuttaa kierteen, joka lisää motivaatiota ja oppimista entisestään. Jos opiskelija kokee ohjelmoinnissa onnistumisen tunteita (kompetenssi) hänen motivaationsa kasvaa ja hän opiskelee yhä enemmän, jolloin hän todennäköisesti osaa yhä paremmin ja tuntee yhä enemmän kompentessia. Sama saattaa valitettavasti toimia myös käänteisesti. Jos opiskelija kokee olevansa huono ohjelmoinnissa, hänen motivaationsa laskee, jolloin hän jaksaa harjoitella ja opiskella yhä vähemmän ja tuskin oppiikaan kovin hyväksi ohjelmoijaksi. Kompetenssin kokemisen, motivaation ja ohjelmoinnin oppimisen yhteyttä pitäisi tutkia lisää. Uskallan kuitenkin väittää, että opettaja voi lisätä oppilaiden motivaatiota tuottamalla heille onnistumisen kokemuksia. Yksi keino tähän voisi olla tehdä eri tasoisia harjoitustehtäviä, jotta kaikki voisivat saada onnistumisen elämyksen. Jos kurssilla on esimerkiksi käytännönharjoituksia, voisi ensimmäinen tehtävä olla aina sellainen, että jokainen osaa varmasti sen ratkaista. Kompetenssin motivaatiota kokemisen voidaan lisäksi lisätä itsemääräytymisteorian autonomialla ja mukaan opiskeljoiden yhteenkuuluvuuden tunteella. Ohjelmointikursseilla autonomiaa voitaisiin lisätä esimerkiksi tarjoamalla opiskelijoille valinnanvapautta harjoitustehtäviin. Yhteenkuuluvuutta sen sijaan voitaisiin lisätä järjestämällä esimerkiksi tilaisuuksia, joissa harjoitustehtäviä voisi pohtia ja ratkoa yhdessä. 4.2 Motivoiva opettaja ”Yksi tärkeimmistä asioista, jonka opettaja voi tehdä, on välittää oma intohimonsa asiaan. Tällä tavoin opettaja voi tehdä kiehtovan myös asiasta, jota opiskelija ei ehkä etukäteen pitänyt kiinnostavana”. (Himanen, 2010, s.130) 17 Himasen (2010) mukaan opittavan asian tekeminen merkitykselliseksi on opettajan tärkeimpiä tehtäviä. Nimittäin jos opiskelija ei koe asiaa kiinnostavaksi ja merkitykselliseksi, hän saattaa opetella asian kokeeseen, mutta unohtaa sen välittömästi kokeen jälkeen. Jos sen sijaan opiskelija kokisi opiskeltavan asian kiinnostavaksi ja merkitykselliseksi niin hieman kärjistettynä oppiminen seuraisi tämän jälkeen kuin itsestään. Kun nykypäivänä tietoa on helposti saatavilla esimerkiksi Internetin välityksellä, voisi pelkkä innostaminen johtaa huikeisiin oppimistuloksiin. Himasen ajatusten taustalla on sokraattinen idea luovan intohimon ”paarmaan pistosta”. Lindblom-Ylänne ym. (2009, s. 88) ovat listanneet yliopisto-opettajan työkaluja motivaation ja kiinnostuksen rakentamiseksi. • Julkista oppimistavoitteet ja pane opiskelijat miettimään henkilökohtaisia tavoitteitaan kurssillasi • Vaihtele aktiivisesti työskentelytapoja: pane opiskelijat itsenäisesti, ryhmässä, pareittain ja verkossa. • Rakenna turvallista oppimisympäristöä. • Kannusta kysymään ja kysy itsekin. • Tarjoa vaihtoehtoisia suoritustapoja ja valinnan mahdollisuuksia • Kytke opetus ajankohtaisiin ja opiskelijoiden omiin kysymyksiin. • Anna palautetta ja pane opiskelijat antamaan palautetta toisilleen. • Kerro, mistä olet itse kiinnostunut ja anna innostuksesi näkyä. 18 työskentelemään 4.3 Kohti motivoivaa ohjelmoinnin opetusta Perinteisesti ohjelmoinnin opetus on alkanut konsoliohjelmien tekemisellä. Ensimmäinen ohjelma tulostaa usein konsoliin tekstin ”Hello World”. Myöhemmin siirrytään tehtäviin, joissa käyttäjältä kysytään syötteitä konsolissa, joiden perusteella ohjelman toiminta sitten muuttuu. Feldgen ja Clua (2003) ovat huomanneet, että opiskelijoita motivoi konsoliohjelmien sijaan pelien ja web-sovellusten tekeminen eli sovellukset, joihin he törmäävät myös vapaa-ajallaan. ”We begin our course with game programs using only integer variables and logical conditions modeling the rules. Class after class we introduce algorithms and control structures, to work out the games. After midterm we introduce complex algorithms and complex data structures to build card and board games, and game competitions with ranking and awards. We use CGI Web programming to let students play with fancy user interfaces.” (Feldgen ja Clua, 2003, s. T3C24) Ennen uuden pelien tekemiseen perustava lähestymistavan aloittamista 25% opiskelijoista jätti kurssin kesken ja 10% jätti koko oppilaitoksen. Opetuksen muuttamisen jälkeen kurssin jätti kesken enää 10%, eikä yksikään opiskelija jättänyt koko oppilaitosta. 4.4 Pelit ohjelmoinnin opetuksessa Yulia ja Adipranata (2010) tutkivat muutosta opiskelijoiden menestyksessä, kun perinteinen olio-ohjelmoinnin opetus korvataan pelisuunnittelun kautta tapahtuvalla yhteistoiminnallisella opetuksella (Cooperative Learning). Yhteistoiminnallisessa oppimisessa oppilaat ratkaisevat tehtäviä ryhmässä ja jokainen on vastuussa oman oppimisensa lisäksi myös muiden oppimisesta. Olio-ohjelmointi kurssi ei ollut Petran 19 kristillisessä yliopistossa ensimmäinen ohjelmoinnin kurssi vaan peruskurssin jälkeen pidettävä jatkokurssi. Aluksi oppilaat tekivät yksinkertaisen pelin käyttämällä GameMaker-sovellusta joka ei vaadi vielä ohjelmointiosaamista ja jossa opiskelijat oppivatkin enemmän pelisuunnittelua. Tämän aikana opiskelijoille opetetaan kuitenkin olio-ohjelmoinnin ideaa. GameMakerillä tehdyn pelin jälkeen oppilaat alkavat ohjelmoimaan käyttämällä C++-kieltä. Olioiden suunnittelun apuna käytettiin minimUML-ohjelmistoa, joka näyttää oliot visuaalisesti luokkakaavioina. Olioiden opetuksessa käytettiin esimerkkinä oikeaa World of Warcraft -peliä. Muutosten tuloksena kuuden edellisen kurssin keskimääräinen läpipääsyprosentti 59.27 nousi 80.64 prosenttiin. Myös Jyväskylän Yliopistossa on otettu peliohjelmointi ohjelmoinnin alkeiskurssin lähtökohdaksi. Kurssilla käytettiin yliopistossa kehitettyä Jypeli-kirjastoa, joka perustuu Microsoftin XNA-pelikehitysympäristöön, ja jossa ohjelmontikielenä on C#. Isomöttösen ja Lappalaisen (2012) tutkimuksesta selviää, että opiskelijat kokivat peliteeman muun muassa ajankohtaiseksi, mukavaksi, inspiroivaksi, motivoivaksi, tehokkaaksi ja helposti lähestyttäväksi. Kun opiskeljoilta kysyttiin, kävisivätkö he kurssin mielummin perinteisesti Java-kielellä, suurin osa vastaajista (35%) oli täysin eri mieltä asteikolla yhdestä viiteen. (1= täysin eri mieltä ja 5 = täysin samaa mieltä.). Toiseksi eniten vastauksia sai vaihtoehto 3 (32%), joka voineen tulkita niin, että suuri osa vastaajista ei myöskään osannut oikein sanoa, oliko peliteema heidän mielestään hyvä vai ei. Huomattavaa kuitenkin on, että vaihtoehdot 4 ja 5, eli perinteinen Java-kurssi, olisi ollut ainoastaan 11% vastaajan mieleen. Kysymys on kieltämättä hankala aloitteleville ohjelmoijille, koska heillä ei välttämättä ole kokemusta Java-kielestä, joten voi olla vaikea sanoa, kummalla tapaa kurssin kävisi mieluiten. Opiskelijoiden pysymistä mukana kursilla mitattiin viikottaisten kurssiehtävien palauttaneiden opiskelijoiden määrällä. Opiskelijat pysyivätkin selvästi paremmin mukana kurssilla verrattuna aiempiin vuosiin. (kts. Kuvio 3). 20 Kuvio 3: Opiskelijoiden kurssitehtävien palauttaminen vuosina 20082011, ennen ja jälkeen peliohjelmointikurssiin siirtymisen. (Lappalainen ja Isomöttönen, 2012) Isomöttönen ja Lappalainen (2012) kuitenkin havaitsivat, että pelikirjaston käyttäminen saattaa myös vaikeuttaa joidenkin ohjelmoinnin perusteiden ymmärtämistä, sillä voimakas kirjasto peittää alleen paljon ohjelman toimintaa. 4.5 Robotit ohjelmoinnin opetuksessa: Robocode ja Lego Mindstorms Toinen idea motivoida opiskelijoita ohjelmointiin on käyttää opetuksessa jollain tapaa robotteja. Tätä on kokeiltu ainakin kahdella eri tavalla. Ensimmäiseksi voidaan käyttää opetuksessa ohjelmointiympäristöä, joka mahdollistaa virtuaalisen robotin ohjelmoinnin. Tällaisessa ympäristössä robotin toimintaa simuloidaan graafisella simulaattorilla. Yksi tällainen ympäristö on Robocode. Toinen tapa on ohjelmoida oikeaa fyysistä robottia. 21 Ohjelmointikursseilla tätä on kokeiltu muun muassa Lego Mindstorm -robotteja ohjelmoimalla. Tässä luvussa esitellään lyhyesti kokemuksia molemmista näistä tavoista. Robocoden idea on ohjelmoida tekoäly panssarivaunurobottiin, jonka tarkoitus on tuhota toiset panssarivaunut. Robocode toimii sekä Java että .NET ympäristössä. Robocodeympäristö sisältää kirjaston robottien ohjelmoimiseen sekä sovelluksen, jossa robotteja voi laittaa taistelemaan toisiaan vastaan simulaattorissa. Taistelua voi seurata 2-ulotteisena visualisaationa (ks. Kuvio 4). Robocodea voidaan käyttää sekä ohjelmoinnin perusteiden opetukseen, että tekoälyn opiskeluun. (Robocode, 2012) Kuvio 4: Robocode-ympäristön "taisteluareena" O'Kelly ja Gibson (2006) ovat käyttäneet Robocode-ohjelmointipeliä yliopiston ensimmäisellä ohjelmointikurssilla. Oppilaat ohjelmoivat oman taistelurobotin maksimississaan kolmen hengen ryhmissä. Kurssin lopuksi ryhmät robotteineen kisaavat toisiaan vastaan turnauksessa, jonka voittaja pääsee edustamaan yliopistoa kansalliseen 22 Robocode-kilpailuun. O'Kelly ja Gibson toteavat, että Robocodea yhdistelee hauskalla tavalla ohjelmointia, pelejä ja tekoälyä. Valitettavasti O'Kellyn ja Gibsonin paperista ei selviä edes opettajien tuntemuksia siitä, että kuinka hyvin oppilaat lopulta oppivat ohjelminnin perusrakenteet. Kurssin voittajajoukkue sijoittui kuitenkin ensimmäisenä kokeiluvuonna kansallisessa Robocode-kilpailussa kolmanneksi ja seuraavana vuonna toiseksi. Tämä ei toki kerro yhtään mitään siitä, kuinka hyvin keskimäärin kurssilla opittiin. Robotteja opetuksessa käytetään myös Yhdysvaltojen sotilasakatemia West Pointissa, jossa ohjelmoinnin perusteita on opetettu kadeteille Lego Mindstorm –robottien avulla. Schumacher ym. (2001) kirjoittaa, että robottien käyttäminen helpottaa algoritmien oppimista sillä robotin liikkumisen avulla algoritmin toiminta on helpompi ymmärtää. Harjoitustyönä oppilaat toteuttivat robotin, jonka piti löytää tie ulos labyrintista. Oppilaita oli motivoitu pukemalla tehtävä tosielämän muotoon: ”Embedded computer systems are pervasive in Army weapons systems. These systems will be a part of your daily life in the Army. Understanding how they operate (or fail to) is important in order to take advantage of the system's full potential. The Army is looking at robotic systems for a number of force multiplying systems. Your commander has provided you with a prototype robotic system that can maneuver across terrain with obstacles. Your task is to evaluate the system, write an algorithm to negotiate two types of obstacles, and successfully maneuver through a testtrack. If your algorithm works correctly, and within a specified time limit, the manufacturer will build the fielded system with an embedded version of your code. Good luck and make sure you test your program to ensure it works as advertised. You would not want the Army to buy a system that has a defect.” (Schumacher ym. 2001, s. F1B-3) 23 Oppilaat eivät Schumacherin mukaan ainoastaan täyttäneet vaatimuksia, vaan jopa ylittävät ne. (Schumacher ym. 2001) 24 robotille asetettuja 5 Yhteenveto ja pohdinta Opettajat ja tutkijat ovat havainneet korkeakoulujen ohjelmointikurssien haasteiksi opiskeljoiden heikon motivaation, opiskelijoiden henkilökohtaiset syyt kuten ajanpuutteen sekä ohjelmoinnin haastavan luonteen. Ohjelmointi on vaikea taito joka vaatii monien – jo yksistään haastavien – eri osa-aluiden yhtäaikaista hallintaa. Ohjelmointi vaatii myös uudenlaista ajattelua, jota ei välttämättä ole opittu koulussa aikaisemmin sekä uudenlaisia mentaalisia ja kognitiivisia malleja. Opettaja voi helpottaa ohjelmoinnin oppimista muuan muassa kiinnittämällä erityistä huomoita opiskelijoille vaikeutta tuottaviin ohjelmoinnin osa-alueisiin ja rakenteisiin sekä käyttämällä tehokkaita ja toimivia opetusmenetelmiä ja oppimateriaaleja. Opiskelijoille vaikeita ohjelmoinnin osa-alueita on mm. sen ymmärtäminen, kuinka ohjelma suorittaa tietyn tehtävän, ohjelman toiminnan jakaminen osiin ja ohjelmointivirheiden paikantaminen ohjelmasta. Vaikeimpia ohjelmointikielen rakenteita ovat muun muassa rekursio ja osoittimet. Parhaaksi oppimateriaaliksi sekä oppilaat että opettajat kokevat esimerkkiohjelmat. Tutkimusten mukaan ohjelmointia opitaan parhaiten käytännön harjoittelulla joko yksin tai ohjatusti, ja vähiten luennoilla istumalla. Ohjelmoinnin haastavuus saattaa olla myös yksi syy opiskeljoiden heikkoon motivaatioon. Itsemääräytymisteorian mukaan yksi ihmisen psykologisista perustarpeista on kompentessin eli pätevyyden kokeminen. Kun opiskelijaa kokee ohjelmoinnin vaikeaksi eikä suoriudu harjoitustehtävistään, hän ei koe kompetenssin tunnetta, jolloin hänen motivaationsa laskee. Toisaalta itsemäärytymisteorian mukaan onnistumisen kokemukset lisäävät motivaatiota. Opettaja voisikin lisätä opiskelijoiden motivaatiota esimerkiksi suunnittelemalla käytännönharjoitukset niin, että ne sisältävät eri tasoisia tehtäviä, jotta mahdollisimman moni voisi saada tehtäviä tehdessään onnistumisen elämyksiä. 25 Toinen motivaatioon liittyvä haaste on, että osaa opiskelijoita on sisäisen motivaation sijaan lähinnä ulkoisesti motivoituneita ohjelmoinnin oppimiseen. Opiskeljoita saattaa itse ohjelmoinnin oppimisen sijaan motivoida työ, ura tai kurssin pakollisuus. Tutkimusten mukaan kuitenkin yksilöt, joilla on sisäinen motivaatio ohjelmointia kohtaan, pärjäävät ohjelmoitikursseilla parhaiten. Tutkimuksissa on havaittu myös opiskelijoiden motivaation ja oppimistulosten paranevan, jos ohjelmointia opetetaan tekemällä sovelluksia, jotka ovat opiskelijoille tuttuja myös vapaa-ajalta. Tällaisia voivat olla esimerkiksi pelien tai nettisivujen tekeminen. Syynä saattaa olla, että näiden sovellusten tekeminen lisää opiskeljoiden sisäistä motivaatiota. Myös kursseista joilla ohjelmoinnin opetukseen käytetään tavalla tai toisella robotteja, on ollut positiivisia kokemuksia. 26 Lähteet Beaubouef, T. ja Mason, J. 2005. Why the High Attrition Rate for Computer Science Students: Some Thoughts and Observations. ACM SIGCSE Bulletin Volume 37 Issue 2, June 2005 Bergin, S. ja Reilly, R. 2005. The influence of motivation and comfort-level on learning to program. 17th Workshop of the Psychology of Programming Interest Group, Sussex University, June 2005 Byrne, P. ja Lyons, G. 2001. The Effect of Student Attributes on Success in Programming. ITiCSE 2001 61/01 . Canterbury, UK BlueJ. 2012. BlueJ – About [online] Saatavilla <http://www.bluej.org/about/about.html> [Viitattu 7.9.2012] Deci, E.L. Ja Ryan R.M. 2002. Handbook of Self-Determination Research. Evans, G. E. ja Simkin M. G. 1989. What Best Predicts Computer Proficiency? Communications of the ACM. November 1989 Volume 32 Number 11 Gomes, A. Mendes, A. J. 2010. Studies and Proposals about Initial Programming Learning. 40th ASEE/IEEE Frontiers in Education Conference. Washinton DC. Gomes, A. ja Mendes, A. J. 2007. Learning to program - difficulties and solutions. International Conference on Engineering Education – ICEE 2007. Himanen, P. 2010. Kukoistuksen käsikirjotus. WSOY. Isomöttönen, V. ja Lappalainen V. 2012. CS1 with games and an emphasis on TDD and unit testing: Piling a trend upon a trend. 27 Jenkins, T. 2001. The Motivation of Students of Programming. ITJCSE 2001 6/01 Canterbury, United Kingdom. Jenkins, T. 2002. On The Difficulty of Learning To Program. 3rd Annual LTSN-ICS Conference, Loughborough University. Kinnunen, P. ja Malmi, L. 2006. Why Students Drop Out CS1 Course? ICER’06,September 9–10, 2006, Canterbury, United Kingdom. Lahtinen, E. Ala-Mutka, K. ja Järvinen, H-M. 2005. A Study of the Difficulties of Novice Programmers. ITiCSE’05, June 27–29, 2005 Lindblom-Ylänne, S. Mikkonen, J. Heikkilä, A. Parpala, A. ja Pyhältö, K. 2009. Luku 4. Oppiminen yliopistossa teoksessa Lindblom-Ylänne, S. ja Nevgi, A. (toim.) Yliopistoopettajan käsikirja. WSOYpro Oy. Helsinki. Logo. 2012. [online] Saatavilla <http://el.media.mit.edu/logo-foundation/logo/index.html> [Viitattu 7.10.2012] Malmberg, L-E. ja Little T. D. 2002. Nuorten koulumotivaatio. Teoksessa Salmela-Aro, K. ja Nurmi J-E (toim.). 2002. Mikä meitä liikuttaa – Modernin motivaatiopsykologian perusteet. PS-Kustannus. Keuruu. Mamone, S. 1992. Emiprical Study of Motivation in a Entry Level Programming Course. ACM SIGPLAN Notices, Volume 27, No. 3, March 1992 . O'Kelly, J. ja Gibson, J. 2006. P. RoboCode & Problem-Based Learning: A nonprescriptive approach to teaching programming. ITiCSE’06, Univ. of Bologna, Italy, 26 28 June 2006. 28 Robins, A. Rountree, J. ja Rountree, N. Learning and Teaching Programming: A Review and Discussion, Computer Science Education 2003 Vol. 13, No. 2, s. 137–172 Robocode. 2012. Robocde – Read Me. [online] Saatavilla <http://robocode.sourceforge.net/docs/ReadMe.html > [Viitattu 7.10.2012] Robomind. 2012. Robomind – Introcduction. [online] Saatavilla <http://www.robomind.net/en/introduction.htm> [Viitattu 7.9.2012] Smith, P. A ja Webb, G.I. 1999. Evaluation of Low-Level Program Visualisation for Teaching Novice C Programmers. Computers in Education (ICCE’99) Vol. 2 pp 385-392 IOS Press. Schumacher, J. 2001. Teaching Introductory Programming, Problem Solving And Information Technology With Robots at West Point. 31st ASEE/IEEE Frontiers in Education Conference. Torvalds, L. ja Diamond, D. 2001. Just for fun. Otavan Kirjapaino. Keuruu. Yulia ja Adipranata, R. 2010. Teaching Object Oriented Programming Course Using Cooperative Learning Method Based On Game Design and Visual Object Oriented Environment. 2010 2nd international Conference on Education Technology and Computer (ICETC). Vujosevic-Janicic, M. Ja Tosic, D. 2008. The Role of Programming Paradigms in the First Programming Courses. The Teaching Mathematics 2008, Vol. XI, 2, pp. 63–83 29
© Copyright 2024