Kuvatud on postitused sildiga algoritmiline mõtlemine. Kuva kõik postitused
Kuvatud on postitused sildiga algoritmiline mõtlemine. Kuva kõik postitused

4. juuli 2019

Arvutivaba programmeerimine: keeruliste probleemide lahendamine

Suvi 2019 väljakutse on tutvustada arvutivaba programmeerimise tegevusi. Nende olulisusest programmeerimise õppimisel olen lähemalt kirjutanud programmeerimise baasoskuste õpetamise postitustes siin ja siin.

Selles postituses tutvustan arvutivaba tegevust, mis on üsna pingeline ja paneb õppijad kohati raskesse olukorda, mistõttu on äärmiselt oluline, et tegevuse läbiviija oleks toetav ja julgustav.


arvutivaba_arvutita_programmeerimine_algoritmiline_mõtlemine_Kristi_Proge_Blog
Progammeerimisel peab vahepeal lahendama keerulisi probleeme. Foto: Pixabay


Tegevuse eesmärk

... on demonsteerida, kuidas lahendada keerulisi probleeme kasutades algoritmilise mõtlemise nelja komponenti: probleemi väiksemateks osadeks võtmine, mustrite tuvastamine, üldistamine ja algoritmi väljatöötamine. 


Tegevuse kirjeldus

Selle arvutivaba programmeerimise tegevuse paremini õnnestumiseks on vaja suuremat hulka osalejaid, kuid põhimõtteliselt saab seda tegevust läbi viia ka ainult kahe osalejaga.
  • Ütle osalejatele, et nende ülesanne on liita kokku kõik arvud ühest kahesajani (1-200).
  • Teavita neid, et seda tuleb teha peas.
  • Aega on 30 sekundit.
    • Osalejad võivad olla ehmunud, mis on antud tegevuse puhul tahtlik. Et neid rahustada, anna oma kehakeele ja hääletooniga mõista, et sa palud neil midagi hullumeelset teha.
  • Pane stopper tööle ja ütle "Läks!"
  • Jälgi samal ajal osalejad: Kes on lihtsalt kohmetunud? Kes üritab arve kokku liita? jms
  • Kui aeg läbi, uuri, kas kellelgi õnnestus arvud kokku liita?
  • Uuri, kas oli keegi, kelle jaoks ülesanne oli nii keeruline, et ta isegi ei proovinud?
  • Uuri, kas keegi proovis küll, aga ei jõudnud lõpuni? Küsi, kuidas nad proovisid seda teha?
  • Juhenda õpilasi probleemi väiksemateks osadeks võtma. Seda tehes on ülesannet ehk probleemi lihtsam lahendada:
    • Alustame mõlemast otsast. Palju on 200 + 1?
    • Palju on 199 + 2?
    • Palju on 198 + 3?
    • Kas näete mustrit?
    • Palju selliseid paare kokku tuleb?
      • Milline on viimane paar? (V: 100 + 101)
      • See teeb kokku 100 paari
      • Kui meil on sada paari arvu 201, siis kuidas leiame nende summa?
      • Palju on 100 * 201?
    • Kas saame sama lahendust kasutada ka teiste arvude jaoks?
    • Kas saame seda kasutada 2 000 jaoks?
    • Aga 20 000?
    • Mis on lahenduses sama ja mis on erinev?
    • Kasutades üldistamist, saame lahenduse ehk algoritmi, mida saab rakendada kõigi arvude jaoks.
  • Töötage koos lahenduse kallal. Lahendus on: (arv/2)*(arv+1) = vastus
  • Katsetage mõnede arvudega (2, 3, 4 & 5) kontrollimaks algoritmi korrektsust.

Räägi osalejatele, et kasutasite probleemi lahendamiseks algoritmilist mõtlemist. Kõigepealt võtsite suure probleemi väiksemateks osadeks. Seejärel tuvastasite sarnasused probleemi väiksemate osade vahel ehk leidsite korduva mustri. Siis jõudsite järeldusele, et sama lahendust saab kasutada ka teiste arvude jaoks ehk toimus üldistamine. Lõpuks töötasite välja algoritmi, mis sobib kõigi sarnaste probleemide lahendamiseks. 

