Murelahendaja
Programmeerimisülesannete lahendamise toetamine
Üheks oluliseks osaks, millele programmeerimise õpetamine toetub, on ülesanded. Ülesannete lahendamisel võib ette tulla erinevaid probleeme, millele ise kohe vastust ei pruugi leida. Õppetöös võib probleeme tekkida nii programmi koostamisel ajal kui ka nõuetele vastavuse testimisel. Lisaks programmeerimisalastele probleemidele tuleb õppetöös sageli leida lahendusi ka teistele kursuse jooksul tekkivatele küsimustele (nt keskkondadesse registreerumise, programmide paigaldamise ja arvestuse saamise küsimustele).
Programmi koostamise ajal tekkivad probleemid
Probleemide tekkimisel programmi koostamisel on õpilasel võimalus lugeda õppematerjali uuesti, guugeldada, küsida abi õpetajalt või e-kursuste puhul kirjutada foorumitesse või abiliinile. Õpetajal ei pruugi klassiruumis olla võimalik kohe aidata, mis tähendab, et õpilane jääb sellisel hetkel suhteliselt üksi oma ülesandega. See võib ühtpidi olla hea, et õpilane ka ise prooviks oma probleemidele lahenduse leida. Üldiselt programmeerimisel tekkivate vigade guugeldamisoskus areneb koos programmeerimisoskusega. Samas kui pikka aega ühele probleemile lahendust ei leia, siis teatud olukordades tekitab see frustratsiooni. Võimalust foorumites küsida võivad õpilased sageli peljata, sest kardavad ennast n-ö rumalaks teha.
Valmis programmi testimisel tekkivad probleemid
Valmis programmide vastavust nõuetele on võimalik kontrollida õpetajal, kuid see võib osutuda suhteliselt aeganõudvaks. Hea tava on anda õpilasele ette testjuhud, et ta ise saaks valmis programmi testida. Samuti tulevad siinkohal appi automaatkontrollid, mis üldiselt oma sisult koosnevadki erinevatest ühiktestidest (ingl unit test), mille abil saab programmi erinevaid aspekte kontrollida ja tagasisidestada:
- käitumist – nt kas programmile antavate sisendite puhul saadakse oodatud vastused;
- struktuuri – nt kas programmis kasutatakse ettenähtud funktsioone.
Selliste automaatkontrollide puuduseks on jällegi see, et jagatav tagasiside ei pruugi algajatele programmeerijatele alati arusaadav olla. Seega automaatkontrollid võivad omakorda probleeme juurde tuua, sest programm võib põhimõtteliselt arvutis töötada, kuid automaatkontroll seda õigeks ei loe.
Abivideod ja murelahendajad
Lisaks eelmainitud võimalustele saab programmeerimisülesandeid toetada erinevate vahenditega, et ennetada vigade tekkimist. Nimetame siinkohal neist kahte:
Abivideod
Korduvate küsimuste puhul saab luua abivideo, millele saab jooksvalt soovitud kohtades viidata. Abivideod on suunatud inimestele, kellele jäi põhivideotes teema kohta esitatud selgitustest väheseks. Abivideotes saab läbitud teema lahti seletada detailsemalt ning illustreerida uute näidetega. Põhimaterjale toetavaid abivideoid kasutatakse ka Tartu Ülikooli arvutiteaduse instituudi korraldatud programmeerimise MOOCides. Näiteks siin videos seletatakse eraldi lahti teisendamise funktsiooni loomine:
Abivideote plussiks on vigade ennetamine ja seega inim-, aja- kui ka raharessursi kokkuhoid. Puuduseks on aga personaliseeritud tagasiside puudumine.
Murelahendajad (ingl troubleshooters).
Ülesannete lahendamisel tekkivad korduvad küsimused on võimalik kokku koguda ja teha korduma kippuvate küsimuste (KKK) veebilehekülg. Teine võimalus korduma kippuvatele küsimustele vastata on luua struktureeritud murelahendaja, millega saab küsimustele vastata ükshaaval. Joonisel 1 on näha näiteks esimene korduma kippuv küsimus murelahendajas.
Joonis 1. Murelahendaja küsimuse näide
Murelahendaja keskkonnas uute murelahendajate loomiseks tuleb registreeruda kasutajaks ning logida sisse leheküljel https://progtugi.cs.ut.ee/#/admin. Näidet, kuidas valmis tehtud murelahendaja välja näeb, saab vaadata siit: https://progtugi.cs.ut.ee/#/ts/56f6530aa2b8b3bf6e8b9844/.
Kindlasti ei piirdu programmeerimisülesannete lahendamise toetamine ainult mainitud võimalustega. Lisaks saavad õpilased üksteist toetada ka näiteks paaristöös, erinevates keskkondades nagu Thonny silumise (ingl debugging) võimalust kasutades jne.
PS! Oluline on meeles pidada, et õpilasele ei tohi tema abistamisel ülesande vastust ette öelda, vaid lahenduseni peaks jõudma ikkagi läbi vihjete ja näidete!
Programmeerimisel tekkivate probleemide kategoriseerimine
Murelahendaja koostamisel on esimese sammuna vaja teada, millised mured üldiselt õpilastel vastava ülesande lahendamisel tekivad. Probleeme saab üldiselt kaardistada kogemuse teel- kirjutada üles, milliste probleemidega õpilased juhendaja poole pöörduvad ning hiljem püüda need probleemid kategoriseerida. Sandy Garneri jt väidavad, et probleemide liigitamisel loodavate kategooriate loomisel tuleb valida täpsuse ning praktilisuse vahel:
- Kui moodustada probleemidest palju erinevaid kategooriaid, mille kirjeldused on väga konkreetsed, siis saab tekkinud probleemidest põhjaliku ülevaate, kuid kategooriate rohkuse tõttu on neid raske järgida ja murelahendajasse lisada.
- Kui moodustada jällegi vähem kategooriaid, mille kirjeldused on üldisemad, siis on probleeme lihtsam kategooriatesse liigitada ja murelahendajasse lisada, kuid ülevaade probleemidest pole nii detailne.
Programmeerimise ülesannete lahendamisel tekkivaid probleeme kategoriseeris murelahendaja jaoks oma bakalaureusetöös Tartu Ülikooli üliõpilane Kaspar Hollo. Tema leidis korduma kippuvad küsimused programmeerimisalase MOOCi abiliinile tulevatest kirjadest. Tuleb välja, et üldiselt on nii klassiruumis kui ka e-kursusel ülesannete lahendamisel tekkivad küsimused üsna sarnased. Kuna programmeerimisel tekkivate probleemide kategoriseerimine on üsna spetsiifiline teema, siis siinkohal seda täpsemalt lahkama ei hakka. Huvi korral saab lugeda lisaks eelmainitud artiklist ja bakalaureusetööst. Samuti leiab hulganisti lisainfot internetist ja muust teaduskirjandusest.
Murelahendaja loomine
Murelahendaja on keskkond, mille abil luuakse programmeerimisülesannete lahendamist toetavaid murelahendajaid ning kogutakse statistikat nende kasutamise kohta. Murelahendaja keskkonda hakati arendama 2015. aastal Vello Vaherpuu poolt (2016) ning on nüüd aktiivselt kasutuses. Järgnevalt on näide murelahendaja koostamisest. Vaatame seda 2016. aastal kasutuses oleva muutujate teemalise murelahendaja näitel: https://progtugi.cs.ut.ee/#/ts/56f6530aa2b8b3bf6e8b9844/
Probleemid ülesande lahendamisel
Esimese asjana murelahendaja koostamisel peaks kokku koguma probleemid, mis tekivad vastava ülesande lahendamisel. Üldiselt need on suhteliselt sarnased teemade kaupa, kuid ka üsna spetsiifilised vastavalt ülesandele. Sageli ka keerulisemate ülesannete juures kipuvad korduma sarnased probleemid nagu lihtsamates ülesannetes. Üheks selliseks probleemide kategooriaks on näiteks muutuja väärtusega seonduvad probleemid. Seega vaatame näitena ülesannet 2016. aasta linnu kohta (vt joonis 2).
Joonis 2. Ülesande kirjeldus murelahendaja esimesel leheküljel
Selle ülesande lahendamisel oleme kaardistanud 5 tihti tekkivat probleemi. Selleks, et kasutaja saaks otsustada, milline neist probleemidest tal tekkinud on, oleme murelahendajasse lisanud 5 järjestikust küsimust ja 1 sarnase ülesande näite:
- Kas loodud muutujate nimed ühtivad täpselt ülesande tekstis nõutud nimedega (aasta, lind, lause_keskosa, lause) ja väärtused on õiget tüüpi?
- Kas kõik muutujad on loodud otse programmis (ei ole kasutatud funktsiooni input)?
- Kas muutuja lause_keskosa väärtus on täpselt ". aasta lind on "? NB! Veendu, et sõne alguses oleks punkt ja lõpus tühik?
- Kas muutujas nimega lause on kõik "liidetavad" osad tekstilist tüüpi?
- Kas eelnevalt loodud õige nimega muutujat kasutatakse ka väljastamisel (väljastamisel tuleb kasutada muutujat nimega lause)?
- Kas vajaksite abi sarnase ülesande lahendamisel? (vt joonis 3)
Joonis 3. Ülesanne
Murelahendaja loomine
Nüüd kui oleme mõelnud välja küsimused, mille abil saame kasutajat aidata, oleks aeg hakata koostama murelahendajat. Proovime esimese küsimuse koos lahendusega lisada murelahendajasse.
1. Esimese asjana tuleb minna leheküljele https://progtugi.cs.ut.ee/#/admin ja registreeruda kasutajaks. Kui kasutaja on loodud, siis tuleks keskkonda logida ja peaks avanema murelahendajate loomise keskkond (vt joonis 4)
Joonis 4. Murelahendaja loomise keskkond
2. Teise asjana tuleks klõpsata “Lisa murelahendaja” ning täita murelahendaja info lehekülg.
3. Kui see on täidetud, siis peaks tekkima esilehele vastava nimega murelahendaja ning sellele klõpsates saab hakata sinna lisama küsimusi. Esimese küsimuse lisamiseks tuleks klõpsata “Lisa esimene samm”. Peaks tekkima joonisel 5 nähtav samm.
Joonis 5. Esimene samm
4. Esimene samm on murelahendajas esilehekülg. Lisame sinna ülesande teksti, mille kohta murelahendaja on (vt joonis 6) ja klõpsame “Salvesta”
Joonis 6. Murelahendaja esilehe koostamine
5. Kui ülesande tekst on valmis, siis tuleb klõpsata pluss märgil ning luua järgmine samm, milleks on esimene küsimus (vt joonis 7) ja klõpsame Salvesta.
Joonis 7. Murelahendaja esimese küsimuse lisamine
6. Nüüd tuleks sellele küsimusele vastus lisada. Klõpsame küsimuse juures o levale pluss-märgile ja lisame vastuse (vt joonis 8). Klõpsame Salvesta.
Joonis 8. Murelahendaja esimesele küsimusele vastuse lisamine
7. Nupult “Eelvaade” saame vaadata, milline murelahendaja praegu välja näeb.
8. Külla aga kui kasutaja ei vaja selle osa juures vihjet, siis võiks olla võimalus sellest lahendusest mööda minna teise küsimuse juurde. Selleks tuleb “1 Muutujad. Kontrollülesanne. …” juures klõpsata uuesti pluss märki ja lisada ka teine küsimus (vt joonis 9) ning salvestada.
Joonis 9. Murelahendaja teise küsimuse lisamine
Nüüd tuleb eelnevat tegevust korrata iga küsimuse kohta.
Valminud murelahendaja peaks välja nägema selline: https://progtugi.cs.ut.ee/#/ts/56f6530aa2b8b3bf6e8b9844/56f6530aa2b8b3bf6e8b9845
Veel murelahendajatest
Mittelineaarsed murelahendajad
Tegelikult ei pea murelahendaja küsimused olema lineaarsed ehk üksteisele järgnevad ja samuti ei pruugi need üldsegi olla seotud programmeerimisega. Joonisel 10 on võimalik skeem televiisoripuldi murelahendajast.
Joonis 10. Mittelineaarse murelahendaja näide
Soovitused murelahendaja koostamiseks Seega võtame kokku soovitused murelahendaja koostamiseks:
- Enne murelahendaja koostamist tuleks lahendada ülesanne, tuginedes õppematerjalidele.
- Jaotada koostatud lahenduse programm mõtteliselt väiksemateks hallatavateks osadeks.
- Esitada tekkivate probleemide kohta küsimused järk-järgult, sest nii on neid koostajatel mugavam hallata ning tekst on lugejatele paremini hoomatav.
- Iga probleemi kohta koostada vähemalt üks küsimus ja selle küsimuse juurde käiv vastus, kasutades Murelahendaja keskkonda. Küsimused ja vastused lähtuvad järgmistest põhimõtetest:
- Küsimuste ning vastuste loomisel tuleb toetuda analüüsi käigus selgunud korduvalt esinenud vigadele.
- Funktsiooni, meetodi või mõne muu programmeerimise konstruktsiooni kohta käiva vihje puhul tuleks lisaks tekstilisele seletusele ka koodi kujul olev näide vastuse leheküljele lisada.
- Nummerdada küsimused ja vastused, et neid oleks tihedas Murelahendaja keskkonnas lihtsam eristada ning vajadusel ka ümber tõsta.
- Kopeerida eelvaatest Murelahendaja keskkonna loodud link kursuse materjalide (näiteks kohustuslike kontrollülesannete) juurde.
- Parandada/muuta murelahendajat tuginedes kursusel tekkivatele küsimustele.
Murelahendaja statistika
Selleks, et näha murelahendaja kasutamise kohta statistikat, tuleb klõpsata murelahendaja tabelis olevale lingile “Statistika”, mille peale avaneb statistika vaade, kus kogu murelahendaja kasutatavus on esitatud puuna (vt. Joonis 11).
Joonis 11. Murelahendaja statistika
Graafil olevad sinised ringid tähendavad, et sammul puudub “Leidsin lahenduse” valik ning kuvatakse ainult vaatamiste arv. Rohelised ringid tähendavad, et sammul on “Leidsin lahenduse” valik olemas ja lisaks vaatamistele kuvatakse ka arv, kui palju inimesi on sellel sammul oma probleemile lahenduse leidnud (vt. Joonis 11). Kui on soov mingi osa puust ära peita, siis tuleb klõpsata vastava sammu ringil, mille tulemusena peidetakse alamsammud ja ringi sisu värv muutub siniseks.