A PROGRAMOZÁS ALAPJAI TÁRGY OKTATÁSÁNAK KÉRDÉSEI AZ INFORMATIKUS KÉPZÉSBEN Kovács László, Wagner György Miskolci Egyetem, Általános Informatikai Tanszék ÖSSZEFOGLALÁS Az elemzés fő célja, hogy bemutassa a Programozás alapjai c. tantárgyhoz kapcsolódó oktatási tartalmakat, kitekintve mind a hazai mind a nemzetközi megvalósulásokra és összevetve a főbb jellemzőket. A cikk részletesen bemutatja a Miskolci Egyetemen megvalósított tematikát és elemzi a folyamatos adaptációk okát és következményeit. ABSTRACT The aim of the study is to analyze the different syllabus contents at national and international levels, regarding the course Foundation of Programming. This course is a key module in computer curricula and it requires a periodic fine-tuning for adaption to the current requirements. The article presents a detailed description of teaching Foundation of Programming at the University of Miskolc, too. KULCSZAVAK/KEYWORDS Programozás oktatása, tanterv, ACM Computing Curricula, informatikus képzés Teaching of programming, syllabus, ACM Computing Curricula, programmes in IT BEVEZETÉS Informatikus szakjaink képzésében a legfontosabb területnek tekinthető a programozás, különösen a Miskolci Egyetemre mondható el ez a megállapítás. A programozás szerepét nagyban erősíti, hogy a végzettek nagyrészt ilyen jellegű elhelyezkedési lehetőségek állnak rendelkezésre. Végzés után akár rendszergazdai feladatokat fognak ellátni (shell programok vagy egyéb makrók készítése, futtatása), akár programfejlesztők lesznek, az őket alkalmazó cégek visszajelzései alapján erre a tudásra szükségük lesz. A
programozás vonulatának első lépcsőfoka a Programozás alapjai című tantárgy. E tárgyban megszerzendő kompetenciák nélkül nem lehet sikeres a további, ráépülő ismeretek megszerzése sem. Sajnos az utóbbi időben a sikerességi ráta az informatikus hallgatók körében igen alacsonynak tekinthető, országosan is 46% körül van, a Miskolci Egyetemen ez az érték az első három alapszakos évfolyamra vonatkoztatva 41%-on áll és van olyan hazai intézmény ahol 30% a sikeres végzési arány (MRK 2013). A végzettek számának csökkenésével párhuzamosan a végzetteket foglalkoztató cégek visszajelzései, az új szakmai igények is arra ösztönöztek minket, hogy átgondoljuk és frissítsük a meglévő tananyagainkat. A megfelelő tematika kialakítása, és annak megvalósítása meghatározó jelentőségű a hallgatók programozással összefüggő ismereteinek szempontjából. Az elemzés során egyik fő forrásunk a máshol futó kurzusok vizsgálata volt. TEMATIKÁK ÖSSZEVETÉSE NEMZETKÖZI ÉS HAZAI SZÍNTÉREN A programozás alapjait érintő tantárgyak tartalmát illetően többféle megoldással találkozhatunk a hazai és nemzetközi téren. Egyik fő irányadó elvnek az ACM Curricula Recommendations (ACM 2013) szabvány tekinthető. Az ACM szervezet az informatikai alapképzés területén öt fő szakot különböztet meg: Computer Science (programozás tudomány), Computer Engineering (számítógép mérnök), Information Systems (információs-rendszer szervező), Information Technology (információsrendszer technológia), Software Engineering (szoftver mérnök). A programozás alapjai más és más hangsúlyokat kapnak az egyes szakokon belül, mint az alábbi táblázat is mutatja (1. táblázat). Az ACM ajánlásokból érdekességként kiolvasható, hogy a szoftverfejlesztő mérnökök szakon a programozás alapjai cím alatt egy tágabb szakterületi kört megalapozó tematika jelenik meg, mely kitér az operációs rendszerek, hálózatok és a szoftver fejlesztés alapjaira is. Az egyes kurzus megvalósításokat tekintve is igen változatos képet mutat a felsőoktatás. Mint az elemzésből látható (2. táblázat), az angolszász országokban elsősorban az objektum orientált programozásra helyezik a hangsúlyt, a procedurális nyelvek már nem dominálnak. További érdekesség, hogy ezen bevezető tárgyba sokszor beveszik a szoftverfejlesztés alapfogalmainak a tárgyalását is, a programozást a szoftverfejlesztés keretében mutatják meg.
1. táblázat: A programozás alapjai tárgy súlypontjai szakonként szak Computer Science Comp. Engineering Inf. Systems Inf. Technology Softw. Engineering súlypontok algoritmusok jellemzése, adatstruktúrák, rekurzió, esemény vezéreltség, objektum orientáltság, biztonság és védelmi követelmények algoritmusok jellemzése, adatstruktúrák, rekurzió, esemény vezéreltség, objektum orientáltság, API elemek használata program fejlesztés életciklus alapok, adatstruktúrák, adatbázis elérés, fejlesztési paradigmák, tesztelés áttekintése Adatstruktúrák, alapelemek (struktúrák, vezérlés), objektum orientált programozás, algoritmusok a problémamegoldásban, esemény vezérelt programozás informatikai alapfogalmak (directory), algoritmusok jellemzése, adatstruktúrák, gépi kód reprezentáció, OS alapok, szoftver fejlesztési alapok, felhasználói felületek Ezek mellett megemlíthető az a sajátosság is, hogy sok esetben a nem klasszikus procedurális, objektum-orientált nyelveket mutatják be, hanem a speciálisabb funkcionális vagy logikai nyelveket tárgyalják, melyek még nagyobb absztrakciót igényelnek a hallgatóktól. A kapott eredményeket az ACM ajánlásokkal összevetve elmondható, hogy az ajánlásokat csak részlegesen követik a megvalósult tematikák, sokkal gazdagabb témakörlista jött létre. A hazai intézményekben leadott programozás alapjai című tantárgyak tematikáját elemezve már egy sokkal egységesebb kép rajzolódik ki (3. táblázat), köszönthetően a szigorúbb akkreditációs előírásoknak. Nálunk még elsősorban a klasszikus nem objektum orientált nyelvek kapják a fő szerepet. Domináns nyelv a C, csak elvétve jelennek meg első bevezető tárgyban az OOP nyelvek (C++, Java). Emellett néhány további egzotikusabb nyelvre is történik hivatkozás (pl. ADA).
2. táblázat: A programozás alapjai tárgy témakörei (nemzetközi) Témakör gyakoriság Alapfogalmak (vezérlés, változók) 64% Adatstruktúrák 61% Procedurális programozás 52% Objektum orientált programozás 81% Funkcionális programozás 29% Algoritmus elemzés 32% Szoftver fejlesztés 41% Operációs rendszerek, hálózatok 2% Komplexitás elemzés 8% Dataflow elemzés 5% Logikai programozás 18% További érdekesség, hogy náluk sokkal kisebb témakört fednek le a tematikák, az kiválasztott anyagot részletesebben mutatják be az előadásokon. Ezzel nagyobb segítséget is kaphatnak a hallgatók, hiszen nem nekik kell a részleteket kidolgozni a gyakorlati megvalósításokhoz. 3. táblázat: A programozás alapjai tárgy témakörei (hazai) Témakör gyakoriság Alapfogalmak (vezérlés, változók) 100% Adatstruktúrák 28% Procedurális programozás 86% Objektum orientált programozás 14% Funkcionális programozás 0% Algoritmus elemzés 0% Szoftver fejlesztés 14% Operációs rendszerek, hálózatok 14% Komplexitás elemzés 0% Dataflow elemzés 0% Logikai programozás 0% C nyelv 86% Java nyelv 14% Más nyelv 28%
TEMATIKAI KIALAKÍTÁSA A MISKOLCI EGYETEMEN A felsőoktatás az elmúlt években több jelentős változáson ment keresztül. Ezek közül az egyik a korábbi öt éves ciklust felváltó Bsc-Msc képzés bevezetése. A Miskolci Egyetemen 1997-től két képzés (főiskolai szintű programozó matematikus szak, egyetemi szintű műszaki informatikai szak) tantervébe került be a Programozás alapjai című tantárgy. A tárgy tematikájának kialakításakor szempont volt, hogy a különböző középiskolákból érkező diákok ismeretei jelentősen eltérhetnek egymástól. Az elsődleges cél az volt, hogy a félév során alakuljon ki egyfajta programozási készség. Ismerjenek meg klasszikus algoritmusokat, célszerű adatszerkezeteket, megfelelő tárolási formákat. Figyelembe lett véve, hogy a képzési időbe belefér több programozási nyelv megismertetése is. Megvizsgálva a hasonló képzést folytató külföldi egyetemek tantervét, és képzésük eredményességét (felvett illetve kibocsátott hallgatók száma), első programozási nyelvként a következők jöttek szóba: PASCAL, ADA, BASIC, C, FORTRAN, LISP. Fontos szempont volt, hogy lehetőleg interaktív környezet kerüljön kialakításra. Ha lehet, a fejlesztőkörnyezet támogassa a program szerkesztését, fordítását, szintaktikai hibák beazonosítását, esetlegesen futó program debug-olását. A programozási nyelv megválasztásakor tehát nem elsődlegesen a nyelv volt a meghatározó. Ezek után három programozási nyelv maradt versenyben: PASCAL, BASIC, LISP. Az alap BASIC legfontosabb hátránya tulajdonképpen a rugalmassága volt: a szintaktika nem írta elő a változók kötelező deklarálását, és meglehetősen kevés kötelező elemet tartalmazott. LISP-re nem volt könnyen kezelhető, elterjedt fejlesztőrendszer, így a PASCAL (Borland: Turbo Pascal, majd 2000-től a Free Pascal) maradt. A félév első négy hetében a nyelv alapvető szintaktikai elemei kerültek sorra, majd egyre nagyobb arányban az algoritmusok. A félév utolsó heteiben A számítógép programozás művészete című könyv alapján elterjedt keresések, illetve rendezések kerültek tárgyalásra (Knuth 1994), valamint a dinamikus memória kezelés, illetve az arra épülő láncolt listák. A negyedik héten kiadásra kerültek a félév végén beadandó, és kötelezően megvédésre kerülő félévi feladatok. Közepes illetve jó jegyért mindenkinek más, de sablon feladatot kellett megoldani. Közepesért egy rendezett file-ba kellett tudni felvinni új adatokat, módosítani, kikeresni, illetve törölni azokat. Jó jegyért két ugyanilyen, de egymással kulccsal összekötött file-t kellett ugynígy kezelni. Jelesért egyedi feladatok kerültek kiadásra (postscript megjelenítő, szintaktika ellenőrző, stb). A félév végén ezeket a feladatokat kellett bemutatni, illetve megvédeni, majd a félév elméleti anyagából felelni. A tapasztalat szerint több próbálkozás
után a hallgatók mintegy 80-85%-a kapott aláírást, és szerzett nem elégtelen gyakorlati jegyet. A következő félévekben ezekre az ismeretekre támaszkodva először a C, majd a C++ programozási nyelv került tárgyalásra. Érdekes módon a végzős hallgatók jelentős része ha programozási jellegű diplomamunkát készített, azt PASCAL-ban valósította meg. AZ ALAPSZAKOS KÉPZÉS TÁRGYTEMATIKÁJA Sajnos az idő múltával a felvételre kerülő hallgatók jelentős része érkezett bárminemű programozási ismeret nélkül, illetve az informatika szak viszonylagos elismertsége miatt jelentkeztek olyan hallgatók is, akik nem igazán érdeklődtek az informatika és annak jellemző tárgyai (Operációs rendszerek, Adatbázisok, Architektúrák, Hálózatok, stb.) iránt. Ennek megfelelően módosítani kellett a tematikát. Mivel lecsökkent a képzési idő, így már nem fért bele, hogy Pascal, illetve C is oktatásra kerüljön. Többszöri egyeztetés után tanszékünk a C programozási nyelvet választotta (más egyetemekhez hasonlóan). Ennek megfelelően a tematika átdolgozásra került. Kimaradtak illetve csökkent az aránya a sztring kezelésnek, a file kezelésnek, a dinamikus memória kezelésnek. Mivel a hallgatók befogadó készsége jellemzően erősen csökkent, így szükségessé vált a gyakorlatokon történő erősebb számonkérés (kis dolgozatok), egyáltalán az órai munka ellenőrzése. Mivel sok esetben még ez sem vezetett megfelelő eredményre, így szigorítani kellett a feladatok, beszámolók pótlásának módját, illetve lehetőségét. Az aláírás végleges megtagadásának bevezetése sem hozott jelentős javulást. A következő években a gyakorlati órákon elhangzó feladatok utólagosan is hozzáférhetők lesznek egy javasolt megoldással együtt. Ezzel várhatóan a később ébredő hallgatók is utolérhetik magukat. ÖSSZEFOGLALÁS A Programozás alapjai című tantárgy az informatikus képzés alapvető fontosságú tárgya. A tantárgy tartalmának kialakítása döntően kihat a hallgatók programozási kompetenciáinak fejlődésére. A nemzetközi példák alapján látható, hogy igen széles határok között változhat a tartalom, kezdve a gyakorlat orientált megközelítésektől egészen az absztrakt algoritmus elemzésekig találhatunk példákat. A hazai felsőoktatási intézményeknél egy homogénebb paletta figyelhető meg. A Miskolci Egyetemen kialakított szakmai tanterv is ehhez az irányzathoz konvergált az utóbbi években.
Napjaink egyik fontos feladata, hogy kisebb szakmai előképzettséggel és motivációval érkező belépő hallgatóknak több esélyt adjunk az igényelt kompetenciák megfelelő elsajátításához. Köszönetnyilvánítás A kutató munka a Miskolci Egyetem stratégiai kutatási területén működő Mechatronikai és Logisztikai Kiválósági Központ keretében valósult meg. This research was (partially) carried out in the framework of the Center of Mechatronics and Logistics at the University of Miskolc. HIVATKOZOTT FORRÁSOK 1. ACM 2013: http://www.acm.org/education/curricula-recommendations 2. MRK 2013: Magyar Rektori Konferencia Informatikai Bizottság szakterület összefoglalója 3. Knuth 1994: Donald E. Knuth: A számítógép programozás művészete (Műszaki Könyvkiadó, 1994. Budapest, ISBN 963-16- 0078-5) Szerzők Kovács László PhD, habil egyetemi docens, tanszékvezető, oktatási dékánhelyettes Miskolci Egyetem, Általános Informatikai Tanszék, 3515 Miskolc- Egyetemváros kovacs@iit.uni-miskolc.hu Wagner György egyetemi tanársegéd Miskolci Egyetem, Általános Informatikai Tanszék, 3515 Miskolc- Egyetemváros wagner@iit.uni-miskolc.hu