Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Informatika oktatása / Az informatika tanítási módszerei

Tanulási útmutató

Összefoglalás

Ebben a leckében áttekintjük az informatika egyes ismeretkörei tanítási módszereit. Néhányan közülük – melyek az informatikában már régebben megjelentek – módszerek sokaságával rendelkeznek, mások esetén pedig esetleg alig lehet módszerekről beszélni.

Az informatika tanítási módszerei

Az informatika egyes területeinek mára kialakultak fontos tanítási módszerei. Mivel azonban még kevés idő telt el az informatika oktatásában, ezért ezek legtöbbször nem tisztán fogalmazódnak meg, kialakításuk nem tudatos, hanem sokkal inkább ösztönös. Ebből az is következik, hogy a legtöbb tanár nem egyetlen módszert használ, hanem módszerek valamilyen keverékét, amelyben az egyikük dominánsan jelenik meg.

Ebből a módszertani „bizonytalanságból” az is következik, hogy az alábbiakban negatívan megítélt módszereknek is van olyan használója, aki még azzal a módszerrel is képes sikeresen tanítani. A negatív megítélés oka ezért elsősorban az, hogy ezek a módszerek nem biztosítják „automatikusan” a jó tanítást, könnyű ezekre alapozva nagyon rosszul tanítani.

1. Programozás tanítási módszerek

A programozási módszertan az informatika oktatása egyik legrégibb területe, így többféle, ma is használatos módszer alakult ki tanítására. Ezek közül egyesek az általános, illetve középiskolai oktatásban használhatóak eredményesen, mások pedig a felsőoktatásban. Mindegyik módszer alapgondolatából következik, hogy milyen legyen a Programozási módszertan, az Adatszerkezetek és algoritmusok, a Programozási technológia stb. tárgyak tanterve, felépítése.

A programozás tanítás szinte egyidős a számítástechnikával. Az első években (kb. 1950 előtt) ez gyakorlatilag a gépek működésének megértését, használatának elsajátítását jelentette. Ebben és a következő korszakban a programozás „művészi” tevékenység volt, a programozóknak különböző trükköket, cseles fogásokat kellett megtanulni, s szinte minden egyes feladatra új algoritmusokat kellett kitalálni. Még az 1950 és 1960 közötti időszakban is inkább szájhagyomány útján terjedtek a programozási ismeretek. Gépközeli programozási nyelveket használtak, s emiatt a problémák lényege helyett sokkal több időt kellett tölteni a részletek kidolgozásával, s ebben tekintettel kellett lenni a számítógépek kis sebességére és tárkapacitására is.

A magasszintű programozási nyelvek megjelenésével vált igazán fontossá a programozás tanítása. Ez azonban az előző korszak hatására valamilyen programozási nyelv tanítására épített módszer volt. A kidolgozott feladatok a programozási nyelv utasításainak megértést, alkalmazási lehetőségeinek bemutatását szolgálták.

A 70-es évektől beszélhetünk tulajdonképpen a programozás tanításáról abban az értelemben, ahogyan azt ma értjük. Az áttörést a programozási módszertanban strukturált programozás néven megjelent módszertan hozta (Dahl, Dijkstra, Hoare [DODEHC,DE], Wirth [WN]). Lényeges újítása volt, hogy kevés, de jól definiált algoritmikus és adatszerkezet használatára szorítkozott, az „oszd meg és uralkodj” elv alkalmazásával a problémákat részproblémákra osztotta, valamint a programozási nyelvtől elválasztva absztrakt algoritmusokat és adattípusokat hozott létre, s ezek alkalmazásával oldotta meg a programozási feladatokat.

A 70-es évek végén más megközelítésben is előkerült a programozás tanításának módszertana a gyermeki gondolkodásra alapozva, ennek kialakítója elsősorban S. Papert [PS]. Hasonló, bár más feladatkörre alapozott módszerről ír Jozef Hvorecky és Jozef Kelemen [HJKJ].

Azóta a programozás tanítására sokféle módszer alakult ki. Egyesek közülük mára már el is avultak, a többségük azonban ma is előkerül az oktatás valamilyen szintjén. Vannak olyanok, amelyek kötődnek egy programtervezési módszertanhoz, a többségük azonban ezektől lényegében független.

Az alábbiakban a legelterjedtebb programozás tanítási módszereket tekintjük át:

