Ugrás a fő tartalomra

Problémamegoldó-készség fejlesztése párhuzamos algoritmusokkal

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.
  • 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.
A probléma megoldásakor, amikor az egyes megoldási meneteket összehasonlítjuk, ha azokat párhuzamosság szempontjából vizsgáljuk, akkor megtehetjük aszerint, hogy adatpárhuzamosságról vagy folyamatpárhuzamosságról beszélünk. Előbbi esetében a feladatmegoldás egyes elemeinek kialakításakor az azokban keletkező eredmények szerint történik meg a felbontás, míg a folyamszemlélet esetén az elvégzendő feladatok a döntőek, és ilyenkor az egyes folyamatok között komoly párbeszédre (szinkronizációra) van szükség. Nem véletlen, hogy ez utóbbi esetében az algoritmus dinamikusan alakulhat.

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

Népszerű bejegyzések ezen a blogon

Befejeződött a Fable magyarítása

"Mélyen Albion erdejében fekszik Tölgyvölgy kicsiny falucskája, melyet érintetlenül hagyott az idő múlása, és messze elkerült a fegyverek zaja. Itt élt egy fiú, és a családja. Egy fiú, aki hatalmasságról álmodott. Arról, hogy egyszer hőssé válik. Néha nemes lovagnak képzelte magát... Vagy hatalmas varázslónak. Máskor arról álmodott, hogy gonosz harcossá lesz. De minden álmában, mely a nagyságról szólt, kevés volt az erő, hogy megváltoztathassa a sorsot, mely előtte állt." Persze a történetnek nincs vége. Immár lehet folytatni magyarul. Elkészült a mű, több hónap munkája. Használja mindenki örömmel, hiszen úgy készítettük. Jó játékot! A magyarítás letölthető a Magyarítás Portál ról. ui.: Köszönet mindenkinek, aki segített, hogy elkészülhessen a nagy mű.

Március 15 - Műsorterv

Március idusa minden évben ünnepi műsorok sokaságát hozza magával. Így volt ez az idén is, és valószínűleg így lesz jövőre is. Ahogyan tavaly, most is segédkeztem a Fekete István Általános Iskola ünnepi műsorában, melynek rendezőjéhez és felkészítő tanárához fűznek gyengédebb szálak. Most nagy szerepem volt a műsor forgatókönyvének kialakításában is. Nos, mire való a Google Docs és a YouTube, ha nem arra, hogy az ilyesmit megosszam másokkal is. A dokumentumban található linkek segítségével a külön erre a műsorra vágott háttérfilmek is megtekinthetőek. A dokumentum elérhetősége: https://docs.google.com/document/pub?id=19tVpgBtj79hXI60_VD4cdPljIBndHMMrLXi_sSpGkHs

kooperatív <> kollaboratív

A főiskolai tanulmányaim alatt a napokban előkerült, hogy össze kellett hasonlítani a kooperatív illetve a kollaboratív tanulást. Ha már ott megtettem, akkor miért ne tenném itt közre, hogy ott mit írtam. Mindenek előtt tisztázni kell, mit is értünk a két fogalom alatt. Aki részletesebben kíváncsi, annak javaslom Dorner Helga írását , de azért röviden összefoglalnám: A kollaboráció olyan szervezett, szinkron tevékenység, amely egy adott problémára vonatkozó közös elgondolás kialakítására és fenntartására irányul. Csoporttanulás esetén a csoporttagok kölcsönösen részt vesznek a munkában, amely egy közös probléma megoldására irányul. A munkamegosztás spontán, a kiosztott szerepek cserélődhetnek attól függően, hogy milyen tudáselemmel járulhat hozzá az adott munkafolyamathoz. A kooperatív tanulás folyamata során a tanulás az egyén szintjén valósul meg. A tanulók egymaguk dolgoznak fel egy-egy témát, és a tanulás eredményét, a leszűrt tanulságokat egyenként prezentálják. Csoporttanulás ese