A programozási módszertani szempontok (avagy miképpen dolgozzuk fel az anyagot?)
Általános vagy nyelvspecifikus algoritmus-leírás?
Az algoritmusok működésének oktatása nehéz ügy főleg azon kezdő tanítványok felé, akik még életükben nem foglalkoztak informatikával és/vagy gyengék a matematikában. Nem probléma ez, hiszen ekkor léphet működésbe a tanári kreativitás, amely pedagógiai mozzanatnak számos előregyártott tanári segédlet áll rendelkezésre. Ezek lehetnek:
folyamatábra, tágabb értelemben UML-ábrázolás...
...beszédközeli pszeudokód (álkód)...
Be: a, b, c
Ha (a > b)
Ha (a > c)
max := a
Másként
max := c
Másként
Ha (b > c)
max := b
Másként
max := c
Ki: max
...„durr a nulláslisztbe”-elvű, oktatási célú programozási nyelv oktatása; ilyen volt nagyon sokáig a Pascal, amelyet első programozási nyelvként tanulni manapság, 2016-ban már több mint értelmetlenség...
...vagy bármilyen szemléltető eszköz, amitől a tanítvány képes lesz megérteni az alapfogalmakat. Az utóbbihoz sorolom saját módszeremet, amely valójában beszédközeli pszeudokód, de nem konkrét algoritmusokat, hanem a hétköznapi életből vett, algoritmus-jellegű életfolyamatokat ír le, ezáltal teszi még befogadhatóbbá az algoritmus fogalmának megértését. Néhány ilyen példát említek Az algoritmus fogalma című fejezetben, ám a szemléltetés kedvéért egyet idemásolok, például Ági titkárnő átlagos munkanapját:
HA (nap = „Hétfő” VAGY „Kedd” VAGY „Szerda” VAGY „Csütörtök” VAGY „Péntek”){
Ági.alvás(23h, 7h);
Ági.ébredés(7.10h);
Ági.reggeliTeendők(zuhanyzás(), fogmosás(), öltözés(), reggelizés());
Ági.utazás(busz(32), villamos(6));
Ági.munka(9h, 17h);
Ági.utazás(busz(32),villamos(6));
Ági.bevásárlás(Tesco);
Ági.főzés(víz, paradicsom, tészta);
Ági.TVnézés(RTL, M1, StoryTV);
}
Az algoritmusok (és persze bármi) oktatása során alapkövetelmény a tanítványi reakciók figyelése...
A jó oktató képes leszűrni a válaszokból a tanítványi megértés aktuális szintjeit. Készüljünk fel: csak nagyon kevesek hajlandók beismerni értetlenségüket, helyette egészen tréfás válaszokat kaphatunk, például: „Egy kicsit már értem!” vagy ami még rosszabb: fejbólogatásokkal tarkított határozott igen a válasz, holott a tanítványnak gőze nincs az egészről. Az oktatónak ilyenkor kell felsorakoztatnia teljes algoritmus-szemléltető kelléktárát, hátha valamelyik „beakad” a tanítványnál.
A legáltalánosabb pedagógiai kérdés ebben a vonatkozásban, hogy milyen szemléltető eszközzel kezdjük az algoritmus, mint alapfogalom tanítását:
kezdjük-e magával a nyelvvel, jelen esetben a Java szintaktikai elemeinek felhasználásával vagy vessünk be egy köztes szemléltető eszközt, mondjuk a beszédközeli pszeudokódot?
Nos, megállapíthatjuk, hogy tanítványa válogatja. Engem annak idején teljesen kezdőként a szokásos, fenti kelléktárakkal bombáztak le (természetesen akkor még nem volt saját módszerem), amely nem igazán volt eredményes az első időszakban, bár ez nemcsak az oktatón múlik. (Hanem akkor kicsodán, hiszen ő választja meg a kelléktárat és látja a tanítványi reakciókat.) Az egyik programozás-tanárom például alapozásként alapalgoritmusok szemléltetésére folyamatosan beszédközeli pszeudokódot erőltetett. Már akkor eszembe jutott, hogy végül is miért kell nekem általános algoritmuselmélettel, mondjuk maximumképzéssel kezdeni, amikor én Java-nyelvet akarok tanulni? Olyan ez, mint amikor az óvodásoknak nyelvtanítás címmel nyelvtant tanítunk és nem a konkrét nyelvet.
Tessék választani:
-
Én vagyok.
-
Személyes névmás egyes szám első személyben (E/1) és a lenni létige egyes szám első személyben ragozva.
Pontosan ennyire volt hatékony nálam is az általános algoritmuselmélet, bár ennek ellenére furcsamód egy idő után továbbléptünk az anyagban.
Az én pedagógiai véleményem a következő:
meg kell értenie a tanítványnak azt, hogy mit is jelent az algoritmus fogalma, ám ezt szükségtelen túlmagyarázni. Ebben remek segédmódszer lehet, ha rávilágítunk azon tényre, hogy az emberi élet valójában mennyire algoritmikus, sőt, ha megpróbáljuk egyes folyamatait pszeudokód formájában leírni (Az algoritmus fogalma című fejezet részletesen foglalkozik ezzel). Szerintem ennél hatékonyabb módszer nincs az algoritmus fogalmának megértetésére.
Ha ez sikerült, nyugodtan ugorjunk bele nyakig a nyelv szisztematikus tanításába. A tanítvány mindent úgysem fog első alkalomra megérteni, azaz idő kell bizonyos anyagok letisztulásához. Sőt, a tanítvány, magán a nyelven keresztül fogja megérteni számos algoritmus működését, amint a gyerek is (főképp) a beszéd gyakorlásán keresztül tanul meg gondolkodni. Miért lenne probléma ez?
Azt se felejtsük el, hogy míg általános algoritmuselmélet tanulásakor maximum a papírt vagy a képernyőt bámuljuk egészen addig, amíg le nem esik a tantusz, az algoritmus nyelvi implementációja esetén a fejlesztői környezet segítségével lehetőségünk van debug (hibakereső) üzemmódban szó szerint lépésről-lépésre, utasításról utasításra végiglépkedni az algoritmuson, gondosan kiértékelve annak összes műveletét és összes változójának tartalmát:
Ilyen esetekben olyan mélységben láthatunk bele az algoritmus működésébe, amelyre sohasem lesz képes egyetlen szemléltető segédmódszer sem.