1 / 42

A programkészítés didaktikája

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ó

jud
Download Presentation

A programkészítés didaktikája

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A programkészítés didaktikája Szlávi Péter szlavi@ludens.elte.hu http://people.inf.elte.hu/szlavi 2004-2013.

  2. 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

  3. 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

  4. 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

  5. 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

  6. 2. Három alapelv – a programkészítés folyamata ürügyén Amire koncentrálunk a továbbiakban… A programfejlesztés didaktikája

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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ömbsorozat/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

  20. 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

  21. 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.) • „ NN, XH*” vagy „NN, XHN”? • Sorozat-nyelv vagy halmaz-nyelv? Az utóbbi kettő a specifikáció és a tervezés kapcsolatát feszegetik. A programfejlesztés didaktikája

  22. 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

  23. 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

  24. 3. A programozás gondolkozási eszköztára – információ-konverzió A programfejlesztés didaktikája

  25. 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

  26. 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

  27. 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

  28. 3. A programozás gondolkozási eszköztára – intuíció • 2. megoldás:„halovány ötlet” a logaritmikus keresésproblé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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. 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

More Related