A mindennapi életben rengeteg feladat áll előttünk. Ezeket szinte képtelenség lenne megoldanunk úgy, ha azokat egymás után szeretnénk végrehajtani. Kénytelenek vagyunk párhuzamosítani az elvégzendő munkafeladatokat, és azokat helyesen ütemeznünk kell.
A számítógépes világban a programok nagy része már párhuzamosan fut. Ezek algoritmikus működésének a megértése nagymértékben elősegítheti a problémamegoldó készségek fejlesztését, az algoritmikus gondolkodás fejlődésével. Körülbelül a 70-es években jöttek rá, hogy egy feladat megoldását nem csak szekvenciális módon lehet meghatározni. Bonyolultabb feladatok esetén azok komplexitását párhuzamos feldolgozással lehet hatékonyabban megoldani. Mind az algoritmusok terén, mind a programozási nyelveknél megkezdődtek a párhuzamos feldolgozást lehetővé tevő munkálatok. A nyelvek tervezői számára az egyik legfontosabb szempont volt a szinkronizáció kidolgozása. A párhuzamos programozás napjainkra különösen fontossá vált, hiszen a mostani processzorokban dolgozó többmagos feldolgozó egységek valódi párhuzamosságot tesznek lehető.
Ugyanakkor miért ne feltételezhetnénk, hogy ennek mintájára gondolkodásunk is párhuzamosítható. Az algoritmikus gondolkodás során sokszor a szekvenciális tervezés készségét fejlesztjük, de bizonyos eredményesség fölött ez a folytonosság párhuzamosítható, így fejlesztve tovább a gondolkodás eme típusát az egyénen belül.
Az algoritmikus gondolkodás átszövi mindennapjainkat. Számtalan feladat előtt állhatunk, amelyet valamilyen módon meg kell oldanunk, és a megoldás lépéseire módszereket keresünk, algoritmikusan gondolkodunk. A tanulás során a problémafelvető tanulás módszerével az algoritmikus gondolkodás készsége fejleszthető. Nem véletlen, hogy a programozás oktatásakor nem elsősorban az alkalmazásalkotás a cél, hanem az algoritmikus gondolkodás, a problémamegoldó készség fejlesztése. Az algoritmusok elsajátításával a tanuló olyan megismerési, ismeretszerzési műveletek birtokába jut, amelyek elősegítik az eredményes önálló tanulást, a gondolkodás fejlődését.
Amennyiben egy algoritmusra úgy tekintünk, mint egy gondolkodó gépre, amely a szimbólumok megfelelő összekapcsolásával műveleteket végez, akkor láthatjuk, hogy egy adott rendszer szerinti összekapcsolását kapjuk a szimbólumoknak. Amennyiben mind a szimbólumkészletet, mind az azokat összekapcsoló szabályrendszert megfelelően választjuk meg, akkor a szimbólumok által helyettesített dolgok úgy kezelhetők, mintha azok maguk a dolgok lennének.
A fentiek alapján tehát, a párhuzamos algoritmussal leírt gondolatmenet, amelyben a programozási nyelv egyfajta szimbólumkészlettel bír, teljesen megfeleltethető a valóságnak, azaz egy valós problémának a megoldásmenetének.
Egy programozói feladat esetén először előkerült a problémaszituáció, amely a gondolkodás tevékenységét váltja ki. Ebben az esetben megfelelő motiváció esetén a tudáshiányos állapot megszűntetésére igyekszik késztetni a tanulót. A legtöbb feladat megoldására többféle megoldási menet is adódik, de egy adott megoldási módon belül is lehetnek eltérések. Ezek az eltérések a problémaszituáció és a megoldás közötti többféle gondolatmenetet reprezentálják. Az egyes megoldások közel sem rendelkeznek azonos hatékonysággal, tehát ezek a gondolatmenetek egyáltalán nem egyenértékűek egymással.
Problémamegoldás tehát a gondolkodási tevékenység központi funkciójának tekinthető.
Tökéletesen adódik tehát az algoritmikus gondolkodás menete, azaz a gondolatmenet elemekre bontása (gondolkodás műveletek), melyek felismerése és végrehajtása a tanuló gondolkodását igényli. A tanuló gondolkodása azonban bizonyos alapokra kell, hogy támaszkodjon.
Az alábbiak szükségesek a gondolkodási menet végrehajtásához.
Az alábbi ábra azt próbálja bemutatni ezek a tevékenységek milyen párhuzamos gondolkodási folyamattal valósíthatóak meg.
Az egyes fázisok párhuzamosíthatóak, de a párhuzamos elemek között is kell lenni egyfajta kapcsolatnak. A fenti sor végére jutva az adott problématéren belül történő tudásszerző gondolkodás legmagasabb szintjén mozgunk.
A probléma megoldásakor, ahogyan fentebb láttuk, az egyes gondolkodási meneteket alkalmazzuk. Ezek során azonban számos olyan elem előkerül, amelyen belül valamilyen algoritmus szerint végezzük az adott művelet illetve a művelet végeztével egy algoritmust kapunk a feladat megoldásához.
A feladat felbontásakor mindig meg kell vizsgálnunk a probléma megoldása nem-e bontható részfeladatokra, és az adott részfeladatok párhuzamosíthatóak-e.
Analogikus szintre jutva az addigi párhuzamos algoritmus minták ismételt (újrafelhasznált) alkalmazása történik.
Egy kezdő és egy szakértő közötti probléma-megoldásbeli különbség éppen abban nyilvánul meg, hogy a szakértők egyrészt gyorsabban, másrészt teljesebb reprezentációt létrehozva, míg a kezdők szaktudás hiányában általános, szakterülettől független stratégiák alkalmazása által oldják, illetve kísérlik megoldani a problémákat. A szakértők átlátják a problémát, míg a kezdők a felszíni jellemzők alapján próbálják meg a korábban tanult ismereteikből kiszűrni a megoldáshoz releváns módon kapcsolódó ismereteket. Feltételezhető tehát, hogy a szakértő problémamegoldó készsége jelentősebb a kezdőéhez képes, sőt, már a jártasság szintjén jár az elsajátított ismeretekben. Ugyanakkor feltételezhető az is, hogy a szakértő probléma megoldási készsége fejlettebb algoritmikus gondolkodásából ered, amelyben a mind a gondolkodás folyamatában, mind pedig az egyes folyamatelemekben utolérhető a párhuzamosság.
Minden egyes algoritmikus problémamegoldás esetén különösen fontos reproduktivitás és produktivitás kérdése. A fenti példák alapján a tanulók megkapják az általános produktivitáshoz szükséges ismereteket, és a bemutatott példák segítségével a reproduktív gondolkodás is elősegíthető.
A párhuzamos algoritmusok ugyanakkor a gondolkodás egy másik síkját is megnyitják. Annak a lehetőségét, hogy életszerű helyzetben a képesek legyünk felismerni a párhuzamosan megoldható feladatokat, és azokat képesek legyünk megfelelő módon szervezni.
A fentiek egy beadott dolgozat részlete, amely a párhuzamos programozás tárgy alapján okoskodtam össze. Ehhez a bejegyzéshez innen "nyúltam" gondolatokat, infókat:
A számítógépes világban a programok nagy része már párhuzamosan fut. Ezek algoritmikus működésének a megértése nagymértékben elősegítheti a problémamegoldó készségek fejlesztését, az algoritmikus gondolkodás fejlődésével. Körülbelül a 70-es években jöttek rá, hogy egy feladat megoldását nem csak szekvenciális módon lehet meghatározni. Bonyolultabb feladatok esetén azok komplexitását párhuzamos feldolgozással lehet hatékonyabban megoldani. Mind az algoritmusok terén, mind a programozási nyelveknél megkezdődtek a párhuzamos feldolgozást lehetővé tevő munkálatok. A nyelvek tervezői számára az egyik legfontosabb szempont volt a szinkronizáció kidolgozása. A párhuzamos programozás napjainkra különösen fontossá vált, hiszen a mostani processzorokban dolgozó többmagos feldolgozó egységek valódi párhuzamosságot tesznek lehető.
Ugyanakkor miért ne feltételezhetnénk, hogy ennek mintájára gondolkodásunk is párhuzamosítható. Az algoritmikus gondolkodás során sokszor a szekvenciális tervezés készségét fejlesztjük, de bizonyos eredményesség fölött ez a folytonosság párhuzamosítható, így fejlesztve tovább a gondolkodás eme típusát az egyénen belül.
Az algoritmikus gondolkodás átszövi mindennapjainkat. Számtalan feladat előtt állhatunk, amelyet valamilyen módon meg kell oldanunk, és a megoldás lépéseire módszereket keresünk, algoritmikusan gondolkodunk. A tanulás során a problémafelvető tanulás módszerével az algoritmikus gondolkodás készsége fejleszthető. Nem véletlen, hogy a programozás oktatásakor nem elsősorban az alkalmazásalkotás a cél, hanem az algoritmikus gondolkodás, a problémamegoldó készség fejlesztése. Az algoritmusok elsajátításával a tanuló olyan megismerési, ismeretszerzési műveletek birtokába jut, amelyek elősegítik az eredményes önálló tanulást, a gondolkodás fejlődését.
Amennyiben egy algoritmusra úgy tekintünk, mint egy gondolkodó gépre, amely a szimbólumok megfelelő összekapcsolásával műveleteket végez, akkor láthatjuk, hogy egy adott rendszer szerinti összekapcsolását kapjuk a szimbólumoknak. Amennyiben mind a szimbólumkészletet, mind az azokat összekapcsoló szabályrendszert megfelelően választjuk meg, akkor a szimbólumok által helyettesített dolgok úgy kezelhetők, mintha azok maguk a dolgok lennének.
A fentiek alapján tehát, a párhuzamos algoritmussal leírt gondolatmenet, amelyben a programozási nyelv egyfajta szimbólumkészlettel bír, teljesen megfeleltethető a valóságnak, azaz egy valós problémának a megoldásmenetének.
Egy programozói feladat esetén először előkerült a problémaszituáció, amely a gondolkodás tevékenységét váltja ki. Ebben az esetben megfelelő motiváció esetén a tudáshiányos állapot megszűntetésére igyekszik késztetni a tanulót. A legtöbb feladat megoldására többféle megoldási menet is adódik, de egy adott megoldási módon belül is lehetnek eltérések. Ezek az eltérések a problémaszituáció és a megoldás közötti többféle gondolatmenetet reprezentálják. Az egyes megoldások közel sem rendelkeznek azonos hatékonysággal, tehát ezek a gondolatmenetek egyáltalán nem egyenértékűek egymással.
Problémamegoldás tehát a gondolkodási tevékenység központi funkciójának tekinthető.
Tökéletesen adódik tehát az algoritmikus gondolkodás menete, azaz a gondolatmenet elemekre bontása (gondolkodás műveletek), melyek felismerése és végrehajtása a tanuló gondolkodását igényli. A tanuló gondolkodása azonban bizonyos alapokra kell, hogy támaszkodjon.
Az alábbiak szükségesek a gondolkodási menet végrehajtásához.
- Analízis: Egy egész adott szempontok szerinti alkotórészekre bontása.
- Rendezés: A problémateret alkotó elemi műveletek teljes körű feltárás.
- Absztrakció: Lényegi elemek kiemelése, kategóriák alkotása.
- Összehasonlítás, összefüggések megértése: Két megoldási folyamat azonossága alapján összefüggések megértése.
- Szintézis: A problémák során szerzett tudás elemeinek felhasználásával új tudás birtokába jutás.
- Általánosítás: Egyedi jelenségek általános érvényű jegyeinek kiemelésére törekszik.
- Konkretizálás: Az általános ítélet felől közelítünk a részítélet felé.
- Analógia: Korábban tanult relációk felismerése által következtethetünk egy adott jelenséghez tartozó másik jelenségre.
Az alábbi ábra azt próbálja bemutatni ezek a tevékenységek milyen párhuzamos gondolkodási folyamattal valósíthatóak meg.
Az egyes fázisok párhuzamosíthatóak, de a párhuzamos elemek között is kell lenni egyfajta kapcsolatnak. A fenti sor végére jutva az adott problématéren belül történő tudásszerző gondolkodás legmagasabb szintjén mozgunk.
A probléma megoldásakor, ahogyan fentebb láttuk, az egyes gondolkodási meneteket alkalmazzuk. Ezek során azonban számos olyan elem előkerül, amelyen belül valamilyen algoritmus szerint végezzük az adott művelet illetve a művelet végeztével egy algoritmust kapunk a feladat megoldásához.
A feladat felbontásakor mindig meg kell vizsgálnunk a probléma megoldása nem-e bontható részfeladatokra, és az adott részfeladatok párhuzamosíthatóak-e.
- Triviálisan szétbontható feladatok: Az egyes feladatrészeknek semmi közük sincs egymáshoz, egymástól teljesen függetlenül megoldhatóak.
- Funkcionálisan szétbontható feladatok: Az egyes részfolyamatok függhetnek egy vagy több másik (előtte esetleg utána következő) folyamat eredményétől.
- Adatok szerint felbontható feladatok: Ugyanazt a műveletet kell végrehajtani egy adathalmaz minden elemén.
Analogikus szintre jutva az addigi párhuzamos algoritmus minták ismételt (újrafelhasznált) alkalmazása történik.
Egy kezdő és egy szakértő közötti probléma-megoldásbeli különbség éppen abban nyilvánul meg, hogy a szakértők egyrészt gyorsabban, másrészt teljesebb reprezentációt létrehozva, míg a kezdők szaktudás hiányában általános, szakterülettől független stratégiák alkalmazása által oldják, illetve kísérlik megoldani a problémákat. A szakértők átlátják a problémát, míg a kezdők a felszíni jellemzők alapján próbálják meg a korábban tanult ismereteikből kiszűrni a megoldáshoz releváns módon kapcsolódó ismereteket. Feltételezhető tehát, hogy a szakértő problémamegoldó készsége jelentősebb a kezdőéhez képes, sőt, már a jártasság szintjén jár az elsajátított ismeretekben. Ugyanakkor feltételezhető az is, hogy a szakértő probléma megoldási készsége fejlettebb algoritmikus gondolkodásából ered, amelyben a mind a gondolkodás folyamatában, mind pedig az egyes folyamatelemekben utolérhető a párhuzamosság.
Minden egyes algoritmikus problémamegoldás esetén különösen fontos reproduktivitás és produktivitás kérdése. A fenti példák alapján a tanulók megkapják az általános produktivitáshoz szükséges ismereteket, és a bemutatott példák segítségével a reproduktív gondolkodás is elősegíthető.
A párhuzamos algoritmusok ugyanakkor a gondolkodás egy másik síkját is megnyitják. Annak a lehetőségét, hogy életszerű helyzetben a képesek legyünk felismerni a párhuzamosan megoldható feladatokat, és azokat képesek legyünk megfelelő módon szervezni.
A fentiek egy beadott dolgozat részlete, amely a párhuzamos programozás tárgy alapján okoskodtam össze. Ehhez a bejegyzéshez innen "nyúltam" gondolatokat, infókat:
- Bertalanffy, Ludwig von: …ám az emberről semmit sem tudunk. (Robots, Men and Minds) Budapest, 1991, Közgazdasági és Jogi Könyvkiadó
- Frohner Ákos: Párhuzamos programozást támogató nyelvi eszközök összehasonlítása, Budapest, 2001, ELTE dolgozat
- Lénárd Ferenc: A problémamegoldó gondolkodás, Budapest, 1978, Akadémiai kiadó
- Nyékyné Gaizler Judit(szerk): Java 2 Útikalauz Programozóknak 1.3, Budapest, 2001, ELTE TTK Hallgatói Alapítvány
- Pentelényi Pál: Az algoritmikus szemléletmód kialakítása és fejlesztése a tanítás-tanulás folyamatban, Budapest, 1999, BDMF Tanárképző Tanszék
- Tóth Péter: Gondolkodásfejlesztés az informatika oktatásában Budapest, 2004, BMF Mérnökpedagógiai Intézet
Megjegyzések