Selline probleemilahendamise oskus on vajalik programmide koostamisel, kuid samuti igapäevaelu probleemide lahendamisel.

Järeltegevused

Arutage koos:
  • Mida peaksid tegema, kui sul palutakse teha midagi, mida sa ei oska?
  • Mida peaksid proovima teha, kui probleem on liiga keeruline?
  • Mida sa sellest järeldad, kui erinevatel ülesannetel on lahendustes sarnasused?
  • Kui sul on probleem, mis erineb probleemist, mille oled juba lahendanud, siis mida sa teed?
Arvutivaba tegevuse idee on pärit lehelt code.org.

Lõppsõna

Kui oled programmeerimist õpetanud või ise õppinud, siis tead, et kirjeldatud arvutivaba tegevuse alguses kunstlikult tekitatud pingeline olukord ei ole programmeerimise juures üldse erakordne. Sellist ahastuse tunnet kogevad õpilased aeg-ajalt ikka, on selle põhjuseks siis ülesande keeruline sõnastus, suutmatus kohe lahendust välja mõelda või oskamatus programmis viga üles leida, et see tööle saada.

Olen selliste tunnete tunnistajaks olnud nii õppijana kui ka õpetajana. Seetõttu näen käesoleva arvutivaba programmeerimise tegevuse väärtusena ka seda, et selle kaudu saab õpetada õpilastele raskes olukorras rahulikuks jäämist.


Creative Commons litsents -Autorile viitamine, mitteäriline eesmärk, jagamine samadel tingimustel

Jälgi KristiProget ka Facebookis.

18. aprill 2018

Algoritmiline mõtlemine - ülesandeid 10+ vanusele

Paar nädalat tagasi kirjutasin siin, kuidas algoritmilise mõtlemise oskust kuni 10-aasta vanustes lastes kujundada. Veel varasemas postituses kirjutasin lahti, mis algoritmiline mõtlemine täpsemalt on. Tänases postituses annan ülevaate materjalidest, mille abil saab arendada teismeliste ja vanemate isikute algoritmilist mõtlemist. Rõhk on tegevustel ja ülesannetel, mille läbiviimiseks või lahendamiseks ei lähe vaja arvutit.

Õpilasvõistlus Kobras

Kooli matemaatika ja informaatikaõpetajad on kindlasti tuttavad võistlusega Kobras. Kobras on Leedust alguse saanud ja nüüdseks üle maailma levinud võistlus kooliõpilastele, mille eesmärk on populariseerida arvutiteadust (informaatikat) ja arendada õpilaste algoritmilist mõtlemist. Õpilased võistlevad kolmes vanuserühmas: benjamid (6.-8. klass), juuniorid (9.-10. klass) ja seeniorid (11.-12. klass). Kuigi ülesannete lahendamine toimub arvutis, siis peale eelvooru ja lõppvooru toimumist tehakse ülesanded pdf-formaadis avalikuks ja kõik soovijad saavad neid lahendada. See viimane ongi suurepärane info neile, kes soovivad enda või noorte algoritmilist mõtlemist arendada.

Algoritmiline_mõtlemine_Kristi_Proge_Blog
Ülesanne õpilasvõistluselt Kobras.
Kobrase koduleht.
Ülesanded ja võistluste tulemused (eesti keeles).

Ajakiri Imeline Teadus

Igas ajakirja Imeline Teadus numbris ilmuvad lugejatele lahendamiseks ülesanded, millest mitmed arendavad ka algoritmilist mõtlemist. Mina ei jäta seda lehekülge kunagi vahele.

Raamatud

