Visuaalinen ohjelmointi tietotekniikan perusopetuksessa 11. huhtikuuta 2006 Jussi Nikander 49537E jtn@cs.hut.fi 1 Johdanto Monilla opiskelijoilla on vaikeuksia oppia ohjelmoinnin perusteita ensimmäisellä yliopiston ohjelmointikurssilla. Erityisesti opiskelijat, joilla ei ole aikaisempaa ohjelmointikokemusta, tai joiden matemaattiset taidot ovat puutteellisia, ovat vaarassa pärjätä huonosti [7, 8]. Ongelmia aiheuttavat muun muassa ohjelmointikielten syntaksin opettamiseen tarvittava aika [1], opittavien konseptien, teorioiden ja käytäntöjen suuri lukumäärä [3], sekä ohjelmavirheiden aiheuttama epävarmuus ja tästä johtuva motivaation katoaminen [6]. Huonosti menestyvien opiskelijoiden tukemiseen on esitetty useita erilaisia ratkaisuja. Yksi tapa on järjestää ennen ensimmäistä ohjelmointikurssia esikurssi, jossa opetellaan ohjelmoinnin perusteita. Tällaisella kurssilla voidaan käyttää esimerkiksi ohjelmointikieltä muistuttavaa pseudokieltä [9] tai aloittelijalle helpommin lähestyttävää ohjelmointiympäristöä [8]. Joidenkin tutkimusten mukaan pseudokielen käyttö ei välttämättä helpota asioiden oppimista, vaan voi jopa lisätä aloittelijoiden vaikeuksia [4]. Ohjelmointiympäristöjen käytöstä on sen sijaan saatu paljon positiivisia kokemuksia. Aloittelijoille suunnatuissa ohjelmointiympäristöissä käytetään usein hyväksi visualisaatioita, joiden avulla joko kuvataan ohjelman rakennetta, tai havainnollistetaan sen toimintaa ajonaikaisesti. Monissa järjestelmissä on myös mahdollista tuottaa ohjelmakoodia manipuloimalla visualisaatioita; joissain järjestelmissä tämä on ainoa ohjelmakoodin tuottamistapa toisissa koodia on mahdollista myös kirjoittaa [2, 4]. Osa järjestelmistä käyttää visuaalisia ohjelmointikieliä termin varsinaisessa merkityksessä (ohjelmointikieli, jossa kontrollivuo määritellään vähintään kahdessa ulottuvuudessa) ja osa käyttää muita ohjelmistovisualisoinnin keinoja [1]. Tässä työssä käsitellään järjestelmiä, joissa ohjelmointia voidaan suorittaa visualisaatioita manipuloimalla, eikä pelkästään visuaalisia ohjelmointikieliä käyttäviä järjestelmiä. Työssä tarkastellaan kolmea ohjelmoinnin perusopetukseen suunniteltua järjestelmää, joissa käytetään visualisaatiota ohjelman rakenteen, ajonaikaisen toiminnan, tai koodin tuottamisen apuvälineinä. Tutkittavat järjestelmät ovat Alice [2], RAPTOR [1] ja ALVIS Live! [4]. Luvussa 2 esitellään järjestelmien analysoinnissa käytettävät mittarit ja luvussa 3 esitellään järjestelmät tarkemmin. Luvussa 4 verrataan järjestelmiä käytettävien mittarien avulla ja luku 5 sisältää loppukommentit. 2 Käytettävät mittarit Järjestelmiä voidaan vertailla lukuisten mittarien avulla. Tässä työssä käytetään kolmea mittaria: kirjallisuudesta löytyviä kriteerejä, järjestelmien testausta ja muiden saamia tutkimustuloksia. Mittareita ei käytetä asettamaan järjestelmiä paremmuusjärjestykseen, vaan niillä mitataan järjestelmien soveltuvuutta perusopetukseen. Kirjallisuudesta löytyi seuraavat kriteerit. 1
Helppojen virheiden välitön huomionti tai estäminen [1, 2, 4] Yksinkertainen, vasta-alkajalle ymmärrettävä syntaksi [2, 4] Välitön palaute koodin kirjoittamisen aikana [1, 4] Järjestelmien testauksen tarkoitus on evaluoida kuinka hyvin järjestelmää voidaan käyttää perusopetuksessa. Evaluaatiossa kiinnitetään huomiota seuraaviin ominaisuuksiin: helppo asennus, helposti opittava käyttöliittymä, dokumentaatio ja erityisesti järjestelmän tutoriaalit, käytetyn kielen ilmaisuvoima ja järjestelmän kattama aihealue. Ilmaisuvoimaa lukuunottamatta kriteerit on soveltuvin osin muokattu Korhosen ja muiden esittämästä vaivattoman algoritmanimaation taksonomiasta [5]. Valitut kriteerit ovat aivan yhtä relevantteja ohjelmoinnin perusopetuksessa käytettävissä järjestelmissä kuin algoritmivisualisaatiojärjestelmissäkin. Muiden tutkimustulokset etsitään kirjallisuudesta. Näitä tuloksia tutkitaan objektiivisesti, ja pyritään päättelemään mitä tuloksia oikein on saatu, ja ovatko nämä tulokset päteviä. 3 Tutkitut järjestelmät Työhön mukaan valittiin kolme järjestelmää, Alice, RAPTOR ja ALVIS Live!. Järjestelmät valittiin, koska ne ovat tarkoitettu nimenomaan ohjelmoinnin perusopetukseen, niitä on onnistuneesti käytetty tässä tarkoituksessa ainakin yhdessä yliopistotason oppilaitoksessa, käytöstä saatuja tuloksia on julkaistu, ja järjestelmät ovat vapaasti saatavilla. 3.1 Alice Alice [2] on aloittelijoille suunnattu kolmiulotteisen maailman mallinnusjärjestelmä, jossa käyttäjä manipuloi virtuaalimaailmassa olevia olioita visuaalisesti. Jokaisella oliolla on joukko metodeja, joiden avulla sitä voi käskyttää, ja siten luoda maailmaan animaatioita ja muuta toiminnallisuutta. Olioita käskytetään järjestelmän ohjelmaeditorissa, jossa koodia tuotetaan raahamalla varattuja sanoja, metodeja ja muita ohjelman osia koodi-ikkunaan. Kaikki koodin muuntelu tapahtuu hiiren avulla. Koodi muistuttaa tyypillistä oliokielen koodia, ja sisältää yleisimmät ohjelmarakenteet, kuten muuttujat, taulukot, silmukat ja ehtolauseet. Alice on suunnattu käyttäjille, joilla ei ole laisinkaan aikaisempaa ohjelmointikokemusta, eikä kovinkaan suurta kiinnostusta ohjelmoinnin oppimiseen. Alicen maailman käsittely ja siinä olevat oliot on pyritty tekemään mahdollisimman intuitiivisiksi käyttäjille, jotka eivät ole aikaisemmin ohjelmoineet. Esimerkiksi olioita käsketään suhteessa niiden sen hetkiseen sijaintiin ja suuntaan, eikä suinkaan mihinkään absoluuttiseen koordinaatistoon. Lähes kaikki maailmaan tehtävät käskyt animoidaan, ja järjestelmässä on kattavat aputoiminnot. Järjestelmän käyttöliittymä näkyy kuvassa 1. Tekijät uskovat, että Alicen kolmiulotteinen maailma, animaatioiden antama välitön palaute sekä helpot ohjelmointivirheet estävä graafinen ohjelmointiympäristö motivoivat huonosti pärjääviä opiskelijoita. Järjestelmää kehitettäessä on erityisesti otettu huomioon tyttöjen motivaation herättäminen 1. Järjestelmää on käytetty useissa yliopistoissa osana ohjelmoinnin opetusta, tyypillisesti joko ensimmäisen ohjelmointikurssin alussa tai erillisellä esikurssilla, jossa riskiopiskelijoille esitellään ohjelmoinnin perusteet [3, 8]. Raportoidut tulokset ovat olleet lupaavia, ja periteisillä ohjelmointikursseilla huonosti pärjäävät riskiryhmät ovat pärjänneet Alice-kursseilla, sekä Alicea käytettyään tavallisessa ohjelmoinnin opetuksessa. 1 http://www.alice.org/whatisalice.htm 2
Kuva 1: Kuvakaappaus Alice-järjestelmästä 3.2 RAPTOR RAPTOR [1] on ohjelmoinnin perusopetukseen kehitetty visuaalinen ohjelmointikieli, jossa ohjelman toiminta esitetään vuokaaviomaisesti. Kaavio muodostuu sijoituksista, metodikutsuista, syöttö- ja tulostuskäskyistä, ehtolauseista ja silmukoista. Jokainen RAPTOR-kaavion symboli sisältää yhden komennon. Käyttäjä voi ajaa valmista ohjelmaa jatkuvana animaationa, tai askel kerrallaan, jolloin järjestelmä näyttää jokaisella askeleella suoritettavan komennon sekä muuttujien tilan. Järjestelmä on kehitetty Yhdysvaltain ilmavoimien akatemiassa ohjelmoinnin perusopetukseen, ja se korvasi akatemian ensimmäisellä ohjelmointikurssilla Adan ja Matlabin. Järjestelmän tarkoitus on helpottaa ohjelmoinnin harjoittelua estämällä helppojen syntaksivirheiden teko sekä näyttämällä ohjelman kontrollivuo visuaalisemmin kuin tavanomaisissa kielissä. Järjestelmä näkyy kuvassa 2. Ohjelmointi RAPTORilla on yhdistelmä ohjelman graafista manipulaatiota ja parametrien kirjoittamista. Itse symboli ja sen paikka koodissa määritellään hiiren avulla, ja tarkka käsky, sen parametrit, yms., kirjoittamalla. Ohjelmasymboleissa käytetty syntaksi on yhdistelmä C-kielen ja Pascalin elementtejä, ja elementeillä voi olla useita synonyymejä. Esimerkiksi ehtolauseissa sekä C-tyylinen &&, että Pascal-tyylinen and merkkaa loogista jaoperaatiota. RAPTORin käyttöä on tutkittu yhdessä oppilaitoksessa, ja siitä on saatu hyvältä vaikuttavia tuloksia. Mitään tietoja järjestelmän käytöstä Yhdysvaltain ilmavoimien akatemian ulkopuolella ei ole. 3.3 ALVIS Live! ALVIS Live! [4] on visualisointijärjestelmä, jossa käyttäjä voi generoida ohjelmakoodia joko manipuloimalla objekteja graafisesti, tai normaalisti kirjoittamalla. Järjestelmän ohjelmointikieli on pseudokoodia suuresti muistut- 3
Kuva 2: Kuvakaappaus Raptor-järjestelmästä tava, algoritmien perusopetukseen kehitetty SALSA-kieli. ALVIS Live! on ensisijaisesti perusalgoritmien opetukseen tarkoitettu järjestelmä, mutta sitä voidaan käyttää myös ohjelmoinnin perusteiden opiskeluun. Kuvassa 3 näkyy järjestelmän käyttöliittymä. ALVIS Live! perustuu radikaalin dynaamiseen algoritmivisualisaatioon. Periaatteena on, että järjestelmä tuottaa algoritmianimaatiota sitä mukaa, kun ohjelmakoodia syötetään, ja pyrkii jatkuvasti pitämään animaation kursorin osoittamalla ohjelmakoodin rivillä. Täten, jos käyttäjä muuttaa kursorin paikkaa esimerkiksi nuolinäppäimien avulla, ajaa ALVIS Live! algoritmianimaatiota joko eteen tai taaksepäin. Järjestelmä tarkistaa koodin syntaksin jokaisen näppäimen painalluksen jälkeen, ja korostaa väärää syntaksia sisältävät rivit. Syntaksivirheiset rivit jätetään animaatiota tuotettaessa huomiotta. Järjestelmän visualisaatio tunnistaa kolme entiteettiä, joille on mahdollista suorittaa operaatioita. Entiteetit ovat muuttuja, taulukko ja indeksi. Muuttuja sisältää yhden lukuarvon, taulukko useita, ja indeksi on lukuarvo joka viittaa taulukon indeksiin. Entiteettejä on mahdollista luoda, muokata, verrata, vaihtaa päittäin ja niille on mahdollista tehdä matemaattisia perusoperaatioita. Tavallisten ohjelmointikäskyjen lisäksi järjestelmässä on myös animaatioon liittyviä operaatioita, kuten arvojen korostaminen, niiden sijainnin siirtäminen visualisaatiossa, ja niin edelleen. 4
Kuva 3: Kuvakaappaus ALVIS Live!-järjestelmästä ALVIS Livea on käytetty yhdessä yhdysvaltalaisessa yliopistossa ja järjestelmän käytöstä on saatu vasta alustavia tuloksia. Vaikuttaa kuitenkin siltä, että järjestelmästä on apua ohjelmoinnin perusopetuksessa, ja opiskelijoiden suhtautuminen siihen on ollut positiivinen. Laajempia, perusteellisia käyttäjätutkimuksia ei kuitenkaan ole vielä julkaistu. 4 Järjestelmien vertailua Kaikki kolme työhön valittua järjestelmää ovat selkeästi suunnattu tietotekniikan perusopetukseen. Niissä on kuitenkin suuria eroja, alkaen jo siitä, että ALVIS Live! vie levytilaa hiukan yli 6 megatavua ja Alice reilusti yli sata megatavua. Myös järjestelmien fokusalueissa, lähestymistavoissa ja yleisessä filosofiassa on valtavia eroja. Siten tässä tehtävä vertailu ei voi kertoa onko jokin tietty järjestelmä parempi kuin toinen. 4.1 Alice Alicessa kaikki koodimanipulaatio tehdään graafisesti ja järjestelmä ei hyväksy operaatioita, jotka tuottavat syntaktisesti rikkinäistä koodia. Alicen syntaksi on kohtuullisen yksinkertainen ja vasta-alkajakin voi oppia ymmärtämään sitä hyvin nopeasti. Esimerkiksi toiminnot saa suoritettua rinnakkain käskyllä DoTogether, ehtolause on nimeltään If/Else, ja niin edelleen. Järjestelmä antaa välitöntä palautetta koodin syntaktisesta oikeellisuudesta koodin tuottamisen aikana. Koodin semanttinen oikeellisuus on tarkistettava ajamalla koodi. Koodia voi ajaa samassa ympäristössä missä sitä muokataan. Alice toimii vain Windows -ympäristössä, mutta on äärimmäisen helppo asentaa. Järjestelmä on välittömästi käyttövalmis, kun jakelupaketin (zip-paketti) on purkanut, eikä mitään erillisiä asennusohjelmia tarvitse ajaa. Järjestel- 5
män käyttöliittymä on monipuolinen ja samalla monimutkainen. Siinä on suuri määrä erilaisia toimintoja ja käyttötiloja, joten aloittelijan saattaa olla vaikeaa päästä ohjelmaan sisään ilman apua. Dokumentaatio koostuu lähinnä tutoriaaleista, jotka opettavat järjestelmän käyttöä kädestä pitäen. Muu dokumentaatio on hyvin vähäistä, eikä auta järjestelmän opettelussa. Opettajan läsnäolo olisi suotavaa, kun aloittelija rupeaa järjestelmää ensimmäisen kerran käyttämään. Alice on suunnattu selkeästi olioohjelmoinnin opiskeluun. Kaikki Alice-maailmassa olevat asiat ovat olioita, joita voi käsitellä, joiden metodeja voi kutsua, ja joille voi ohjelmoida lisätoiminnallisuutta. Maailmaan tuotuja olioita voi Alicessa manipuloida hyvin monipuolisesti. Järjestelmän ilmaisuvoima kuitenkin rajoittuu vain sen sisältämään 3-ulotteiseen maailmaan ja tähän maailmaan tehtyihin olioihin. Mihinkään maailman ulkopuoliseen järjestelmä ei voi vaikuttaa. Alicessa on vielä bugeja, joista osaa voi pitää hyvinkin vakavina. Järjestelmä esimerkiksi tukee taulukoita ja niiden käyttöä, mutta tuki ei toimi kunnolla. Taulukot toimivat hyvin niin kauan, kuin niistä luetaan arvoja, ja niihin tallennetaan suoria olioviittauksia tai arvoja. Muuttujan arvon tallentaminen taulukkoon aiheuttaa kuitenkin ajonaikaisen virheen, ja kaataa maailmasimulaation. Alicen hyödystä ohjelmoinnin perusopetuksessa on julkaistu useita tutkimuksia [2, 3, 6, 8]. Tyypillisesti tulokset tuntuvat olevan positiivisia. Useimmissa tutkimuksissa kuitenkin keskitytään antamaan riskiryhmässä oleville opiskelijoille ylimääräisiä ohjelmointiharjoituksia Alicen avulla, joten tutkimuksista ei voi selvittää johtuvatko paremmat tulokset Alicen käytöstä vaiko ylimääräisestä harjoittelusta. 4.2 RAPTOR Toistuvista yrityksistä huolimatta RAPTOR-järjestelmää ei saatu asennettua. Ilmeisestikin jakelupaketin mukaan liitetty Microsoftin.NET -sovelluskehys oli rikki, koska järjestelmän asennus keskeytyi aina.net:n asennukseen. Täten RAPTORin evaluaatio on tehty puhtaasti järjestelmästä julkaistun raportin perusteella. RAPTOR-koodia tuotetaan lisäämällä vuokaaviomaiseen visualisaatioon uusia käskyjä hiirellä ja antamalla näiden tarkat parametrit näppäimistön kautta. Järjestelmä tarkastaa jokaisen käskyn syntaktisen oikeellisuuden ja siten estää käyttäjää tekemästä syntaksivirheitä. Järjestelmän tekijöiden mukaan käytetty kieli muistuttaa käskyiltään jonkin verran C-kieltä ja Pascalia, ja useille käskyille on olemassa monia synonyymejä. Järjestelmää testaamatta on kuitenkin mahdotonta sanoa mitään siitä, kuinka yksinkertainen tai intuitiivinen käytetty kieli on. Syntaktinen oikeellisuus tarkastetaan koodin muokkaamisen aikana, ja semanttisen oikeellisuuden voi tarkastaa ajamalla koodi. Koodia voi ajaa muokkausympäristössä. Julkaisuista voidaan päätellä, että RAPTOR on ainakin tarkoitus olla yleiskäyttöinen ohjelmointikieli, joten sen ilmaisuvoima on luultavasti suuri. Saattaa olla, että RAPTORilla on mahdollista tuottaa RAPTOR-tulkki. RAPTORin käytöstä opetuksessa on julkaistu yksi tutkimus. Tutkimuksessa verrattiin kahden eri vuosikurssin tuloksia ensimmäisellä ohjelmointikurssilla: toisena vuonna käytettiin perinteisiä ohjelmointityökaluja ja toisena RAPTORia. RAPTORin avulla saatiin hiukan parempia tuloksia, mutta mitään tilastollisia laskelmia ei tuloksista tehty. Tulosten perusteella ei myöskään voi päätellä onko RAPTOR parempi kuin perinteiset menetelmät, vai johtuiko arvosanojen lievä nousu jostain muista syistä. 4.3 ALVIS Live! ALVIS Live! esittää kaikki ohjelmakoodin rivit, joissa on syntaksivirheitä, punaisella. Syntaksivirheitä sisältäviä rivejä ei huomioida algoritmia animoitaessa, joten huolimaton ohjelmoija voi järjestelmällä tehdä yksinkertaisiakin virheitä. Järjestelmä kuitenkin varoittaa näistä selkeästi. Järjestelmän käyttämä SALSA-kieli on hyvin yksinkertainen ja muistuttaa rakenteeltaan suuresti englantia. Kielessä on eri komentoja alle 20, joten koko kielen voi opetella hyvin helposti. Järjestelmässä on myös mahdollista 6
tehdä yksinkertaista ohjelmointia pelkän hiiren avulla, joten ALVIS Live! on mitä luultavimmin helppo noviisinkin oppia. Järjestelmä evaluoi koodia sitä mukaan kun sitä tuotetaan, ja pyrkii aina pitämään tuotettavan algoritmianimaation ohjelmakoodin kursorin osoittamalla rivillä, joten käyttäjä saa järjestelmältä jatkuvasti välitöntä palautetta. ALVIS Live! toimii vain Windows-ympäristössä ja on helppo asentaa. Jakelupakettiin kuuluu asennusohjelma, jonka käyttö on hyvin yksinkertaista. Asennusohjelma lisää järjestelmän kuvakkeen työpöydälle ja käynnistysvalikkoon. Käyttöliittymä on yksinkertainen, ja jokaisesta sen ominaisuudesta on hiiren vieressä leijuva infolaatikko. Dokumentaatio on riittävä, ja siihen kuuluu tutoriaali, joka opettaa järjestelmän perusteet. Käytetyn SALSA-kielen ilmaisuvoima on kuitenkin hyvin rajoittunut. Kieli ei sisällä ollenkaan funktiokutsuja, joten sillä ei voi tehdä kuin hyvin yksinkertaisia operaatioita. Myös käytetty visualisaatio on yksinkertainen, ja käytännössä järjestelmällä voi tehdä vain iteratiivisia taulukkoalgoritmeja. Taulukkoalgoritmien perusteiden opetukseen järjestelmä voi olla riittävä, mutta muuhun sitä ei kannata käyttää. Järjestelmä on vielä selvästikin keskeneräinen, ja siinä on useita virheitä. Esimerkiksi visualisaatioiden ominaisuuksien muuttamiseen tarkoitetun ikkunan sulkeminen cancel-käskyllä voi joskus kaataa koko järjestelmän. Pahimmassa tapauksessa järjestelmä kaatuu niin vakavasti, että se on poistettava koneelta ja asennettava uudestaan. ALVIS Liven käytöstä opetuksessa on julkaistu yksi alustavia tuloksia sisältävä paperi. Artikkelin mukaan järjestelmä on auttanut opettamaan ohjelmoinnin perusteita. Tulokset ovat kuitenkin vasta pienestä pilottiprojektista saatuja alustavia tuloksia, joten niistä ei voi sanoa mitään lopullista. 5 Lopuksi Tässä paperissa evaluoitiin kolme ohjelmoinnin perusopetukseen tarkoitettua järjestelmää: Alice, RAPTOR ja AL- VIS Live!. Näistä järjestelmistä Alice on laajasti käytetty, ja sen hyöty perusopetuksessa on ainakin jossain määrin onnistuttu todistamaan. Alice on kohtuullisen vakaa ja monipuolinen RAPTORia ei toistuvista yrityksista huolimatta saatu asennettua, joten sitä ei voitu testata. Dokumentaation perusteella RAPTOR kuitenkin saattaa vastata ilmaisuvoimaltaan perinteisiä ohjelmointikieliä, joten sillä saattaisi olla käyttöä ohjelmoinnin opetuksessa laajemminkin. ALVIS Live! vaikuttaa lupaavalta, mutta on ainakin toistaiseksi hyvin rajoittunut. Viitteet [1] M. C. Carlisle, T. A. Wilson, J. W. Humphries, and S. M. Hadfield. Raptor: a visual programming environment for teaching algorithmic problem solving. In SIGCSE 05: Proceedings of the 36th SIGCSE technical symposium on Computer science education, pages 176 180, New York, NY, USA, 2005. ACM Press. [2] M. Conway, S. Audia, T. Burnette, D. Cosgrove, and K. Christiansen. Alice: lessons learned from building a 3d system for novices. In CHI, pages 486 493, 2000. [3] S. Cooper, W. Dann, and R. Pausch. Teaching objects-first in introductory computer science. In SIGCSE 03: Proceedings of the 34th SIGCSE technical symposium on Computer science education, pages 191 195, New York, NY, USA, 2003. ACM Press. [4] C. Hundhausen and J. L. Brown. What you see is what you code: a radically dynamic algorithm visualization development model for novice learners. In 2005 IEEE Symposium on Visual Languages and Human-Centric Computing, pages 163 170, September 2005. [5] P. Ihantola, V. Karavirta, A. Korhonen, and J. Nikander. Taxonomy of effortless creation of algorithm visualizations. In ICER 05: Proceedings of the 2005 international workshop on Computing education research, pages 123 133, New York, NY, USA, 2005. ACM Press. [6] A. J. Ko. Preserving non-programmers motivation with error-prevention and debugging support tools. In HCC, pages 271 272, 2003. 7
[7] M. Morrison and T. S. Newman. A study of the impact of student background and preparedness on outcomes in cs i. In SIGCSE 01: Proceedings of the thirty-second SIGCSE technical symposium on Computer Science Education, pages 179 183, New York, NY, USA, 2001. ACM Press. [8] B. Moskal, D. Lurie, and S. Cooper. Evaluating the effectiveness of a new instructional approach. SIGCSE Bull., 36(1):75 79, 2004. [9] R. L. Shackelford and R. J. L. Jr. Introducing computer science fundamentals before programming. In Frontiers in Education Conference, 1997. 27th Annual Conference, volume 1, pages 285 289, November 1997. 8