Programozásoktatás máshol – avagy hogy lehet még?
Van az a mondás a spanyolviaszról, miszerint mielőtt sokat agyalsz valamin, először nézz jól körbe, hátha el is tudnád lopni. Ha ezt a zavaros mondatot sikerül kibogoznod, már sejtheted is, mi eme cikk célja: bizony szép hazánkban nem csak nálunk képeznek informatikusokat, és bizony egy informatikusnak programozni tudni kell. Ergo, úgy gondoltuk, hasznos lehet egy kicsit körbenézni a magyar felsőoktatás rokon szakain, hogy is működik ez az egész, mivel kell szembenézni diáktársainknak más felsőoktatási intézményekben. Főiskolák, egyetemek, tanmenetek, ismerős és misztikus tárgynevek, oktatói és hallgatói vélemények, C, Java és a "tárgy" szó korlátlan mennyiségben.
A kutatáshoz a következő módon fogtam hozzá: átvedlettem otthon maradni nagyon nem akaró és vastag pénztárcájú érettségizővé, a http://www.felvi.hu-n rákerestem az "informatika" és "programozó" stringekre, majd kvázi minden további kritika nélkül összeállítottam magamnak egy szép hosszú A-lapot. Összesen 13 hely jött szóba, ebből öt az egyetemi és nyolc a főiskolai képzés. Az oldal a legtöbb karhoz ad egy linket, ahol aztán jöhetett a nyomozás tanmenetek és tárgyleírások után. Sajnos pár helyütt semmi használható hallgatói információra nem bukkantam, alább következnek azok, ahol sikerült valamiféle képet kapni a programozás-tárgyak rendszeréről.
A Nyugat-Magyarországi Egyetem két éve indult gazdasági informatikai szakának tantervét a Műegyetem dolgozta ki a Közgázzal karöltve, ezért többé-kevésbé megfelel a mi tanrendünknek. Programtervezés I–II. és Számítógép labor I–III. tárgyak alkotják a programozásképzés alapját. Az első félévben a hallgatók a C-n keresztül ismerkednek meg a programozással, elsősorban az elméleti alapokra, algoritmizálási alapkérdésekre, nem a C nyelv részleteire koncentrálva. A Programtervezés II. a mi régi Számítógép labor III. tárgyunkra hajaz, az objektum-orientált programozás alapjait fektetik le, és félig "előadás-gyakorlat": a heti négy óra két részből áll össze, mindkettő előadóteremben zajlik, de az egyik felében az elméleti fogalmakra, a másikban a C++ nyelv elemeire koncentrálnak. Ezen két tárgyhoz tartozik labor is, és a harmadik félévben már egy tisztán labortárgy, a Számítógép labor III. keretében ismerkednek meg a hallgatók a Javával. Később Számítástechnikai és informatikai ismeretek fedőnéven még szigorlatozni is kell többek közt a programozás-tárgyak elméleti anyagából is. Csak saját tipp, de úgy gondolom, ha két éve ilyen tanmenetet alkottak meg oktatóink ott, akkor nálunk is valami hasonlóvá fog formálódni a képzés...
A Gábor Dénes Főiskola műszaki informatika szakának hat féléves nappali tagozatára "jelentkeztem". Itt a programozás-vonulatot az egy féléves Programozás alapjai és utána a két féléves Programozási technológia képviseli, majd az ilyen irányultságú szakirányokon a Negyedik generációs rendszerek és pár, egy-egy konkrét témakört boncolgató szaktárgy. A GDF-en bedobják a hallgatót a mélyvízbe: a Programozás alapjai tárgy, ami előfeltételeként csak alapvető Windows- és szövegszerkesztői ismereteket nevez meg, kapásból OOP-val kezd. A programozással való ismerkedés Javában történik, már az első félév témája a moduláris tervezés, az osztályszervezés, sőt, amennyiben a tematikát időrendben kell nézni, a diák előbb találkozik az öröklődés és a láthatóság fogalmával, mint az if-then-else szerkezettel! Köny-
nyítést jelent azért, hogy sok bonyolultabb fogalommal (tipikusan a nálunk PT-ből előfordulókkal) csak elméleti szinten kell tisztában lenniük, az alkalmazásukat nem várják el. A követelmények része gyakorlatilag az összes fontos "klasszikus" programozási alapfogalom, struktúra, módszer (rendezés, láncolt lista, ciklusfajták stb.). Elvárják a JDK és a JBuilder IDE készségszintű ismeretét, használatát. A Programozási technológia tárgy érdekes: megjelenik a második és a harmadik féléves tanmenetben is, eltérő kreditponttal, de csak egy közös tárgyleírás található hozzá. Ez a tárgy kifejezetten gyakorlatias, a Java grafikus és rokon lehetőségeit sajátíttatja el az objektumorientált alapfogalmak kibővítésén (polimorfizmus, interface-ek) túl. Elvárják a vonatkozó beépített Java osztályok ismeretét, a cél, hogy a hallgató képes legyen egyszerűbb grafikus, eseményvezérelt Java alkalmazást létrehozni. Az eztán következő Negyedik generációs rendszerek fő témája a Delphi, valamint a többi rokon Visual * típusú fejlesztőrendszer alapelveinek és az Object Pascalnak az ismertetése, a Delphi készségszintű használata. Szakirányos tárgyként tanulhatnak a C-ről és a C++-ról. Később előforduló tárgyak még a Valósidejű programozás és több, PT-jellegű tárgy (A programozás módszertana, A rendszerfejlesztés módszertana stb.).
A Miskolci Egyetem informatikusai mostohagyermekek: nincs külön karuk, a Gépészmérnöki Kar fennhatósága alá tartoznak. Ennek van pár káros mellékhatása, például, hogy másodév végén szilárdságtant is kell tanulniuk a "műszaki alapismeretek" tárgycsoport keretében. Programozási képzésük gyakorlatilag megegyezik a mienkkel: Programozás alapjai I–II., aztán Objektum-orientált programozás, végül Szoftvertechnológia, és az egyetlen eltérés, az Informatikai rendszerek tervezése. A tárgyak tematikája is szinte betűről betűre megegyezik a mi régi tanmenetünkkel: először strukturált alapelvek és Pascal, aztán C, aztán egy félév alatt OOP C++-szal és a Java alapjai. A két fennmaradt tárgy a PT szétbontása két félévre: tervezési elvek, menedzsment, UML, CASE-eszközök stb. A legszebb, hogy még az ajánlott jegyzetek is egytől egyig ugyanazok, mint amiket nekünk diktáltak le régebben az oktatók. A teljesen analóg tanmenet miatt érdekes lenne tapasztalatokat cserélni, de sajnos e-mailben feltett kérdéseimre mindeddig nem válaszoltak – ha erre később sor kerül, ígérjük, visszatérünk rá.
A Budapesti Műszaki Főiskola Neumann János Informatikai Karán határozottan elkülönülnek a programozás elméletének és gyakorlatának különböző területei, itt nincsenek "Programozás I." vagy hasonló nevű, összefoglaló tárgyak, inkább kisebb, 2–3 kreditpontos céltárgyakat tartanak. Az első félévben Algoritmus elmélet alapjai, Imperatív programozás és Bevezetés az informatikába, a második félévben Programozási paradigmák és technikák, Objektum-orientált programozás és Vizuális (eseményvezérelt) programozás, a harmadik félévben A webprogramozás alapjai, Deklaratív programozás, Szoftvertervezés és -technológia ill. Haladó algoritmusok, végül még SQL az Adatbázisok tárgy keretében – körülbelül ezek alkotják a programozás modult. Az oktatás alapvetően a Borland fejlesztőeszközei köré épül: a Pascal g 'Object Pascal' g Delphi vonulat segítségével mutatják be a strukturált, az objektum-orientált és a "negyedik generációs" eseményvezérelt, grafikus fejlesztőeszközök világát, felhasználva a közös alapnyelv előnyeit. Dr. Kotsis Domokos oktatási igazgatóhelyettes megfogalmazásában: "Így teljesül az, hogy a hallgatóknak csak egyféle környezet megtanulására kell időt és energiát fordítaniuk, ugyanakkor a programfejlesztés szinte valamennyi oldalával megismerkedhetnek. (A Delphi lehetőséget ad az UML-ben tervezett folyamatok lefordítására és futtatására is.)". Más törekvésű, elképzelésű nyelvek megismerését szolgálja ezek mellett a kötelezően elsajátítandó objektum-orientált C# és Java nyelvek oktatása. Választható tárgyként jelenik meg a C++ és különböző fejlesztőkörnyezetei, az XML és az SQL gyakorlati megvalósításai (MySQL). Ezen tanterv elég "friss fejlesztés", 2002-ben, a kreditrendszerre való áttéréskor tervezték meg, mindamellett az igazgatóhelyettes úr elmondása szerint az átalakítás "inkább evolúciós, mint revolúciós" volt. Érdekes tény, hogy az 1987-ben indult műszaki informatikai szakról az országban először bocsátottak ki ilyen irányú szakembereket – hosszabb képzési időnk miatt bizony minket is megelőzve. Összességében a tanmenetük kifejezetten koncepciózusnak és nagyon összeszedettnek tűnik, és ezzel a véleménnyemmel nem vagyok egyedül: mint arról Kotsis úr beszámolt, 2003 tavaszán a BMF-NIK-AII fórumot szervezett társintézetek és a végzett hallgatókat fogadó intézmények, cégek bevonásával, és ott tantervük nem kapott komoly kritikát, a hozzászólók megerősítették őket abban, hogy helyes úton járnak.
A Szegedi Tudományegyetem Természettudományi Kara is tart egy tíz féléves műszaki informatikai képzést. A programozási "lánc" a Programozás alapjai, a Programozás I–II., Programozási nyelvek, Rendszerfejlesztés I–II., Fejlett programozás I–II. tárgyakból áll össze. A nyolckredites Programozás alapjaiban a Pascal és a C kerül elő elsőként. Eztán megfordul a nálunk megszokott sorrend: az ugyanennyit érő Programozás I.-ben az OOP alapjait a Javán keresztül ismerik meg a hallgatók, és az ötkredites Programozás II.-ben jön a – szerintem – nehezen megkerülhető C++. Utána következik Programozási nyelvek néven egy "általános összefoglaló és ismeretbővítő" tárgy, és még most sem lehet szép módszeresen elfelejteni programozni: jön öt-öt kreditért a Rendszerfejlesztés I–II. (projektmunka, kb. a mi Számítógép labor 4-ünk), majd Fejlett programozás I–II. néven advanced C++ és Java. Benyomásom szerint Szegeden arányaiban sokkal nagyobb hangsúlyt helyeznek a programozásra, mint a VIK-en – persze lehet, hogy csak a folyamatosan és sok kreditben megjelenő programozási tárgyak (amikbe gyakorlatként beletartoznak a nálunk külön tárgyként adminisztrált, külön kreditet érő laborok is) éreztetik így velem.
A Pécsi Tudományegyetem Pollack Mihály Műszaki Főiskolai Karán hat féléves műszakiinformatikus-képzés folyik. Ebben a programozás oktatását a Programtervezés, Programozás I–II. (és az ezekhez kapcsolódó Számítástechnika és programtervezés szigorlat), majd később az Információs rendszerek fejlesztése és a Rendszerfejlesztési technológiák tárgyak képviselik. Ha a hallgató úgy alakítja tantervét, jó pár programozási tárgy jelenik még meg kötelezően választható modulokban és szakirányos tárgyakban. Az oktatás algoritmuselméleti alapfogalmakkal, alapfeladatokkal kezdődik, a Neten fellelhető leírás tanulsága szerint pszeudokód használatával, ebből térnek át a C nyelvre (konkrétan a Borland C++-ra, viszont annak objektum-orientált vonásait még nem hozzák elő). A második félévben tovább mennek a C nyelv rejtelmeiben: rekurzió, malloc, láncolt listák és a többiek, és ennek a tárgynak a végén kap helyet az objektum-orientált programozás megalapozása. Az Információs rendszerek fejlesztése a mi PT-nk egy kicsit gyakorlatiasabb felfogásban, vele párhuzamosan fut a gyakorlat, ahol egy konkrét fejlesztőeszközzel ismerkednek meg a hallgatók, majd hoznak létre vele egy önálló alkalmazást. A PT-anyag másik felét a később megjelenő Rendszerfejlesztési technológiák tárgy fedi le, ehhez is tartozik önálló szoftverfejlesztést feladatul kitűző gyakorlat.
A végére hagytam a szakot, akikről mindig azt mondjuk nyílt napokon, hogy ők tudnak igazán programozni, mi csak tanulgatjuk: a Progmat, pontosabban az Eötvös Lóránd Tudományegyetem Informatikai Karán a Programtervező matematikus szak. Őszinte leszek, komolyan megrémültem pár tárgytematika elolvasásakor. Ezek ilyeneket tudnak? Dark magic J. Az első félévben a számunkra érdekes tárgy a Bevezetés a programozásba. Ettől rettentem meg először: egy félévnyi "programozás-elmélet" (nem teljesen AlgEl-ről van szó) négy kreditért, ahogy a tematikából kihámoztam, konkrét programnyelv nélkül, feltehetőleg végig pszeudokódban. A második félévben jön a Logikai alapok a programozáshoz és a Programozási módszertan. Az első nagyjából a mi MaLo-nk, bár volt pár ismeretlen fogalom a tárgyleírásban, valószínűleg sokkal részletesebben, elméletibben tárgyalják a témát. A Programozási módszertan programozási technikák, tételek ismertetése könyörtelen módszerességgel, MODULA és ADA (elborult rendszerprogramozási nyelvek atomreaktorokhoz, cirkálórakétákhoz, ilyesmikhez J) segítségével. Tehát az első tényleges programnyelv, amivel a progmatos diák szembesül, az a MODULA. Ez ijesztő. A harmadik félévben folytatódik a Programozási módszertan, körülbelül hasonló jellegű célkitűzésekkel, és jön mellé az Algoritmusok és adatszerkezetek, ez utóbbi kb. megfeleltethető egy sokkal matematikusabb AlgEl-nek. Itt kezdődik el a két féléves Programozási nyelvek tárgy, aminek az első felében megismerkednek részletesebben az Ada95 nyelvvel. A negyedik félévben jön a Programozás technológiája, ami nevében és tartalmában is ugyanaz, mint nálunk, és (másodév végére!) a Programozási nyelvek II.-ben megtanulják a C-t. Hátravan még a Párhuzamos programozás (neve magáért beszél), és a két féléves Fordítóprogramok (assembly, optimalizálás, bithegesztés), a Nagyprogram készítés (sehol nem találtam, ez mit is takarhat pontosan), meg persze a szigorlatok. Huh. Itt lesznek a Programozók. Nagy P-vel.
Nem célunk bármiféle következtetést levonni, bármelyik tanmenetet ideálisnak kikiáltani. Ebből a rengeteg adatból egyvalami mindenesetre kiviláglik: azonos problémákra nagyon eltérő megoldásokat lehet adni, azonos célokat teljesen más utakon is el lehet érni. Mindegyik metódus mögött érezni a vezérlő elvet, mindet tökéletesen meg lehet indokolni. Van létjogosultsága az elvekkel kezdeni és van a technikai részével, érdemes lehet Javával OOP-t tanítani és ugyanúgy C++-szal, jó lehet Pascallal "ismerkedni" és jó C-vel, és még hozhatnám az ellentétpárokat. Hogy akkor mégis melyik a legjobb? Hadd legyek picit profán: fene tudja. Majd meglátjuk, a mi módszerünk beválik-e.
gyp