Megjegyezzük azonban, hogy a legtöbb oktató nem tisztán egy módszer mellett kötelezi el magát, hanem vegyesen használ több módszert.

A. Módszeres, algoritmusorientált

Ez a módszer, mint sok másik, a programkészítés teljes folyamatát tekinti át:

Az egyes résztevékenységekkel önállóan, külön-külön kell foglalkozni. Mindegyikben át kell tekinteni az ahhoz a témához kapcsolódó eszközöket és módszereket. Az egyes résztevékenységek közül ebben a módszerben az algoritmus előállítását tekintjük elsődlegesnek, ez szerepel a tanítás során a legnagyobb súllyal, sőt a többi részben is megjelennek algoritmus-orientált elemek.

Az algoritmus előállítás alapgondolata a szisztematikus felépítés. Első lépése az általános feladattípusok és azok általános megoldássémái, az ún. programozási tételek. (Formálisan is bizonyítható [SzPZsL1], hogy az egyes általános feladattípusok általános megoldás-sémái helyes megoldásai a nekik megfelelő feladatnak, a módszer azonban a formális bizonyítást informálissal helyettesíti.)

Második lépésként konkrét feladatok programozási tételekre való visszavezetésével kell foglalkozni, azaz megállapítani, hogy hogyan alkalmazhatók az egyes programozási tételek. Ebben a módszer specialitása, hogy párhuzamosan vizsgálja a specifikációt és az algoritmust, mindkettőben megnézve, hogy hol és mit kell aktualizálni.

Harmadik lépésként foglalkozhatunk programozási tételek összeépítésével, azaz olyan feladatokkal, ahol több programozási tételt kell egyszerre (nem lineárisan egymás után) alkalmazni. Itt is fontos, hogy nemcsak a specifikációra, hanem az algoritmusok összeépítésére is megadjuk a megfelelő (programtranszformációs) szabályokat [HÉSzPZsL1].

Az adatstruktúra tervezés (a hagyományos Adatszerkezetek és algoritmusok tantárgy egyik anyaga) itt a programozási módszertan szempontjai szerint kerül feldolgozásra, azaz az adatszerkezet egy típus, specifikálással, a struktúra reprezentálásával és a műveletek implementálásával [PVZsSzPZsL].

A kódolási fázisban nagyon sok, konkrét vagy általánosabb programozási nyelvtől függő döntésre kerülhet sor. Ez a módszer e döntések egy jelentős részét szintén algoritmikus szemlélettel fogja meg. Így tárgyalja például az iteratív és a rekurzív algoritmusok közötti átalakítás módszereit [SzPZsL2], illetve a szokásos programozási struktúraféleségek (elágazások, ciklusok, eljárások, függvények, operátorok, ...) egymással történő megvalósítását. A módszer ezen kívül ebben a fázisban foglalkozik a felhasználóbarát programozás eszközeivel, módszereivel (pl. menük megvalósítása). A tesztelési módszereken belül egyaránt foglalkozik a specifikációra épített (ún. fekete doboz) és az algoritmusra épített (ún. fehér doboz) módszerekkel [SzPZsLTT1].

A módszer hatékonyságvizsgálatot is az algoritmusra építve tárgyalja. Ez azt jelenti, hogy a végrehajtási idő, a helyfoglalás és a bonyolultság szempontjából általános feladatosztályokat fogalmaz meg (hasonlóan a programozási tételekhez), s megadja a hatékonyabbra írás algoritmikus sémáit, ötleteit (pl. a sorozat részekre osztása elve alkalmazható a logaritmikus keresés, a gyorsrendezés – quicksort, a párhuzamos maximum- és minimum-kiválasztás algoritmusainál éppúgy, mint mondjuk az intervallumfelezéses gyökkeresésnél) [ZsL,BJ].

Mivel itt (és a következő két módszerben) a programozási nyelv nem játszik elsődleges szerepet, így az a programozási ismeretek felépítését nem befolyásolja túlzottan, az így tanult programozók nem lesznek nyelvhez kötöttek.

Az algoritmusorientált elképzelés egyik alapgondolata, hogy a tervező a végrehajtó szerepébe képzelheti magát, s így az algoritmus helyességéről lehetnek informális elképzelései. Ez egy szekvenciális végrehajtási elképzelésnél nagyon jól építhet egyéni tapasztalatokra, objektumelvű vagy párhuzamos modellekben pedig csoportok működésében, viselkedésében szerzett tapasztalatokra.

