420 likes | 570 Views
A programkészítés didaktikája. Szlávi Péter szlavi@ludens.elte.hu http://people.inf.elte.hu/szlavi 2004-2013. Tartalom. Elöljáróban – célok Három alapelv – a programkészítés folyamata ürügyén A programozás gondolkozási eszköztára A gondolkozási eszközök használat közben Absztrakció
E N D
A programkészítés didaktikája Szlávi Péter szlavi@ludens.elte.hu http://people.inf.elte.hu/szlavi 2004-2013.
Tartalom • Elöljáróban – célok • Három alapelv – a programkészítés folyamata ürügyén • A programozás gondolkozási eszköztára • A gondolkozási eszközök használat közben • Absztrakció • Lexikalitás kontra kreativitás • Programozás – modellezés A programkészítés didaktikája
1. Elöljáróban – célok Értelmező szótár: „didaktika – oktatástan; a neveléstudomány-nak az oktatás elméletével és módszertanával foglalkozó ága”. • Mi az, hogy didaktika? • Elsősorban a közoktatásbeli programkészítés-ről lesz szó. • Neumann-i (algoritmikus) nyelvekhez kap-csolódó didaktika (elmélet ← módszertan). • (Bár csak) egy-modulos programtermék, • a programozás lényegi részeit érinti(nem térek ki az adatabsztrakcióra). A programfejlesztés didaktikája
2. Három alapelv – a programkészítés folyamata ürügyén Pólyai megközelítés: kérdés-középpontú. Didaktika: • Pólyai elv: „jól kérdez jól analizál jól »problémameg-old«” A programfejlesztés didaktikája
2. Három alapelv – a programkészítés folyamata ürügyén Megjegyzések a folyamathoz: • iteratív • átfedők a lépések Megjegyzések a didaktikához: • a lépések „vegytiszta” tárgyalása • „Madártávlatból közelí-tés” alapelve – célja a tudatosítás • „Keretbe foglalás” alapelv: bevezetés + összefoglalás A programfejlesztés didaktikája
2. Három alapelv – a programkészítés folyamata ürügyén Amire koncentrálunk a továbbiakban… A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára • A programozás során a feladat egyre finomabbmo-delljeinek sorozatát hozzuk létre, amiben addig kell eljutni, aholmár a választott programozási nyelv szókincsejelenti a modell alapját. • Modellezés = „modellek gyártása”: konkrét(feladat)absztrakt(feladat/megoldás)konkrét(megoldás) • Gondolkozási műveletek: • Nyelvi absztrakció • Analogikus gondolkozás • Algoritmikus absztrakció • Információ-konverzió • Dekompozíció, szuperpozíció • Intuíció • Variáció A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció Nyelv? Nyelv=szókincs (=absztrakció)+nyelvtan(=ab-sztrakció) • Kiinduló pontok: • „bármely nyelv absztrakció” • a programozás = modell-sorozat (a feladattól a kódig) • modell specifikus nyelv sajátos szókinccsel, nyelvtannal Mennyire kell „bírni” az egyes nyelveket? • Modell-nyelvek szinterei: • Feladatmegfogalmazás • Tervezés • Kódolás Ezt a nyelvet „beszélni” kell, nem feltétlenül „írni”. Azaz a formalizáltság kezdetben nem lényeges; csak a használat tudatossága. A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció Pólyától vett idézet:http://aries.ektf.hu/~emod/bevgraf/gond.pdf(Kovács Emőd közvetítésével) Specifikálás – mint „nyelvi absztrahálás”.(A korábbi dián S1 séma-követés.) A lényegkiszűrése – mik • a kiinduló adatok, • a meghatározandók (eredményadatok), • az összefüggések a kiinduló adatok között – szerkezeti és tartalmi viszonyaik • a kiinduló és az eredményadatok egymáshoz való viszonya – tartalmi kapcsolataik? Gondolati szerkezet: „embrionális” nyelvtan (alanyokkal=be/ki, állítmányokkal)nyelvtan A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció • A következő absztrakciós lépés:a konkrét adatok adathalmazokká lényegítése. • Nyelvi absztrakció(s keret) – támpontok:néhány alaphalmazra visszavezetés, néhány halmazkonstrukció felhasználásával. Szókincs-bővitési szabályok (nyelvtan) Szókincs • Alaphalmazok: Z (Egészek) R (Valósak) K (Karakterek) S (Szövegek)… • Halmazkonstrukciók: (Egyesítés) (Direktszorzás) * (Iterálás) = (Definiálás) A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció • Chomsky [Ch/15] értelemben már a specifikáció is nyelv. Ui.:„… nyelvnek tekintem a mondatok valamely (véges vagy végtelen) halmazát; minden egyes mondat véges hosszúságú, és elemek véges halmazából épül fel. … valamely formalizált matematikai rend-szer „mondatai” is nyelvnek tekinthetők.” • E nyelv „szintaktikájának” ismerete csupán annyira feltétele a nyelv ismeretének, amennyire egy termé-szetes nyelv esetében az írás (a „formális” nyelvtan) ismerete (v.ö. specifikációs analfabetizmus). … a középiskolás progra-mozó is legyen képes vála-szolni a kérdésekre: mi a be-menet?, mi a kimenet? … A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció Tervezés – mint „nyelvi absztrahálás”.(A korábbi dián S2.) • A tervezés valamely „szabványos” leírónyelven tör-ténik, pl.: • blokkdiagram • struktogram • pszeudókód • stb. A lényegük: alkalmasak a jellegzetes és elegendő (tevé-kenység-)struktúrák lejegyzésére, és kellően rugalma-sak, de egyértelműek. } „rajzos” nyelv „szöveges” nyelv A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció A tervezés során alkalmazott nyelvi absztrakciós szintek: • Utasítás-szint + Finomítás-szint [l. Dekompozíciónál!] A nyelv szavai = utasítások + finomításokA nyelv struktúrai = előre definiáltak + finomításdefiníciók • Programozási tételek szintje A nyelv szavai = utasítás-szint A nyelv struktúrái = tétel-finomítások + utasítás-szint • Modularizálás szintjeA nyelv szavai = programozási tételek szintjeA nyelv struktúrai = programozási tételek szintje + modulok A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció • Ad hoc (nem rögzített szintaxisú) grafikus nyelvi prak-tikák is („margószéli firkák”), amelyeket a pillanat prob-lémája ihlet. Pl. a beillesztéses rendezés egy lényegi lépéséhez: A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció • Érdemes itt Pólya Györgyöt [PGyG/71] idézni:„Az ilyen típusú feladat beható elemzését azzal kezdjük, hogy felrajzolunk egy olyan ábrát, amely tartalmazza az ismeretlent és az adatokat, mégpedig olyan elrendezésben, ahogy azt a feladat kikötése előírja. Ahhoz, hogy a feladatot világosan megértsük, minden adatot, a kikötés minden egyes részét külön-külön szem-ügyre kell vennünk; akkor azután egyetlen képbe egyesítjük az összes részleteket, a kikötést mint egészet vizsgáljuk meg, és meg-próbáljuk együtt látni a feladat által előírt különféle összefüggése-ket. Mindezeket a részleteket papirosra felrajzolt ábra nélkül aligha tudnánk kézben tartani, szétválasztani és ismét összerak-ni.” A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – nyelvi absztrakció Kódolás – mint „nyelvi absztrahálás”.(A korábbi dián S4.) Abszurd állítás: itt már kevés nyelvi absztrakcióra van szükség.(Feltétel: a helyes programozási stílus, azaz, ha az algoritmus kész.) Ok: elegendőek jól kidolgozott kódolási szabályok, amelyek mellett „kvázi” mechanikus az átírás. Itt válik fontossá a választott programozási nyelv „tipikussága” = közelisége az algoritmikus nyelvhez A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – analógia • Az analógiás feladatmegoldás sémája: • rokon feladat keresés + • kapcsolódás felderítés + • rokon feladat megoldásának (=rokon megoldás) felidézése + • rokon megoldás aktualizálása. • Rokon feladat: azonos a problémafelvetés(absztrahálás útján ilyenek gyűjthetők, csoportosíthatók) • Rokon megoldás: szerkezetileg azonos algoritmus(algoritmikus nyelvi elemek és struktúrák; l. nyelvi absztr.) A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – analógia • Módszertani kérdés: az analóg feladat-, megoldásbázis • saját tapasztalatokon alapuljon-e, vagy • irányított (preparált) legyen? • Mérlegelés: irányított kevesebb időigény (lexikális) saját tapasztalatokon alapuló mélyebb rögzülés (kreativitást fejlesztő) Az idő szűke kreativitás fejlődése. A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – algoritmikus absztrakció • Algoritmikus absztrakció –gondolati (nem nyelvi!)absztrahálódás folyamata: • konkrét feladatokhoz konkrét programmegoldások • absztrakt utasítás-/adatfajták (szekv.,elág.,cik./típus) • ezek „rekonkretizálódása” • „konkretizálódott” utasítás-/adatfajtákkal absztrakt program-sablonok/típuskonstrukciók (programozási tételek/modulok) • ezek „rekonkretizálódása” • „konkretizálódott” tételek absztrahálódása adatszinten (tömbsorozat/halmaz), ill. leképezéssé lényegülése, ill. … • alkalmazás: tételkombinálás=függvénykombinálás … A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – algoritmikus absztrakció • Elemi algoritmikus absztrakcióhoz: • „felülről lefelé tervezés” + „lépésenkénti finomítás” elve finomítás • finomítás = algoritmikus nyelv bővítése (gondolati síkon) • a finomítás és a kezdő programozó(„kódrövidítő” szerep, csak később ébred rá: paraméterezhetőség „absztrakciós eszköz”) absztrahálás absztrahálás • Még egy absztrakció:a „feladatáltalánosítás” elve („belső” paraméterek definiálása: konstansok, típusok) A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – algoritmikus absztrakció • Magasabb szintű absztrakcióhoz – rokonfeladatok absztrakciója: a programozási tételek(absztrakt feladat + absztrakt algoritmus + bizonyítás; l. példa) Praktikusan: ezek memóriakímélők • Megjegyzések: • A tételek fejsorának problémamegoldást segítő szerepe: „illesztésimintaként” szolgál. (Ez már több, mint csak „beszélt” nyelvismeret.) • „ NN, XH*” vagy „NN, XHN”? • Sorozat-nyelv vagy halmaz-nyelv? Az utóbbi kettő a specifikáció és a tervezés kapcsolatát feszegetik. A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – dekompozíció, szuperpozíció • A dekomponálás:a komplex probléma elemibb problémák együttesére bontása. • A szuperponálás: a komplex probléma elemi feladatokból való felépítése. • Dekomponálás = „felülről lefelé” tervezés;szuperponálás = „alulról felfelé” tervezés. programfejlesztés eszközfejlesztés • A „felülről lefelé” tervezés = „oszd meg és uralkodj” elv. • Pszichológusok szerint: 5-7 sémát tud az ember „egyszerre” kezelni. (Itt a „séma” = „programegység”.) A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – információ-konverzió • Cél: minél több információt kinyerni az előző programkészítési lépésben kapottból. • Kapcsolatok: Specifikáció adatleírás (l. példa) Specifikáció algoritmus – programozási tételek Adatleírás a kód adatdeklarációja – kódtranszformáció Algoritmus kódtörzs – program-, kódtranszformáció Specifikáció kódtörzs – kódtranszformáció Csak „beszélt” esetben a feladatszöveg (kérdőszók) A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – információ-konverzió A programfejlesztés didaktikája
kódolás kódolás Interface Algoritmus Jelölések: Ellenőrizendő vagy generálandó Szabályozott kapcsolat Az árnyék 1-nél nagyobb multiplicitásra utal. 3. A programozás gondolkozási eszköztára – információ-konverzió TípusAlgebrai TípusExport TípusModul ? ? ? ? ? ? ? ? ? ? ? ? Adat adat-szerkezeti döntés adat-szerkezeti döntés Típus/Adat-környezet Típus/Adat-környezet Adatok=Állapottér Tevékenységek=Állapottér-transzformáció Spec. Feladat
3. A programozás gondolkozási eszköztára – intuíció Lénárd Ferenc szerint [L/85] • Az intuíció lényege: „…intuícióról akkor beszélhetünk, ha a gondolkodó úgy jut valamely igazsághoz, hogy a hozzávezető lépések számára nem tudatosak. … Intuíció csak annál léphet fel, aki a problémával intenzí-ven foglalkozik, és ezért rendelkezik mindazokkal az isme-retekkel, amelyek a probléma megoldásához szükségesek.” Lagrange: „… ilyen … csak azzal történik, aki ezt megérdemli…” [PGyI/71] A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – intuíció • 1. példa:Egy mágnesszalag legfeljebb egymillió húszbites egész számot tartalmaz véletlenszerű sorrendben. Keresnünk kell egy olyan húszbites egész számot, ami nem szerepel a szalagon… • Probléma:kicsi a memória – „minden 20 biteshez 1 bit” … • 1. megoldás:Kiválasztás(i:0..220-1,Eldöntés(File(j),j=i?)) borzasztó sok „fájlból olvasás” (≤220*106≈1012 elemolvasás) 220 = 1 048 576 A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – intuíció • 2. megoldás:„halovány ötlet” a logaritmikus keresésprobléma: nem rendezett és nem közvetlen elérésű • 3. megoldás: „halovány ötlet” a logaritmikus „hozzáállás” e:=0; u:=220-1Ciklus amíg e<u k:=(e+u) Div 2db:=Megszámlálás(File(j),e≤j≤k?))Ha db<u-k+1 akkor u:=k-1 különben e:=k+1Ciklus vége elviselhető számú „fájlból olvasás” (≤20*106= 2*108 elemolvasás) ~5*104-szeres javulás A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – intuíció • 2. példa:… memóriabeli (nagy) szótárban való hatékony keresés … • 1. megoldás:lineáris, esetleg logaritmikus keresés • 2. megoldás:ötlet: ahogy az ember keres a szótárban interpolációs keresés. A keresés hatékonysága: sikeres esetben: log2(log2(N)) sikertelen esetben: log2(N) A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – intuíció • 3. példa:… rendezés tömbben , minél hatékonyabban … • 1. megoldás:egy „hagyományos” rendezés O(N2) az elvi O(Nlog2N) helyett • 2. megoldás (Floyd):ötlet: a menetközben megszerzett információk hatékonyabb újra-felhasználása + egy „részben rendezett” elemekből álló bináris fa heap + heapsort A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – intuíció • Összefoglalva a fentieket:a felfedező szinte mindig azzal jut el meglepő gon-dolatig, hogy látszólag össze nem illő dolgokat képes „gátlástalanul” összekapcsolni. • Egy „definíció” szerint alkalmazhatatlan algoritmust erőltet sikerrel, vagy • egy hétköznap beváló hozzáállást valósít meg számí-tástechnikai problémakörnyezetben, vagy • egy, a feladathoz egyáltalán „nem illő (=meglepő) kép” köré építi föl algoritmikus gondolatait. A programfejlesztés didaktikája
3. A programozás gondolkozási eszköztára – variáció • A variálás: a program valamely „kellékének” több-féleképpen való megfogalmazása és beépítése a ké-szülő programba. • Mit variálunk? („Kellék – célterek”) • Adatok – típusok (pl. k db tömb, v. k-mezős rekordok tömbje…) • Programozási tétel-kombinációk – algoritmusok • Mi célból variálunk? • problémamegoldás („vissza az ősökhöz” elv) • hatékonyságnövelés kedvéért... A programfejlesztés didaktikája
4. A gondolkozási eszközök használat közben – absztrakció Az absztrakcióhoz • A keresés általánosítása: L:=XCiklus amíg ║L║>0 és nem T(X(ε(L))) L:=(L)Ciklus vége Van:=║L║>0Ha Van akkor Sorsz:=ε(L) A programfejlesztés didaktikája
4. A gondolkozási eszközök használat közben – absztrakció • Az általánosított keresésből származtathatók: • Lineáris keresés • Lineáris keresés rendezettben • Logaritmikus keresés • Backtrack-alapú keresés • Listával ábrázolt sorozatban keresések • Az általánosítás továbbhasznosításai • A többi tétel absztrahálása … • … és ezek specializálásai • Általánosítás egyik haszna: a memóriakímélés! A programfejlesztés didaktikája
Lexikalitás kontra kreativitás A programozás során alkalmazott lexikális ismeret: • kis szókincsű, de nagy variabilitású nyelvek, • programozási tételek, • programtranszformációk, • kódolási szabályok. Kérdés: Nem súlyosbítjuk a programozás ezen elkép-zelés szerinti erőltetésével a tanulók képességfejlő-dés terén tapasztalt, és –többek közt– a PISA-je-lentés által feltárt negatív helyzetet? Csupa lexi-kális ismeret, hol a kreativitás? A programfejlesztés didaktikája
Lexikalitás kontra kreativitás William James pszichológus-filozófus [KGy/62]: „…az egész nevelés szempontjából döntő jelentőségű, hogy ideg-rendszerünket szövetségesünkké tegyük, és ne ellenségünkké. El kell érnünk, hogy gyümölcsözően befektethessük és töké-letesíthessük megszerzett tudásunkat, hogy azután kényelme-sen élhessünk e tőke kamataiból. Éppen ezért minél előbb automatikussá és megszokottá kell tennünk annyi hasznos cselekvést, amennyit csak lehet. Minél több hétköznapi ten-nivalónkat bonyolítjuk le automatikusan, megerőltetés nélkül, annál több magasabb szellemi képességet lehet a csak ezek segítségével elvégezhető tevékenységek számára felszabadítani.” A programfejlesztés didaktikája
Lexikalitás kontra kreativitás A programozáshoz kapcsolódó fogalmak bemago-lása olyan instrumentumokat ad a tanulók ke-zébe, amelyek segítségével kreativitásukat nem apró-cseprő megfogalmazási vagy algoritmikus részletkérdésekre kell elfecsérelniük, hanem az igazi problémák megoldására összpontosíthat-nak. Vagyis ezen alapokra támaszkodvaa kreati-vitás magasabb fokon, a problémamegoldás fel-sőbb színterén tud kibontakozni. A programfejlesztés didaktikája
Lexikalitás kontra kreativitás Világos veszélyt jelent a beállítódás: a „sablonok megcsontosodása”. Lábos Elemér figyelmeztetése [Lá/61]: „A beállítódás azért különösen érdekes belső mechanizmus, mert két, a gondolkodási folyamatban szerepet játszó dologra utal. A gondolkodás során ismételt feladatokra kész prog-ramok kerülnek aktív állapotba, és gyorsítják a megoldást, de ugyanakkor más programok előhívását gátolják.” A programfejlesztés didaktikája
Programozás – modellezés • Programozás előnyei: • Szisztematikus gondolkodásra késztet. • Kialakítja, megerősíti az absztraháló képességet. • Egy univerzális modellező eszközhöz juttat. • Szisztematikus gondolkodás: • Szigorú és tudatos, • analitikus (elemző) és szintetikus (összeállító) gondolkodás. A programfejlesztés didaktikája
Programozás – modellezés 2. Absztraháló képesség: • Modell lényeges és lényegtelen vonásainak meg-különböztetése. • Formalizált gondolkodás. 3. Univerzális modellező eszköz: • Témája tetszőleges tantárgyból vehető. • Modellbonyolódás csak „lineárisan” növekszik az idealizáció fokának csökkentésével. A programfejlesztés didaktikája
Irodalom [Be] Bentley,J.: „A programozás gyöngyszemei”, Műszaki Könyvkiadó, 1988 [Ch] Chomsky,N.: „Mondattani szerkezetek – Nyelv és elme”, Osiris Kiadó, 1999 [CLR] Cormen,T.–Leiserson,Ch.–Rivest,R.: „Algoritmusok”, Műszaki Könyvkiadó, 1997 [DDH] Dahl,O.–Dijkstra,E.–Hoare,C.: „Strukturált programozás”, Műszaki Könyvkiadó, 1978 [F] Fóthi Á.: „Bevezetés a programozáshoz”, Tankönyvkiadó, 1983 [Kn] Knuth,D.: „A számítógép-programozás művészete 1.,3.”, Műszaki Könyvkiadó, 1987-88 A programfejlesztés didaktikája
Irodalom [L] Lénárd F.:A gondolkodás hétköznapjai”, Akadémiai Kiadó,1982 [ML] Mérő L.: „A mesterséges intelligencia és a kognitív pszichológia kapcsolata”, Tankönyvkiadó, 1989 [PGyG] Pólya Gy.: „A gondolkodás iskolája”, Gondolat, 1977 [PGyI] Pólya Gy.: „Indukció és analógia”, Gondolat, 1988 [KGy] Kepes Gy.: „A látás nyelve”, Gondolat, 1979 [Lá] Lábos E.: „Természetes és mesterséges értelem”, Lábos Elemér, 1979 A teljesebb anyag: Szlávi: „A programkészítés didaktikai kérdései”,http://www.inf.elte.hu/karunkrol/szolgaltatasok/konyvtar/Lapok/Doktoridisszertaciok.aspx A programfejlesztés didaktikája