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ředisku

Programovací jazyk: FORTRAN, BASIC, strojový jazyk

Vnější paměť počítače: děrná páska, magnetopásková jednotka, magnetické disky

Už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 64

Programovací jazyk: BASIC

Vnitřní paměť počítače: do 64 kB

Vně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ěti

Už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 MB

Vně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 struktur

Hlavní 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 MB

Vně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 struktur

Hlavní 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 MB

Vně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ěti

Hlavní 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?

  1. Primárním cílem je naučit algoritmicky myslet, zformulovat zadání problému.
  2. Problém analyzovat nejdříve dekompozicí – rozložením na podproblémy.
  3. Nezbytné je též umět myšlenku dovést k formalizovanému návrh algoritmu, nejlépe v grafické podobě – vývojové diagramy, struktogramy…, evt. ve formě přesného slovního popisu za použití předem daných “obratů”, tj. vlastně povolených programových struktur.
  4. Přepsání formalizovaného návrhu do podoby programu je technická záležitost, nikoli hlavní cíl výuky.
  5. K samotným algoritmům nedílně patří, ale spíše až “ve druhém pořadí”, datové struktury (objekty).
  6. Vedlejším cílem (na nižších stupních dokonce hlavním cílem) je celkový rozvoj tvořivosti.

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Í SEVER

VLEVO_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í, cyklu, 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é datové 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ředky

Zá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íli

Zá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