Mina ise kasvasin üles Nupula raamatutega. Ka praegu leiab raamatupoodidest ülesannete kogumikke, mis arendavad algoritmilist mõtlemist. Raamatue pealkirjast leiab enamasti sõna 'loogika'. Näiteks kirjastuselt "Tänapäev" leidsin raamatu Suur loogikamõistatuste piibel.

Veeb

Avastasin (mitteaktiivse) matemaatikaülesannete blogi, kus leidub ka mitmeid algoritmilist mõtlemist arendavaid nuputamisülesandeid.
loogika_algoritmiline_mõtlemine_Kristi_Proge_Blog
Ülesanne matemaatikaülesannete blogist.

Mängud

Algoritmilist mõtlemist arendavad ka laua-, kaardi-, programmeerimis- ja mitmed arvutimängud, samuti jaapanist pärit Sudoku ja Kakuro. Viimaseid saab lahendada nii paberil (Sudoku mänguväljasid leiab näiteks ajalehtedest ja ajakirjadest) kui ka mängida veebis või nutiseadmes. Sudokut näiteks siin ja Kakurot siin.

algoritmiline_mõtlemine_mäng_kakuro_Kristi_Proge_Blog
Kakuro. Kuvatõmmis

3. aprill 2018

Algoritm. Laste algoritmilise mõtlemise arendamine

Minu blogipostitus algoritmilisest mõtlemisest, kus kirjutan, mis see on ja millistest komponentidest koosneb, on üks populaarsemaid sissekandeid minu blogis.

Tänases postituses lähenen teemale vähem teoreetiliselt ja toon näiteid igapäevaelust, kus me algoritme kasutame, sest postitus on mõeldud lastevanematele ja õpetajatele, kelle kasvatada ja harida on noorem vanuserühm ehk kuni 10-aastased lapsed või õpilased.

Kui aus olla, siis laste algoritmilise mõtlemise arendamise olulisusest leiab palju artikleid ja blogipostitusi, aga palju vähem (tegelikult väga vähe) kirjutatakse, milliste tegevuste kaudu seda oskust kujundada. Seega ongi postituse teises osas välja toodud (peamiselt ekraanivabad) tegevused, mis aitavad laste algoritmilist mõtlemist arendada.

algoritm_algoritmiline_mõtlemine_Kristi_Proge_Blog
Foto: Peter Vongsayarath


Algoritm - definitsioon ja näiteid igapäevaelust


Algoritm ühe lausega
Algoritm on samm-sammuline õpetus, kuidas mingit ülesannet sooritada või probleemi lahendada. 

Algoritmist natuke pikemalt
Algoritmi koostamine eeldab suurema probleemi väiksemateks osadeks võtmist. 
Algoritm ehk samm-sammuline õpetus peab olema täpne ja selgesõnaline. Arvutiteaduses, sh koodi kirjutamisel, on selged ja täpsed juhised väga olulised, sest arvuti ise ei mõtle.
Algoritmi puhul on tähtis tegevuste õige järjekord. 
Algoritm peab olema korduvalt kasutatav, sest me ei soovi ju iga kord sama probleemi uuesti lahendama hakata. 
Algoritmi väljundit ehk tulemust peab olema võimalik ette ennustada.

Kuigi sõna algoritm võib tunduda liiga keeruline, et seda teemat lastega arutada, siis tegelikult kasutavad lapsed, nagu ka nende vanemad, algoritme pidevalt oma igapäevaelus.

Algoritmide näiteid igapäevaelust:
  • hommikused tegevused kodus enne lasteaeda või kooli minemist;
  • hommikupudru valmistamine;
  • riietumine (nt enne püksid ja siis saapad, mitte vastupidi);
  • liitmis-, lahutamis-, jagamis- ja korrutamistehted paberil;
  • sõnade reastamine tähestikulisse järjekorda;
  • õigekirjareeglid;
  • tulede vahetumine valgusfooris;
  • paberist voltimise (origami) õpetus;
  • lauamängu mängimise juhend.
