Az alábbi írás Danka Miklós előadásának átirata a 2018-as Rátz László Vándorgyűlésről.
Az algoritmikus gondolkodás nem triviális
A cambridge-i egyetemre jártam számítógéptudomány szakra. Az első évben először egy ML nevű funkcionális programnyelvet tanultunk. Megdöbbenéssel tapasztaltam, hogy milyen sok tanulónak gondot okozott a programnyelv megtanulása, ezen belül is a függvényekben való gondolkodás, de különösen a rekurzió. A rekurzió ugye az az eset, amikor egy program függvénye önmagát használja fel a definícióhoz és a futáshoz.
Nem értettem, hogy ez hogy lehet. Két kérdés merült fel. Egyrészt ezek a diákok már mind találkoztak programozással, ráadásul okos, válogatott tanulók voltak – akkor mi hiányzott nekik az ML megértéséhez? Másrészt nekem természetesnek hatott az ML – milyen korábbi tapasztalatom lehetett, ami miatt könnyebben ment az ML megértése?
Ahogy visszagondoltam a saját tanulmányaimra, rájöttem, hogy már hetedik osztályban megtanultam a rekurzió gondolatát, ráadásul – az egyik tanáromnak, Blénessy Gabriellának, és egy könyvnek köszönhetően – különösebb nehézség nélkül. A Comenius Logóban egy teknőcöt lehetett programozni, és az egyszerűbb rajzokon túl fraktálokat is lehetett készíteni, ilyeneket:
Egy négyzet a Logóban.
Fraktálok.
A könyv amelyből a rekurziót tanultam meg.
Teljesen lenyűgözött annak a felismerése, hogy ilyen vizuális játékokkal különösebb nehézség nélkül sikerült az algoritmikus koncepciók legnehezebbikét, a rekurziót természetessé tenni.
Ekkor tisztázódott le bennem két alapvető gondolat:
- Az algoritmikus gondolkodás egyáltalán nem triviális, még azoknak sem, akik már találkoztak alapszintű programozással.
- Az algoritmikus gondolkodást el lehet sajátítani nagyon szórakoztató, motivált módokon is.
Az algoritmikus gondolkodás mindenhol ott van
Az egy dolog, hogy programozóknak hasznos az algoritmikus gondolkodásmód, de minek másoknak tanítani?
Édesanyám könyvelőként dolgozik. Ma már profi számítógépes és kitűnő Excel-felhasználó, de ez nem mindig volt így, 15 éve még az alapokról indult. Neki nincs matekos háttere, nem tudományokban dolgozik, és nem is programozó – mégis szüksége volt az algoritmikus gondolkodásmódra. Hogy miért? Már olyan egyszerű dolgokhoz is erre van szükség, mint az Excelben a feltételes formázás, vagy egy HA függvény használata, hiszen egy ilyen képletben szerepel változó, boolean feltétel, elágazás, függvény, argumentum.
Jól látható, hogy már egy táblázatkezelő mélyebb használata is nagyon hasznos: szinte minden munkaterületen, de még a mindennapi életben is sok automatizálható feladatban segít. A tudományosabb területeken ennél még konkrétabb formában is előkerül a programozás: egy fizikus MATLAB-ban végez számításokat, szociális tudományokban R-ben számolnak statisztikát, a mérnökök pedig szimulációkat végeznek.
Ezekben a közös az algoritmikus gondolkodás. Ráadásul mindegyikben ez a legnehezebb rész, nem maga az eszköz működése, hiszen az utóbbi főként tapasztalat és utánajárás kérdése. A fenti példában édesanyámnak a kezdeti kihívás elsősorban nem az Excel használata volt, hanem a precíz utasításokban és feltételekben való gondolkodás. A MATLAB-ot tanulóknak nem a grafikonok rajzolása a nehéz, hanem az instrukciókból való építkezés.
Ezért különösen nagy szívességet tudunk tenni a gyerekeknek azzal, ha ezeket az alapkoncepciókat elültetjük bennük, pláne amíg különösen fogékonyak rájuk. Nagyon limitáló, ha valaki nem tud a gépek “fejével” gondolkodni. Szerencsére ennek a fordítottja is igaz: akiben ezek az alapkoncepciók megvannak, azoknak ezek az eszközök mind sokkal egyszerűbben megtanulhatók – akkor már majdnem mindegy, hogy Excelt, MATLAB-ot, vagy Pythont tanul az illető.
Miért matekórán?
Az informatikaórákon (már amikor egyáltalán vannak) a hangsúly gyakran az eszközhasználaton van, legyen az Excel, vagy ritkább esetben egy programnyelv, és ez nincs elválasztva magától az algoritmikus gondolkodástól. A tanulók ezért egyszerre küzdenek az eszközökkel (hova kell vesszőt, pontosvesszőt írni, mi a pontos formátum, lemaradt-e egy zárójel) és a gondolkodásmóddal, ami egyrészt így jóval nehezebb, másrészt nincsen felépített anyag specifikusan a gondolkodásmód elsajátításához.
A matekórákon ezzel szemben a hangsúly a gondolkodáson és a gondolkodásmódok oktatásán, fokozatos felépítésén van. Ezért a matekórák keretei és az ott használt technikák, a matekórai tapasztalatok különösen alkalmasak az algoritmikus gondokodásmód oktatására. Utána már az Excel és a programnyelvek elsajátítása is lényegesen könnyebben megy.
Hogyan tanítsuk?
Észrevételeink tehát:
- Az algoritmikus gondolkodás egyáltalán nem triviális, még azoknak sem, akik már találkoztak alapszintű programozással.
- Az algoritmikus gondolkodást el lehet sajátítani nagyon szórakoztató, motivált módokon is.
- Az algoritmikus gondolkodásmód baromi hasznos manapság az intellektuális munkát végzők köreiben.
- A specmat oktatás, ahol a gondolkodáson van a hangsúly, különösen alkalmas ennek oktatására.
Ez a négy észrevétel elég sokáig élt bennem. Aztán amikor 5 éve beindítottam az első matektáboros csoportomat, eljött a nagy lehetőség arra, hogy a gyakorlatban is kipróbáljam ezeket az elveket. Íme két példa programozós feladatsorokra.
A Programozható Robotcsiga
A logós tapasztalataim miatt először egy vizuális feladatsort találtam ki a gyerekeknek, ahol a feladat különböző izgalmas alakzatok létrehozása utasításokkal. Ezáltal először az alap programozási konstrukciókat értik meg. A sorozat végül fraktálokban csúcsosodik ki, amik létrehozása rekurziót igényel (és motivál).
Ebben a feladatsorban egy Programozható Robotcsiga (PR) áll rendelkezésünkre, mely a rajzlapon mozogva tintacsíkot húz maga után. A PR 2000 először csak előre/hátra mozogni illetve jobbra/balra fordulni tud. Az újabb verziókban újabb képességekre tesz szert: a PR 3000 már az ismétlést is ismeri, a PR 4000 pedig metódusokat, változokat, és elágazásokat is tud használni.
A formátum miatt arra nem volt lehetőség, hogy mindenkinél legyen egy laptop. Ezért a gyerekek főleg papíron gondolkodtak, viszont volt lehetőségük időnként egy közös, táboros laptopon kipróbálniuk a programjukat.
A kipróbáláshoz Logo helyett Scratchet használtunk:
- Modernebb, és webes verziója is van.
- Blokkokkal kell programozni, ezért nem az elgépeléses hibákkal kell foglalkozniuk a gyerekeknek.
- Sokkal több mindent tud, mint a Logo, akár komplex, interaktív játékokat is lehet benne írni, ezért a kísérletező kedvűek könnyen továbbhaladhatnak.
Miért jó ez a rajzos módszer?
- Otthon ki tudják próbálni a programjaikat.
- Konstruktív, vizuális és érdekes eredménye van.
- A konstruktivitás és a próbálkozási lehetőség miatt gyengébbeknek is izgalmas.
Mi lesz azokkal a gyerekekkel, akik már tudnak programozni? Nekik ez a feladatsor gyakran túl könnyű amíg el nem érünk a fraktálokhoz. A gyakorlatban ez nem jelentett gondot:
- Ha ez az egyetlen programozós feladatvonal több más feladatsor között, akkor ők tudnak más feladatokkal foglalkozni.
- A megfigyelés az, hogy akiknek már van tapasztalatuk, azok szívesen segítenek másoknak, illetve örömmel mutogatják a már kész programjaikat a többieknek, ami inspirálóan hat.
Bitország bürokratái
Bitország ügyosztályain bürokraták dolgoznak, beérkező aktákat dolgoznak fel. Bitországban az akták 0-1 sorozatok. Amint egy bürokrata megkap egy aktát, kiveszi a soron következő bitet belőle, majd az utasításai szerint továbbküldi a maradékot. Az utasítás azt mondja meg, hogy hogy 0, illetve 1 esetén melyik kollégának továbbítja az aktát – sőt, az is lehet, hogy valamelyik esetben saját magánál tartja az aktát. Ha nála ér véget a sorozat, akkor bizonyos bürokratáknak ki kell dobniuk az aktát, mások pedig “elfogadják” azt, és jelenteniük kell a felettesüknek.
Minden karika egy bürokratát jelöl, a nyilak pedig az utasításaikat. Az S jelöli a feldolgozás kezdetét, a duplakarika pedig az elfogadó bürokratá(ka)t.
Ez az ügyosztály a 0-ra végződő aktákat fogadja el.
Ez a feladatsor a véges automatákról szól. Ezek klasszikusabb matekfeladatok, egyáltalán nem is kell hozzájuk számítógép. Ezek is konstruktív feladatok, de ami az igazán izgalmas bennük az az, hogy itt különböző bizonyításokra is lehetőség van. A feladatsor csúcsa egy nagyon izgalmas számításelméleti bizonyítás, amiben matematikailag belátható, hogy még a számítógépeink sem képesek mindenre.
A robotcsigához hasonlóan attól jó ez a feladatsor, hogy egy nagyon limitált eszköztárral kell megoldani komplex feladatokat. Ráadásul itt is sok konstruktív feladatra van lehetőség.
Összefoglaló
Az algoritmikus gondolkodásmód tehát tanítható matekórán, és szinte mindenkinek aki intellektuális munkát végez nagyon hasznos képességet ad az élete további részéhez.
A fenti feladatsorok részletei nem érhetőek el publikusan, viszont elkérhetőek emailben: danka.miklos[KUKAC]gmail[PONT]com.
Mi is örömmel várjuk a feladatötleteket, javaslatokat.