Programmeerimise õppimise ja õpetamise mõningad aspektid
Saateks
Üldjoontes on programmeerimise õppimine ja õpetamine nagu ikka õppimine ja õpetamine. Siiski on mõned aspektid, mis just programmeerimise puhul võivad eriti esile tulla. Selles materjalis püüamegi nendele keskenduda. Toodud mõtisklused põhinevad Eno Tõnissoni kogemustel, lisatud on ka Merilin Säde, Heidi Meieri ja Tauno Paltsi täiendusi ja kommentaare.
Materjal on ehitatud üles teemade-ideede-probleemide kaupa. Loomulikult võib konkreetsele lugejale olla mõni neist huvitavam ja kasulikum kui teised. Soovitav oleks siiski kõik läbi vaadata ja mõelda, kuidas üks või teine idee teie enda õpetamisideedega haakub. Midagi ei peaks täpselt kopeerima — ikka tuleb arvestada konkreetseid õpilasi ja keskkonda! Osa teemasid ei ole aktuaalsed, kui õpetatakse vaid ühte õpilast, osade aktuaalsus võib olla seotud õppijate vanusega, osade kohta võib suhteliselt kergesti leida kinnitust teaduskirjanduses, osa vajab spetsiaalset uurimist, mida tasapisi teeme ka.
Alustame tõdemusest, et kõik inimesed on erinevad ja erinevused ilmnevad ka programmeerimise õppimisel (ja muidugi ka õpetamisel). Kui õpetaja on ise omal ajal mingil kombel programmeerimist õppinud, siis ei pruugi tema praegused õpilased üldse samal kombel suuta, tahta või osata õppida. Õpilastel võivad suuremad või väiksemad erinevused olla motivatsioonis, kiiruses, ajaressursis, koostöövõimes, loomingulisuses, lugemisoskuses, programmeerimise kogemuses, silmaringis (nt matemaatikas, kirjanduses ... elus üldse), programmeerimisülesande lahendamise stiilis jne.
Vaatlemegi nüüd neid teemasid-ideid-probleeme eraldi. Igaühe kohta püüame esile tuua, millega täpsemalt tegemist, milles seisnevad mured ja ohud ning millised on võimalikud lahendused. Mõnedeski kohtades on soovitused küll, nagu vanaema andis kapsaste istutamise juures — on liiga tihedalt või liiga harvalt, aga kui tihedalt siis peab olema ...
Mis õpilast motiveerib?
Nagu õppimise (või ka muude tegevuste) puhul ikka, on väga tähtis, miks inimene seda teeb. Mis teda motiveerib? Kui motivatsioon on kõrge, siis tavaliselt on ka õpetada lihtne. Paljud ju õpivad programmeerimist suisa iseseisvalt, üldse ilma õpetajata. Muidugi võib ülimotiveeritud õpilane lennata nii kiiresti ja kõrgelt, et õpetaja järgi ei jõua, aga see pole nii suur probleem, kui on motivatsioonipuudus või -langus.
Motivatsioon võib õppimise jooksul muutuda. Toome siin välja mõned asjaolud, mis aitavad motivatsiooni hoida ja kasvatada. Osadest neist tuleb hiljem natuke põhjalikumalt juttu. Õpilast motiveerib autonoomia - otsustamine enda õppimise üle, näiteks võimalus teha valikuid ülesannete osas. Samuti peaks toetama õppija refleksiooni — oma edu või ebaedu ja õppimise võimaliku muutmise väljatoomist.
Motivatsiooni aitab suurendada eduelamus. Kui ülesanded on sobivalt järjest kasvava raskusega, siis nende lahendamine toobki eduelamusi. Samuti kasvatab motivatsiooni, kui õpilane saab lahendada ülesandeid, mis talle temaatiliselt sobivad, näiteks ka endamõeldud ülesandeid. Motivatsiooni võib toetada või pärssida ka kursuse struktuuri ja hindamissüsteemiga. Kui need on õpilasele arusaamatud ja/või põhjendamata, siis motivatsioon ilmselt langeb. Motivatsiooni aitab hoida, kui õpilane saab aru, miks midagi ja just nii õpetatakse.
Mida õpilane kursuselt ootab? Aga kursus õpilaselt?
Õpilane tuleb õppima teatud ootustega. Ühelt poolt on oluline kursuse plaane õpilastele tutvustada, et nad saaksid oma ootusi nendega kokku viia. Teiselt poolt võib plaanide täpne tutvustamine vähendada paindlikkust, mis, eriti esmakordsel kursuse korraldamisel, võib vajalik olla. Näiteks võib tulla ette olukord, kus esialgu valitud tempo on paljudele õpilastele liiga kiire või liiga aeglane.
Nii või teisiti tuleb õpilasi valmistada ette selleks, et programmeerimise õppimine tähendab palju iseseisvat õppimist. Tuleb lugeda, katsetada ja palju ülesandeid lahendada. Paraku on üsna levinud pealiskaudne lugemine ning funktsionaalse, süveneva (võib-olla ka korduva) lugemise tähtsust tuleb eraldi rõhutada.
Tähtis on kokku leppida ühised reeglid. See võimaldab paremini luua toetava õhkkonna, mis on väga oluline. Õpilane peab julgema vigu teha ja ka vajadusel õpetajalt küsida.
Mida õpilane juba varem teab ja oskab?
Õpilane võib juba enne kursust üht-teist programmeerimisest teada. Kursuse algul tuleks püüda tase täpsemalt kindlaks teha. Õpilane ei pruugi ise taset adekvaatselt suuta hinnata. On ikka vahel juhtunud, et enda arvates päris ägedal programmeerijal on oskustes siiski päris olulisi lünki sisse jäänud. Kui mõistlik kordamine on igati asjakohane, siis juba ammu selgete asjade taas-ja-taaskordne lahendamine on tüütu ja motivatsiooni langetav. Ja igavusest tulevad rumalused. Lahenduseks võib olla lisaülesannete andmine, aga see on õpetajale lisatöö ja õpilasele ka. Miks ma pean neid keerulisemaid lahendama, kui teised lahendavad lihtsamaid? Õnneks küll on sageli õpilase enda huvi piisavalt suur, et keerulisemaid (ja neile siis ka arendavamaid) ülesandeid lahendada. Muidugi võib võimaluse korral edasijõudnud kursusest vabastada. Võib-olla on võimalik ka edasijõudnute rakendamine teiste õpetamisel?
Milliseid ülesandeid tahab õpilane lahendada? Aga milliseid peaks lahendama?
Programmeerimine (nagu näiteks ka matemaatika, füüsika, keemia) on selline distsipliin, kus suur osa oskustest kujuneb ülesannete lahendamisel. Võib öelda, et ülesannete lahendamine on programmeerimise õppimise alus. Ülesanded võivad olla n-ö tehnilise tekstiga. Näiteks tuleb koostada funktsioon, mis tagastab järjendi elementide harmoonilise keskmise. Üldiselt tundub, et õpilastele meeldivad rohkem (pseudo)elulise sisuga ülesanded. Võib pisut ülevõimendades öelda, et hea ülesande tekst toob silme ette nagu maali või pisikese filmilõigu. Vägagi soovitav on lasta õpilasel endal endale ja/või teistele ülesandeid välja mõelda. Sageli on need keerulisemadki, kui õpetaja oleks pakkunud. Ja rõõmu lahendamisest on rohkem. Mõnedel õpilastel on (loodetavasti ületatav) tõrge ülesande väljamõtlemise vastu. Mis mõttes ise mõelda? Andke mulle ülesanne!
Vana tuntud nipp, kuidas lapsele ööriideid protestivabamalt selga saada, on anda talle valik, mis värvi pidžaama panna. See vähendab protesti ööriiete panemise üldise nõude suhtes. Niisiis on kasulik vähemalt teatud ulatuses anda valida, kas see või too ülesanne teha. MOOCide näitel võib öelda, et paljud teevad mõlemad …
Sageli tahavad õpilased näiteks kontrolltööl lahendada neid ülesandeid, millesarnaseid nad on juba varem lahendanud. Eks see ole loomulik soov, aga kõrgemat taset näitab see, kui nad suudavad lahendada ülesandeid, mis küll põhinevad samadel oskustel, aga on piisavalt erinevad varem lahendatutest. Ega nende loomine lihtne ei pruugi olla.
Kas õpilane peaks ülesandeid lahendama üksinda?
Ühelt poolt on selge, et ikka igaüks peab ise programmeerimise selgeks saama ja saadud oskusi ka näiteks kontrolltööl iseseisvalt demonstreerima. See ei tähenda aga, et igal hetkel peab üksi õppima. Vastupidi - mitmekesi õppimine võib olla väga kasulik. On mitmeid viise, kuidas paaristööd (või ka natuke suurema rühma tööd) mõistlikult saab korraldada. Omaette variandiks (ja seda mitte ainult õppimisel, vaid ka tööstuses) on näiteks paarisprogrammeerimine. Paarisprogrammeerimises on kindlad rollid, mida aeg-ajalt vahetatakse. Kui pealiskaudselt kirjeldada, siis üks kirjutab programmi ja teine samal ajal vaatab kõrvalt ja toetab/soovitab/parandab.
Me oleme päris mitmes aines kasutanud paaristöölehti iseseisva kodutöö tunnis läbivaatamisel/arendamisel. Hästi korraldatud paaristöö vabastab õpetaja lihtsamate küsimustega tegelemisest, sest nendega saadakse kahepeale paremini toime.
Omaette küsimus on plagiaaditeema, mis paraku võib üsna valusalt päevakorda tulla.
Kui palju õpilasel aega kulub? Kuhu aeg kulub?
Eks inimestel kulubki erinevate asjade jaoks väga erinevalt aega. Programmeerimise puhul aga tundub vahel, et siin on käärid eriti suured. Kodus võib ülesannete lahendamiseks kuluda väga erinev aeg, aga eriti pingeline on olukord piiratud ajaga kontrolltööl. Ega siin väga head lahendust ei ole. Üldiselt muidugi, kui osata, siis läheb kiiremini...
Kuhu õpilasel lahendamisel aeg kulub, on kahtlemata äärmiselt oluline küsimus. Tegelikult on see meie uurimisrühma üks uurimissuundi ka. Logifailid on siin väga oluliseks allikaks.
Kokkuvõtteks
Selline oli siis meie esialgne loetelu erinevatest aspektidest. Vast tundus mõni neist ka teile tuttav või kasulik - ise kogetud või kõrvalt nähtud. Eks mõndagi saab ennetada, kui tähele panna ja püüda, mõned mured aga jäävadki selge lahenduseta. Ju tuleb leppida, et ei õpilased ega õpetajad ole päris ideaalsed.