Výuka programování na základní a střední škole
Historie: Cesta ze středu pozornosti na periferii zájmu?
Generace 0
Doba: do poloviny osmdesátých let
Počítač
: sálový, resp. minipočítač ve výpočetním střediskuProgramovací jazyk: FORTRAN, BASIC, strojový jazyk
Vnější paměť počítače
: děrná páska, magnetopásková jednotka, magnetické diskyUživatelské rozhraní počítače: dávkové zpracování nebo terminálový přístup prostřednictvím speciálního řídicího jazyka (SCL)
Hlavní cíl předmětu “Počítače”: analýza, návrh a implementace algoritmů
Předmět určen pro: zájemce
Metodika zápisu algoritmů:
vývojový diagram (ne nutně strukturovaný)Pozornost soustředěna na: návrh algoritmů, pečlivou “ruční” přípravu předem, minimum ladění
Modelový výukový problém řešený v předmětu algoritmizace: matematické výpočty podle vzorců (s rozhodováním/větvením, cykly), vyhledávání čísel v posloupnosti, její řazení
Generace 1
Doba: polovina osmdesátých let
Počítač
: osmibitový, např. IQ 151, PMD 85, ZX 81, ZX Spectrum, Sord M5, Sharp MZ, Atari 800XL, Commodore 64Programovací jazyk: BASIC
Vnitřní paměť počítače:
do 64 kBVnější paměť počítače
: magnetopásková jednotka -> nemožnost přímého přístupu, pomalost, nespolehlivost -> algoritmy zpravidla pracovaly pouze ve vnitřní pamětiUživatelské rozhraní počítače: řádkové, prostřednictvím vyššího pg. jazyka (typicky BASIC)
Hlavní cíl předmětu “Počítače”:
analýza, návrh a implementace algoritmůPředmět určen pro: všechny (na určitém typu školy)
Metodika zápisu algoritmů: vývojový diagram (ne nutně strukturovaný), struktogram, kopenogram
Pozornost soustředěna na:
návrh algoritmů, pečlivou “ruční” přípravu předem, primitivní možnosti laděníModelový výukový problém řešený v předmětu algoritmizace: vyhledávání čísel v posloupnosti, její řazení, jednoduchá práce s řetězci, případně s grafikou (tam, kde byla k dispozici)
Generace 2
Doba: začátek devadesátých let
Počítač: šestnáctibitový typu IBM PC XT/AT
Programovací jazyk: BASIC, PASCAL
Vnitřní paměť počítače:
do 1 MBVnější paměť počítače
: disketová jednotka, menší pevné disky -> algoritmy pracují ve vnitřní i vnější paměti, možnost použití dynamické paměti a tedy i dynamických datových strukturHlavní cíl předmětu “Počítače”:
analýza, návrh a implementace algoritmů a obsluha operačního systému (DOS, souborový manažer)Metodika zápisu algoritmů: vývojový diagram (strukturovaný), struktogram, kopenogram, první nástroje pro grafické znázornění programových struktur na počítači (SGP)
Pozornost soustředěna na: návrh algoritmů a datových struktur, objektový přístup, příprava předem ustupuje do pozadí, pokročilejší možnosti ladění, pozvolný nástup stylu “try-and-see”
Modelový výukový problém řešený v předmětu algoritmizace: řazení posloupnosti, vyhledávání v databázi záznamů (i na disku), práce s grafikou (tam, kde byla k dispozici), první grafická uživatelská rozhraní, implementace dynamických datových struktur
Generace 3
Doba: druhá polovina devadesátých let
Počítač
: dvaatřicetibitový (386, 486, Pentium)Programovací jazyk: PASCAL
Vnitřní paměť počítače:
2 - 16 MBVnější paměť počítače
: pevný disk -> algoritmy pracují ve vnitřní i vnější paměti, možnost použití dynamické paměti a tedy i dynamických datových strukturHlavní cíl předmětu “Počítače”:
obsluha operačního systému (DOS, souborový manažer, grafické rozhraní Windows), obsluha aplikací (textové, tabulkové a grafické editory, databáze)Metodika zápisu algoritmů:
vývojový diagram (strukturovaný), struktogram, kopenogram, první nástroje pro grafické znázornění programových struktur na počítači (SGP)Pozornost soustředěna na: návrh algoritmů a objektový přístup, jednoduchý vizuální návrh objektové hierarchie či datových struktur, vrchol programátorského stylu “try-and-see”
Modelový výukový problém řešený v předmětu algoritmizace: řazení posloupnosti, vyhledávání v databázi záznamů (i na disku), práce s grafikou (tam, kde byla k dispozici), první grafická uživatelská rozhraní, implementace dynamických datových struktur
Generace 4
Doba: nyní
Počítač
: dvaatřicetibitový (Pentium MMX, II, III)Programovací jazyk: Delphi, C++, Java
Vnitřní paměť počítače:
32 - 128 MBVnější paměť počítače
: velký pevný disk, ale také velká operační paměť -> pozornost se opět obrací k algoritmům pracujícím ve vnitřní pamětiHlavní cíl předmětu “Počítače”: obsluha aplikací (textové, tabulkové a grafické editory, databáze) a Internetu
Metodika zápisu algoritmů:
vývojový diagram (strukturovaný), struktogram, kopenogram, první nástroje pro grafické znázornění programových struktur na počítači (SGP)Pozornost soustředěna na: objektový přístup, pokročilá vizuální tvorba
Modelový výukový problém řešený v předmětu algoritmizace: grafická uživatelská rozhraní, databázové aplikace, práce s grafikou, internetové aplikace
Shrnutí
Výuka algoritmizace programování dosáhla “zlatého věku” zhruba před patnácti až deseti lety. Nyní se týká opět jen zájemců na určitých typech škol (gymnázia, průmyslové školy, učiliště s příslušným zaměřením, vyšší a vysoké školy). Na základních školách se “programuje” spíše ojediněle. Pro praktické programování se používá buďto
specializovaných nástrojů určených k výuce (Logo, Baltazar/Baltík, Petr, Karel) nebo klasických profesionálních nástrojů (PASCAL, Visual BASIC, Delphi, JavaScript).
Co je cílem?
Jakou zvolit metodiku?
Strukturovaný přístup
Příklad strukturovaného přístupu ve výukovém programovacím nástroji (jazyce KAREL):
Problém: Přesuňte KARLA k nejbližší severní zdi
Řešení:
DOKUD NENÍ SEVERVLEVO_VBOK
KONEC
DOKUD NENÍ ZEĎ
KROK
KONEC
Pozornost je výrazně soustředěna na zvládnutí základních algoritmizačních obratů – sestavení správné posloupnosti příkazů, správného větvení, cykl
u, podprogramu.Zkušenosti ukazují, že úroveň chápání těchto postupů žáky ZŠ je zhruba následující, viz
[Kopecká, 1998]:
4. a 5. ročník |
6. a 7. ročník |
8. a 9. Ročník |
Hotové programy |
Větvení programu (1 podm) |
Větší programy |
Jednoduché příkazy |
Jeden cyklus |
Datové struktury |
Sekvence příkazů |
Proměnná |
Na SŠ všeobecného zaměření (gymnáziu) by mohlo průměrné zvládnutí vypadat takto:
1. a 2. ročník |
3. a 4. ročník |
Obzvlášť nadaní studenti |
Vyhledávací algoritmy |
Více cyklů v sobě |
Složitost algoritmů |
Složené da tové typy |
Třídicí algoritmy |
Dynamické datové struktury |
Procedury a funkce |
Grafika |
Objektově orientovaný přístup
Shrnutí
Praxe ale obvykle ukáže, že tento přístup není nezbytný a začneme-li učit (kvalitně) strukturovaně, nic se nezmešká. Naopak, začít objektově předpokládá vyšší úroveň abstraktního myšlení. Za své hovoří také fakt, že většina výukových nástrojů pro algoritmizaci a programování je spíše strukturovaného zaměření, což je současně i škoda.
Obecně lze doporučit bez ohledu na objektovost/strukturovanost hned od počátku
problémově orientovanou výuku s vysokým podílem samostatné práce.Ž
áci se s pomocí známých či hotových prostředků snaží problém vyřešit, přicházejí postupně na to, co neumí, učitel jim to ve vhodnou chvíli odtajní a objasní a oni to vzápětí použijí v praxi. Výhodné je zpočátku vždy detailně rozebrat určité řešení včetně rozboru a napsání kódu (algoritmu) přesně na tabuli.Postup může být zhruba takový:
Problém -> jeho rozbor -> samostatný pokus o řešení -> špatný výsledek pokusu -> seznámení s novým obratem (příkazem) -> samostatný pokus o řešení s novým obratem -> konfrontace jednotlivých řešení (společně na tabuli) -> závěr, doporučení -> definice vlastního problému a jeho samostatné či týmové řešení
Jaké použít nástroje?
Spor: “výukové” vs. “profesionální” nástroje. V profesionálních vytvoříme úplnou a funkční aplikaci, obvykle lze později znovupoužít zdrojový kód. Žáci později v praxi snadno přejdou na jiný “profesionální” nástroj. Je to ovšem problém základní školy? Výukové nástroje zbavují nutnosti znát většinu technických detailů daného prostředí, tím pádem ale nabízejí méně – nedovolí např. programem ovládnout všechny možnosti systému.
Nelze v nich tedy vytvořit vše, co “opravdová” praxe žádá. Vadí to však na základní škole?Profesionální nástroje
MS Visual Basic 3.0, 4.0
MS Visual C++
MS Visual J++
Inprise Delphi 3.0, 4.0
Inprise JBuilder 3.0
IBM Visual Age for Java, C++
IBM Lotus Notes Development
Netscape JavaScript
… a řada nástrojů pro návrh a tvorbu IS
Speciální prostředky pro výuku
Karel (více dodavatelů)
Logo (Comenius)
Baltík/Baltazar (SGP)
Petr (Gemtree)
Zákeřnosti výukových nástrojů
Zákeřnosti konkrétních nástrojů – programátorských vývojových prostředí pro určitý programovací jazyk – se objevují především u tzv. profesionálních nástrojů s bohatou škálou možností. U výukových nástrojů se setkáme spíše s nepříliš šťastnou metodikou, neergonomickou obsluhou, nesrozumitelnými ikonami a nápovědou…
Problémy s tzv. netypovými jazyky
Problémy s implementačními zvláštnostmi a výjimkami
Problémy s chybami v konkrétních implementacích jazyků
Obvykle chyby výuky algoritmizace a programování
Desatero zásad výuky algoritmizace a programování
Zásada č. 1:
zvaž své vlastní síly – musíš nejen teoreticky zvládat algoritmizaci, ale i praktické programování a programovací prostředkyZásada č. 2: zvaž síly a motivaci žáků – algoritmizaci a programování uč jen zájemce, systematicky myslet uč všechny
Zásada č. 3: ujasni si předem cíle, až podle nich zvol metodiku a nástroje
Zásada č. 4:
nespěchej, podobně jako v matematice je pro algoritmizaci třeba jisté úrovně abstraktního myšlení (8. – 9. třída)Zásada č. 5: kde nemůžeš pomoci, neuškoď – raději, než naučit špatně, neučit vůbec
Zásada č. 6:
vol adekvátní prostředky, které jdou bez zbytečností přímo k cíliZásada č. 7: zdůrazňuj podstatné, odstiňuj od nepodstatného
Zásada č. 8: nenechávej pochopení důležitých pojmů “na samostudium”
Zásada č. 9: musíš-li v zájmu pochopení věci “klesnout pod odbornou úroveň”, udělej to
Zásada č. 10: vlastní programátorské zkušenosti jsou nezbytným předpokladem kvalifikované výuky