B. Adatorientált

Ez a módszer nagyon hasonlít az előzőre, az algoritmus-alkotás helyett azonban az adatstruktúrát, a típusfinomítást tekinti elsődlegesnek. Alapgondolata, hogy a feladat meghatározást típus-specifikációként tekinti, és a típusfinomításhoz rendel algoritmikus struktúrákat: [JM1,JM2]

A módszer tiszta változatában a felhasználóval való kapcsolat is típusfinomításként fogható fel. Ebből kapjuk a bemeneti (űrlapok) és kimeneti (jelentések) formátumokat. Az előző módszer programozási tétel fogalmával szemben itt az adatfeldolgozási típusfeladatok kerülnek előtérbe (adatfelvitel, listázás, összegfokozatos listázás, másolás, időszerűsítés, ...), amelyek a bemeneti adatstruktúrához hozzárendelik a kimeneti adatstruktúrát. Ezekre ugyanúgy elkészíthetők az általános adatstruktúrák és algoritmusok, mint a programozási tételekre [SzPZsL3].

A módszer jellegénél fogva más feladattípusokat helyez előtérbe, mint az előző. Az algoritmusorientált módszerre jellemző, hogy először az algoritmikus struktúrák kiterjesztésével foglalkozik, azaz alapelve az egyszerű adatstruktúra – összetett algoritmikus struktúra elv. Az adatorientált elképzelés ezzel szemben az összetett adatstruktúra – egyszerű algoritmikus struktúra elvet követi. Itt a programok nagyon sokáig például az „1 olvasás – feldolgozás – 1 írás” alapelvre épülhetnek [BVG].

C. Specifikációorientált

A módszer alapgondolatában az első kettőhöz hasonló. A programozási folyamat leghangsúlyosabb részének azonban a formális specifikálást tartja, a specifikációból automatikusan vezeti le az algoritmust, majd merev kódolási szabályok segítségével állítja elő a kódot. Az elsőhöz hasonlóan itt is beszélhetünk programozási tételekről, ezek algoritmusai azonban a megadott specifikációból való levezetéssel születnek [FÁ].

Míg az algoritmusorientált módszerben az algoritmus átalakítása játssza a főszerepet, addig itt sokkal hangsúlyosabb a specifikáció átalakítása. Ennek megfelelően az adatszerkezetek és algoritmusok témakör is sokkal elméletibb ismereteket tartalmazhat, hatékony megvalósításhoz szükséges tételekre, azok bizonyítására épülhet. Mivel minden fázis erős matematikai kidolgozottságot igényel, csak komoly elméleti ismeretekkel kezdhető el, s megértéséhez erőteljes absztrakciós készségre van szükség. [FÁNyGJHÉ]

D. Feladattípus-orientált

Ebben az esetben az előző háromtól alapvetően eltérő módszerről van szó. Itt a programozás egységes tevékenység, egyes részei nem választhatók el egymástól, fontos jellemzője az előzőkkel szemben, hogy itt mindig a teljes programmal foglalkozunk. (Ez az összes további módszerre is igaz lesz.) Emiatt az egyes részterületeken váltakozva lép előre, s ismerünk meg újabb és újabb módszereket.

Itt egy konkrét feladatkörből indulunk ki. Ez klasszikusan matematikai feladatkör, legtöbbször számelméleti feladatokkal (pl. oszthatóság, prímszámok, prímtényezős felbontás), de a módszer sikeres alkalmazása (elsősorban a közoktatásban) egészen más területekhez kötődik:

Mindegyik lényege az, hogy egy egymásra épülő példákat tartalmazó feladatsort kell megoldanunk. A feladatsor egyes feladatai megoldásához van szükségünk új programozási fogalmakra, elemekre, s ezeket azért vezetjük be, mert a konkrét feladatmegoldáshoz kellenek. Ennek előnye, hogy az új ismeretet természetes igényekből kiindulva vezethetjük be, s nem kinyilatkoztatásként. Ugyanakkor azonnal alkalmazzuk is a feladat megoldására, s mint közismert, a megértés egyik legmagasabb szintje az, amikor az új ismeretet alkalmazni is tudjuk.