algoritm_algoritmiline_mõtlemine_lapsed_Kristi_Proge_Blog
Foto: COD Newsroom (Flickr)


Laste algoritmilist mõtlemist arendavad tegevused


Arvutiteaduses on algoritmilise mõtlemise oskus eelduseks, et inimene (programmeerija) suudaks arvuti panna tegema seda, mida tema tahab. Samas ei pea selle oskuse kujundamiseks kasutama arvutit või hakkama programmeerimist õppima. Siin on mõned tegevused, mis arendavad laste algoritmilist mõtlemist.
  1. Pillimängu õppimine. Tegevuste järjekord ja korduste kasutamine on oskused, mida on vaja pillimängus ja need on omakorda tihedalt seotud algoritmilise mõtlemisega.
  2. Tantsude õppimine. Tantsu õppides on oluline tantsusammude järjekord ja sammude kombinatsiooni kordamine.
  3. Mustkunstniku trikkide õppimine. Triki õnnestumiseks peab tegevuste sooritamise järjekord olema õige. Trikkide õppimiseks leiab videosid YouTube'ist ja mänguasjapoodidest saab osta mustkunstiku komplekti, mis sisaldab trikkide tegemiseks vajalikke vahendeid.
  4. Male ja teised lauamängud. Lauamängude mängimisel peab kinni pidama mängureeglitest ja oluline on oskus oma tegevusi ette planeerida. Viimane sisaldab ka tingimuslause kasutamist, mis on natuke keerulisemate algoritmide osa.
  5. Kaardimängud. Kaardimängudes peab järgima mängureegleid ja samuti on suurem tõenäosus võita, kui oma tegevused pikemalt ette planeerida. 
  6. Söögivalmistamine. Tegevuste õige järjekord on söögivalmistamisel üldiselt väga oluline. Väiksemad lapsed ei pea ise veel kõike otsast lõpuni valmis tegema, alguses võivad nad olla vanemale abiks. Vanem võiks tehtavaid samme lapsele selgitada.
  7. Mänguklotsidest ehitamine. Mänguklotsidega tulevad kaasa samm-sammulised õpetused ja üsna ruttu saab selgeks, et kui olla nende järgimisel hooletu, siis soovitud ese (auto, maja vms) ei valmi.
  8. Käsitöökomplektid. Mänguasjapoodides on müügil nii kleepimise, õmblemise, ehete meisterdamise jms komplekte. Taas kord õpib laps nende kaudu tegevuste õiges järjekorras tegemise olulisust.
  9. Origami ehk paberist voltimine. Origami puhul on juhendi järgi tegutsemine ainuke viis soovitud tulemuse saavutamiseks. Raamatupoodides leiab isegi selliseid origami raamatuid, kus on olemas vajalikud töövahendid. YouTube'is on palju kanaleid, mis sisaldavad paberist voltimise videoõpetusi lastele. Suur pluss on see, et võõrkeel ei ole õpetuse järgimisel takistuseks.
  10. Arvutimängude mängimine. On vähe arvutimänge, mis algoritmilist mõtlemist ei arenda, sest mängimisel on oluline tegevuste järjekord või loogika või peab mängija midagi looma (nt linnu ehitama). Üks hea näide sellisest mängust on Minecraft, millel on olemas ka nutiseadme versioon. Muidugi peab lapse arvutis veedetud aeg olema piiratud (soovitavalt nooremad lapsed kuni 1 h ja natuke vanemad lapsed kuni 2 h päevas), et tegevus lapse tervist ei rikuks.
  11. Programmeerimismängud lastele. Programmeerimismängudest on siin blogis päris palju juttu olnud. Need arendavadki eelkõige lapse algoritmilist mõtlemist (tegevuste järjestamine, kordused, tõhusaim lahendus jne), mitte ei õpeta last koodi kirjutama.
  12. Nuputamisülesanded. Suurepäraselt sobivad algoritmilise mõtlemise arendamiseks nuputamisülesanded. Üheks näiteks on kujundite või numbrite rida ja laps peab ära arvama rea lõpust puuduva elemendi. Ülesande lahendamiseks peab laps tuvastama reegli. Selliseid nuputamisülesandeid leiab igale vanuserühmale alates kooliealistest kuni täiskasvanuteni välja.
  13. algoritm_mustri_tuvastamine_Kristi_Proge_Blog
    Nuputamisülesanne eelkooliealistele.
    Allikas: educationalcoloringpages.com
