Ve čtvrtém díle volného seriálu o programování na školách se důkladněji podíváme na téma, které jsme nakousli již v úvodním článku – jaký jazyk a vývojové prostředí je pro výuku nejvhodnější? Podle čeho jej budeme vybírat? Začneme záludnostmi klasických programovacích jazyků. (předchozí díly najdete nejrychleji zde: Programování pro všechny žáky (I.), Proč učit programování na ZŠ (II.), Zásady správné výuky programování (III.))
Opakování
Abych vás nenutil osvěžovat paměť opětovným čtením minulého příspěvku, shrnu nejprve zásady, které jsem v něm rozebíral
- Co nejdříve umožnit tvorbu programů
- Nepředbíhat, tj. nepoužívat prvky jazyka, které ještě nebyly vyloženy
- Informace je třeba předávat po malých „soustech“
- Doprovodné příklady musí vyžadovat aktivní použití nových poznatků
- Příklady musí být zajímavé
- Řešení nesmí být příliš zašuměná. (Šumem zde přitom myslím části programu, které nesouvisí bezprostředně s logickou řešení, ale bez jejichž přítomnosti program neběží.
- Od samotného začátku je třeba vštěpovat zásady moderního programování
- Studenti se musí naučit programy nejen vytvářet, ale také ladit
- Předkládat řešení netriviálních problémů.
Zásady pro použité jazyky a vývojová prostředí
Dnes si budeme povídat o vhodnosti jednotlivých programovacích jazyků a vývojových prostředí. V této souvislosti bych přidal k předchozím zásadám ještě některé další:
- Neodvádět pozornost od řešeného problému. Jinými slovy: použitý programovací jazyk a vývojové prostředí musí žákům umožnit se maximálně soustředit na řešený problém a klíčové otázky jeho řešení. Nesmí je nerozptylovat vedlejšími rušivými vlivy. Tato zásada vyplývá ze zásady o předkládání informací po malých „soustech“.
- Poskytnout přiměřené ladící nástrojeVšichni programátoři znají klíčový Murphyho zákon, že v každém programu je alespoň jedna chyba. Nechceme-li naše žáky od programování příliš brzy odradit, musíme jim nabídnout prostředí, které jim umožní chyby v jejich programech rychle nacházet a opravovat.
Chceme-li předchozí zásady dodržet, musíme tomu přizpůsobit další aspekty výuky – mezi jiným použitý programovací jazyk a vývojové prostředí. Podívejme se proto nyní na jednotlivé skupiny programovacích jazyků a vývojových prostředí a řekněme si, které ze zásad můžeme při jejich použití dodržet.
Učíme programování nebo programovací jazyk?
Než začneme bádat nad tím, jak tyto zásady naplnit, měli bychom se zamyslet nad tím, zda se chystáme učit programování nebo pouze programovací jazyk. V druhém případě je naše situace mnohem jednodušší. Můžeme předpokládat, že naši žáci již programovat umějí a budeme mít proto daleko svobodnější volbu ve výběru jazyka, prostředí i příkladů.
Typickým příkladem učebnic, které jsou určeny programátorům s jistými počátečními zkušenostmi, jsou Eckelovy knihy Thinking in xxx (z nich jsou do češtiny přeložené Myslíme v C++ a Myslíme v jazyku Java), ve kterých autor ve svých příkladech opravdu neukazuje nic jiného, než to, jak jazyk přesně funguje. Autor v nich totiž předpokládá, že jeho čtenáři již umějí programovat a že je tudíž při studiu jeho knih opravdu nezajímá nic jiného, než přesná funkce a způsob zápisu jednotlivých konstrukcí jazyka, ale ty chtějí vysvětlit do všech detailů. A má pravdu. Proto jeho knihy vyhrály několik cen a drží se na špici hitparád.
Chci-li se však věnovat výuce základů programování, musím mít neustále na paměti, že mí čtenáři či posluchači nemají s programováním doposud žádné zkušenosti a že značná část toho, co jim vysvětluji, je pro ně tak trochu zprávou z jiného světa. Proto musím všechny výše uvedené zásady úzkostlivě dodržovat. To ale automaticky ovlivňuje výběr programovacího jazyka i vývojového prostředí.
Všichni víme, že programovací jazyky přicházejí a odcházejí (já jsem se např. musel za svoji dosavadní kariéru postupně naučit téměř dvacet programovacích jazyků). Zásady tvorby dobrého programu jsou však pro všechny jazyky (včetně těch exotických) v podstatě stejné. Pokud se proto někdo naučí dobře programovat v jednom jazyce, můžeme očekávat, že bude dobře programovat i v jazyce, na který přejde posléze. Z toho ale vyplývá velice příjemný závěr:
Při výběru programovacího jazyka, jehož prostřednictvím budeme své žáky uvádět do světa programování, se nemusíme omezovat na jazyky, které budou používat ve své další praxi, ale můžeme jazyk vybrat tak, aby se s jeho pomocí žáci co nejsnadněji a co nejlépe naučili potřebné základy. Z něj pak můžeme posléze přejít na jazyk, s nímž se budou posléze setkávat ve své praxi. Na vstupní programovací jazyk máme jedinou podmínku: aby přechod z tohoto vstupního jazyka na jazyky běžně používané byl co nejjednodušší a nejpřirozenější.
Klasické programovací jazyky
(Poznámka: Klasickými programovacími jazyky budu pro účely tohoto článku myslet jazyky se syntaxí obdobnou jazykům (podle abecedy) Basic (včetně jeho „vizuální“ verze), C++, Delphi nebo Java.)
Klasické programovací jazyky mají pro výuku začátečníků řadu nepříjemných vlastností, které nám nedovolí dodržet většinu z uvedených zásad.
- Budeme-li chtít žákům co nejdříve umožnit tvorbu vlastních programů, nezbude nám, než začít hned na počátku používat některé konstrukce, které ještě nebyly pořádně vysvětleny.
- Vzhledem k tomu, že musíme současně se základními algoritmickými a datovými konstrukcemi vykládat i základy syntaxe daného jazyka (a případně i základy práce v daném vývojovém prostředí), zbytečně tím narůstá množství informací, které musí žáci najednou strávit. Nedaří se tak minimalizovat velikost „soust“, po nichž jim informace předávám. Nutnost myslet na dodržování syntaxe navíc odvádí pozornost od řešeného problému.
- Odvádění pozornosti od řešeného problému má navíc na svědomí i nedostatečná znalost psaní, takže děti na klávesnici hledají jednotlivá písmena a tím ztrácejí ze zřetele hlavní nit řešení.
- Nedoplním-li jazyk nějakou knihovnou, nemohu žákům předkládat příklady, které by mohli pokládat za zajímavé.
- Nedoplním-li jazyk nějakou knihovnou, budou navíc řešení většiny příkladů „zašuměná“.
Klasické jazyky doplněné knihovnou
Trošičku lepší situace nastane, doplním-li klasický jazyk nějakou předpřipravenou knihovnou. Tím mohu dosáhnout toho, že žáci od samého počátku řeší úlohy, které jim mohou připadat zajímavé a navíc lze snáze vymýšlet takové příklady, jejichž řešení nebudou zašuměná.
Za takovouto knihovnu ale nemůžeme považovat knihovny komponent, které různé vizuální nástroje nabízejí k naskládání na formulář. Tyto komponenty sice nebetyčně usnadní tvorbu uživatelského rozhraní, ale pro výuku základů programování toho moc nepřinesou. Práci s těmito komponentami považuji v počátcích výuky dokonce za škodlivou, protože žáci podlehnou kouzlu vytváření efektních formulářů, jehož elegance v nich může vyvolat dojem, že tímto způsobem lze vyřešit většinu problémů. Zapomínají pak na klasické programovací techniky, bez nichž se ani vizuální programování neobejde.
Pro výuku programování jsou daleko výhodnější komponenty (knihovny, moduly …) simulující nějaké virtuální světy, které můžeme prostřednictvím našich programů ovládat a řešit v nich nejrůznější úlohy. Mezi ně patří např. komponenta pro simulaci světa robota Karla nebo knihovna pro simulaci světa želvy z jazyka Logo. (Komponentu simulující svět robotů používám také ve svých kurzech programování pro profesionální programátory, kteří se chtějí naučit objektově orientované programování v některém z moderních jazyků (C++, Java, C#, Visual Basic .NET). Tento přístup se setkává s velice dobrým ohlasem – frekventanti si pochvalují, jak lze s pomocí světa robotů dokonale a názorně vysvětlit nejen principy, ale i nejrůznější finesy objektově orientovaného programování. Při této příležitosti se nemohu odpustit vzpomínku na několik středoškolských učitelů programování, pro které byl Karel pro výuku středoškoláků příliš primitivní. Problém nebyl v Karlovi, ale v učitelích.)
Specializované programovací jazyky a vývojová prostředí
Z hlediska výuky základů programování jsou nejvýhodnější programovací jazyky specializované právě na maximální usnadnění výuky základů programování. Takových jazyků a na ně navazujících vývojových prostředí je ve světě celá řada. Většina z nich zavádí jednoduchý virtuální svět, v němž pak žáci řeší nejrůznější úlohy. Mnohé z nich přicházejí s řadou vynikajících nápadů. Bohužel, pouze některé z nich splňují dodatečnou podmínku snadného přechodu na jazyky, se kterými se naši žáci budou ve své další praxi setkávat nejčastěji.
V naších krajích jsou z nich nejznámější (v pořadí jejich vzniku) Logo, Karel, Baltazar, Baltík a Petr. Každý z nich má své výhody a nevýhod. Jejich výčtu a zdůvodnění se budu věnovat příště.
Oblíbený omyl
Při debatách o volbě optimálního programovacího jazyka pro výuku narážím často na jeden zásadní (avšak, bohužel, velmi rozšířený) omyl. Řada lidí je niterně přesvědčena o tom, že programovací jazyk který se naučí i malé dítě, není vhodný pro profesionální práci, a tím ani pro výuku starších studentů – např. středoškoláků. (Tento argument nejčastěji slyším od těch, kdo učí programování na středních školách.)
Skutečnost je právě obrácená: kdo nedokáže naprogramovat řešení nějakého logického problému v jednoduchém jazyce, který umožňuje sestavit program „nezašuměný“, nedokáže jej sestavit v žádném programovacím jazyce. Kdo nedokáže ve zjednodušeném jazyce a prostředí vyřešit např. problém 8 dam, nepochopil backtracking a nedokáže jej proto aplikovat při řešení praktických úloh bez ohledu na použitý programovací jazyk.
Rudolf Pecinovský
0 komentářů:
Okomentovat