Különösen a hétköznapi algoritmusokra épített módszer alkalmas a programozással való kezdeti ismerkedésre (általános iskola alsó tagozat, sőt: óvoda), hiszen ez a mindenkiben meglévő természetes ismeretekre épít, abból vezeti le a programozási fogalmakat, módszereket. Fontos tudni: az óvodákban és az általános iskolákban hétköznapi algoritmusok megértését és végrehajtását már nagyon régóta tanítják, csak ennek nagyon sokáig semmi köze nem volt az informatika algoritmizálás tanításához [KC].

Megjegyezzük, hogy ezt az elképzelést (ti. az algoritmus úgy működik, ahogyan kézzel is tennénk) sok programozás-tanítási módszer alkalmazza.

E. Nyelvorientált

Ez az egyik legrégebbi módszer, az előzőhöz hasonlóan itt is mindig a működőképes program előállítása a megoldandó feladat. Másik fontos jellemzője, hogy valamely programozási nyelvhez kötődik, mint az alábbi két példából is látszik.

Egy tipikus párbeszéd részlete: – „Te mit tanulsz programozásból?” – „Pascalt”.

Ugyanez másképpen fogalmazva: Vannak „Pascal”-programozók, „C”-programozók, ...

A módszer lényege, hogy egy programozási nyelvet tanít meg, s azon keresztül vezeti be a programozási ismereteket. Mivel a programozási nyelv van a középpontban, így sok nyelvfüggő ismeret is előkerül, sőt rögzül (!), mint általános programozási fogalom (gondoljunk például a BASIC nyelv DATA-READ-RESTORE utasításcsoportja használatához kapcsolódó ismeretekre). Emiatt az „egy nyelven tanult programozók” nagyon nehezen térnek át más programozási nyelvre.

A másik veszély abból származik, hogy az egyes programnyelvi elemek bonyolultságának szinte semmi köze a programozásbeli alkalmazásuk bonyolultságához, s emiatt a nyelvhez igazított tanításban nem megfelelő súllyal foglalkozunk vele. Kiváló példa erre az elágazás és az elöltesztelő feltételes ciklus utasítás (Pascalban: IF és WHILE), amelyek nyelvi szempontból körülbelül egyforma nehézségűek, a programozásban mégis sokkal többet foglalkozunk olyan feladatokkal, ahol a megoldásban ciklus szerepel, mint azokkal, ahol csak elágazás van.

Ugyancsak problémája a módszernek, hogy sok programozási fogalom, tevékenység (mint pl. verem, sor, rendezési módszerek, ...) nem köthetők közvetlenül programnyelvi elemekhez (legalábbis ma még nem, ha az oktatásban számításba vehető programnyelvekre gondolunk), így a tanítási folyamatba beépítésük esetleges lehet.

Néhány sikeres példát azonban mégis találhatunk. Ezek elsősorban a hagyományos Neumann-elvű programozástól eltérő programozási nyelvhez kötöttek [NAFK].

F. Utasításorientált

Ez az előzőhöz hasonló, de nem egy konkrét programozási nyelvre, hanem egy általános nyelvtípusra építő módszer. Lényegében csak ennyiben tér el tőle, azaz megmaradnak az általános nyelvhez kötöttség miatti problémák, s csak az egyetlen nyelv speciális ismeretei miatti gondok szűnnek meg.

A módszer definiálja az általános nyelvi elemeket, amelyek pl. egy Neumann-elvű felépítés alapján az alábbiak lehetnek:

A konkrét nyelvhez kötöttség problémáján kívül sajnos az előző módszer összes hátránya itt is megmarad, így ez a módszer is a veszélyesek közé sorolható.

G. Matematikaorientált

Ez az elképzelés egy másik tantárgy (példánkban éppen a matematika, de ugyanúgy lehetne más is) elképzeléseire épít. A megoldandó feladatsort a matematikából veszi, ahol az egyes feladatok a matematika szempontjából épülnek egymásra. Sajnos ez egyáltalán nem garantálja, hogy programozási szempontból is következetes a felépítés, valamint azt sem, hogy teljes.

Komoly csábítást maga a matematika jelenti „szuverén” témáival, sajátos belső logikájával, arányaival. Nem igazán garantálható, hogy ezen belső arányok szinkronba hozhatók a tényleges céllal, a programozással. Érdekes belelapozni ezen törekvés egy korai, egyébként igen színvonalas példáját jelentő könyvbe: Simonovits Miklós és Gémes Margit által írott tanári kézikönyvbe [SMGM].