Ma arvan, et paljud lugejad kogesid seda postitust lugedes äratundmisrõõmu, sest mitmed nendest tegevustest kuuluvad juba laste igapäevategevuste hulka. Nüüd on lisandunud teadmine, et need arendavad ka järeltulijate algoritmilist mõtlemist.

Kasutatud materjalid
Solving problems with algorithms: Resources for younger children and their parents

18. september 2017

Raamat "Nupula" õpetas mind mõtlema

Paar päeva tagasi mõtlesin oma kooliajale ning meenusid matemaatikatunnid ja matemaatikaõpetaja. Ma arvan, et ma ei liialda, kui väidan, et minu matemaatikaõpetaja oli/on üks vähestest õpetajatest, kes tegeles nutikamate õpilastega. Nimelt lasi ta taibukamatel põhikooliõpilastel lahendada nuputamise ülesandeid ja andis iga lahenduse eest punkte, mis ta kokku liitis ja tabelisse kandis. Niimoodi tekkis meil, õpilastel, omavahel väike võistlusmoment. Minulgi oli au seda tabelit vahel juhtida. Tänu nuputamise ülesannetele arendasime oma matemaatilisi võimeid ja kasvas huvi matemaatika vastu. Matemaatikaõpetaja, kellest jutt on, on "Nupula" raamatute autor Aavo Lind.

Aavo-Lind-Nupula-raamat-Kristi Proge blog
Raamatu tutvustus
Humoorikalt illustreeritud raamat sisaldab huvitavaid ülesandeid matemaatikast ja füüsikast. Raskusastme järgi on nad jaotatud kolme ossa. Iga osa lõpus on näpunäited ja vastused, mis on abiks raskemate ülesannete lahendamisel.
"Nupula" on mõeldud eelkõige IV-VI klassi õpilastele, kuid pakub nuputamisrõõmu ka vanematele.


"Nupula" (Valgus 1988) ja "Nupula jälgedes" (Valgus 1988) raamatud olid mul kodus olemas ning tegelesin nende ülesannete lahendamisega ka vabal ajal. Need raamatud õpetasid mind loogiliselt mõtlema ja probleeme lahendama - oskused, mis tulevad kasuks nii elus kui ka programmeerimisel.

Vaevalt need raamatud mul olemas oleks olnud, kui mu isa selliste asjade vastu huvi poleks tundnud. Temalt sain ka abi, kui mõni nuputamisülesanne selgitust vajas ja vahel mõne vihje, kuidas lahenduseni jõuda. Samas ei teinud ta kunagi minu eest neid ülesandeid ära, pidin ikka alati ise lahenduse välja mõtlema - lähenemine, mida ma ka oma õpilaste puhul kasutan.

Uustrükke "Nupulast" pole tehtud ja raamatupoodidest seda osta ei saa. Siiski järelturult võib seda täitsa leida. Näiteks Raamatukoi veebipoes on "Nupula jälgedes" hetkel täitsa olemas.

Jälgi KristiProget Facebookis.

21. veebruar 2017

Algoritmiline mõtlemine - mis see on?

Olen korduvalt püüdnud veebiavarustest leida eestikeelset definitsiooni sõnapaarile algoritmiline mõtlemine, aga tulemusteta. Selles postituses kirjutangi ingliskeelsete allikate baasil, mis on algoritmiline mõtlemine, millistest komponentidest see koosneb ning samuti algoritmilise mõtlemise rakendamisest programmeerimises, koolis ja igapäevaelus.

Algoritmiline mõtlemine (ingl k computational thinking) ehk "arvuti moodi" mõtlemine sisaldab probleemi püstitamist, sellele lahendus(t)e väljatöötamist ja lahenduse sõnastamist masinale (nt arvuti) või inimesele arusaadaval viisil.

Algoritmilise mõtlemise neli nurgakivi

Algoritmilise mõtlemise neli põhikomponenti (nurgakivi) on
algoritmiline_mõtlemine_Kristi_Proge_Blog
Joonis 1. Allikas: BBC
  • osadeks võtmine (decomposition) - keerulise probleemi või süsteemi väiksemateks osadeks jagamine;
  • mustrite tuvastamine (pattern recognition) - nii sarnasuste leidmine probleemi väiksemate osade vahel kui ka analüüsimine, kuidas sarnaseid probleeme on varem lahendatud;
  • üldistamine (abstraction)- olulise informatsiooni eraldamine mitteolulisest;
  • algoritmid (algorithms)- probleemi samm-sammulise lahenduse väljatöötamine, või reeglite sõnastamine, kuidas probleemi lahendada. (Joonis 1)

Algoritmilise mõtlemise rakendamine

Ülalkirjeldatud tegevuste tulemusel välja töötatud algoritme kasutatakse programmeerimisel selleks, et koostada arvutiprogramm, mis lahendab keerulise probleemi parimal võimalikul moel. Algoritmiline mõtlemine ei ole programmeerimine, kuid see aitab välja selgitada, milliseid käske sisestada arvutisse, et programm teeks seda, mida programmeerija tahab, et see teeks.

Algoritmilist mõtlemist ei lähe vaja ainult koodikirjutamisel, vaid ka igapäevaelus erinevate probleemide lahendamisel. Mõned näited on reisi planeerimine, arvutimängude mängimine, sünnipäevapeo korraldamine, uue retsepti väljamõtlemine jne.

Algoritmilise mõtlemise saab jagada ka etappideks, millest viimane on väljatöötatud lahenduse rakendamine ja hindamine (analüüs). Näiteks uue retsepti väljatöötamisel tuleb toit retsepti järgi valmistada ning seejärel hinnata, kas saadud tulemus vastab ootustele. Kui ei, tuleb retsepti muuta ja seejärel uuesti toit valmistada. Programmeerimises tähendab lahenduse rakendamine ja hindamine programmi testimist ehk kas programm töötab tõrgeteta ja teeb seda, milleks see loodi  ning silumist ehk vigade leidmist ja parandamist.

Algoritmiline mõtlemine üldhariduskoolis

Algoritmilist mõtlemist peetakse ka üheks õpilaste digipädevuste osaks (vt Koolielu artikkel). Algoritmiline mõtlemine üldhariduskoolis sisaldab muu hulgas järgmisi elemente:
  • abstraktsioon ja mustrite tuvastamine, mis võimaldavad probleemi lahendamisele läheneda uudselt;
  • probleemi jagamine väiksemateks osadeks;
  • programmeeriva mõtlemise meetodite kasutamine nt kordused, loogikalaused, sümbolite kasutamine;
  • probleemi ümbersõnastamine viisil, mis võimaldab selle lahendamist samm-sammult;
  • võimalike lahenduste kindlaks määramine, nende analüüsimine ja rakendamine eesmärgiga leida parim lahendus ehk teisisõnu leida tehtavate sammude ja kasutatavate ressursside tõhusaim kombinatsioon;
  • üldistamine ja väljatöötatud lahenduse rakendamine teiste probleemide lahendamiseks.
Kuigi kõige selgemalt läheb üldhariduskoolis algoritmilist mõtlemist vaja matemaatika, programmeerimise ja tehnoloogiaõpetuse tundides ning loov-ja uurimistöö kirjutamisel, siis tegelikult on seda vaja rohkem või vähem kõigis õppeainetes.

Jälgi KristiProget Facebookis.

Kasutatud allikad