H. Hardverorientált

Elképzelése szerint az algoritmikus ismeretek nem érthetőek magasszintű programnyelvi ismeretek nélkül; a programnyelvi ismeretek nem érthetőek assembly, illetve gépi kódú ismeretek nélkül; az assembly ismeretek nem érthetők a processzor működésének ismerete nélkül; ....

Emiatt a tetszetős, ámde téves következtetési lánc miatt a programozási ismereteket megpróbálja alulról felfelé építeni. Állítja: „Aki ismeri a processzor működését, csak az érti, hogy miért éppen úgy épülnek fel az assembly utasítások, s hogyan kell egy assembly programot végrehajtani. Az assembly nyelv ismeretében már meg lehet fogalmazni, hogy hogyan működnek a magasszintű nyelvek utasításai. A magasszintű nyelvek utasításait ismerve könnyebb megérteni, hogyan működnek az egyes algoritmusok.”

A módszer alapgondolatából következik, hogy a programozási (általánosabban: algoritmizálási és adatmodellezési) ismeretekre nincs szüksége mindenkinek, és az ilyen képzést elég az egyetemekre és főiskolákra hagyni. Ez pedig alapvetően ellentmond annak, hogy algoritmus megértésre, végrehajtási képességre mindenkinek (!) szüksége van, és ez hangsúlyos része a közismereti informatikának.

I. Mintapélda alapján

Ebben a módszerben a tanulók mintapéldákat látnak (algoritmusok, programkódok), ezek magyarázatával szereznek programozási ismereteket. Az új feladatokra a megismert programok módosításával készíthetnek újabb programokat.

Ebben a módszerben előtérbe kerül a kísérletező szerep, ami háttérbe szorítja a tudatos programozás tanulást. A tanulók a megismert programokat módosítgatják, megnézik, hogy milyen új eredményeket kaphatnak belőle, s ha az megfelel a várakozásuknak, akkor a beavatkozás sikeres volt; ha nem, akkor pedig tovább kell kísérletezgetni [SMGM,KRSM].

Az egyes módszerek rövid értékelése

Úgy gondoljuk, hogy az első két módszer (algoritmus-, illetve adatorientált) a középiskolák vége felé (informatikus szakmákra készülőknek), az informatikai szakképzésben és a felsőoktatásban használható. Motivációs szempontból jobb az algoritmusorientált szemlélet, mivel ez tölthető meg sokféle, érdekesebb feladattal.

A specifikációorientált elképzelés csak egyetemek speciális informatikai szakjain (ún. elitképzésben) használható, ugyanis csak erős matematikai alapok megléte esetén lehet sikeres. Egyetemi „tömegképzésben” meggondolandó a 4-5. éves képzésben való megjelenése.

A feladatorientált módszer az, amelyet egyetlenként szabad alkalmazni a közoktatás minden olyan szintjén (általános és középiskolák), ahol elsősorban az algoritmikus gondolkodás kialakítása a fontos, és nem programozó szakemberek képzése.

A nyelv- és utasításorientált elképzelést elavultnak tartjuk, túlságosan sok veszéllyel járhat alkalmazásuk, hasznuk pedig lényegesen kisebb lehet más módszereknél.

A matematikaorientált módszert nem tartjuk célravezetőnek a programozás tanításában, megjegyezzük azonban, hogy programozási ismeretekkel rendelkezőknek nagyon hasznos lehet a programozással támogatott matematika-oktatás, hiszen mint említettük, az érti igazán a matematikát, aki alkalmazni tudja (például a programozásban).

A hardverorientált elképzelés (főleg végletes formájában) szintén elavultnak tekinthető, ez azonban sokkal érdekesebb kérdéseket is felvet: például, hogy jó helyen van-e az egyetemeken a számítógép architektúrákkal kapcsolatos tantárgy az első félévekben? Nem lenne-e értelme egyes részeit később, jóval mélyebben tanítani?

A mintapélda alapján tanítás egy „középkori” gondolat, így a programozás „művészeit” lehet képezni, tudatos művelőit nem. Ez tehát csupán néhány zseninek lehet megfelelő, a többiek csupán barkácsolhatnak ezzel a módszerrel.

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.

A tananyag az ELTESCORM keretrendszerrel készült