Generátor kódu a jeho uplatnění ve výuce programování Rudolf PECINOVSKÝ rudolf@pecinovsky.cz
Trendy poslední doby Další a další státy si uvědomují nutnost zařazení výuky programování do učiva základních a středních škol Ve Spojených státech, Velké Británii a některých dalších zemích vznikly státem vydatně podporované programy, které mají toto rozšíření realizovat Vznikl i celoevropský projekt, jehož součástí je i vytvoření a zavedení nástroje, který bude používán při výuce ve vstupních kurzech programování Prozatím se jako nejvhodnější jeví systém Scratch, ale Evropa by ráda evropský (= neamerický) nástroj Jaké vlastnosti by měl takovýto nástroj nabízet?
Přeceňování syntaxe Současná výuka programování vyvolává ve studentech pocit, že znalost programování = znalost použitého jazyka Výuka programování často degeneruje na výuku syntaxe a používání základních knihoven Studenti začátečníci se pak musí často natolik soustředit na detaily (např. kam umístit a kam neumístit středník, kdy použít a kdy nepoužít prázdné závorky apod.), že jim začne unikat hlavní obsah přednášené látky Studenti často končí předmět s představou, že pro úspěšné zvládnutí předmětu je nejdůležitější zvládnout syntaktická pravidla a klíčové knihovní objekty Zkušení programátoři však vědí, že syntaxe není ani zajímavou, ani obtížnou součástí programování
Výuka algoritmických konstrukcí Obdobné je to i s výukou algoritmických konstrukcí Mnozí vyučující žijí v utkvělé představě, že programování se za posledních 30 let nijak významně nezměnilo, a že je proto potřeba naučit studenty především to, co se ve svých počátcích učili oni Učí studenty řadu dovedností, které příliš nevyužijí, a nezbude jim pak dostatek času na výuku dovedností, které současné programování vyžaduje Připomínám starší příklad s výukou kuchařů, kteří musejí umět vykrmit kuře, zabít je a oškubat, ale pak nezbyde čas na dostatečné probrání moderních technik mikrovlnné trouby, indukčního ohřevu, Studenti pak často začnou zaměňovat programování s kódováním
Soustředění na detail Pro správný návrh kódu je důležité mít dobře navržený mentální model subjektů a objektů zpracovávané domény a jejich vzájemných interakcí Chápat jejich obecné chování a specifikace jeho projekce do vyvíjeného programu Programátoři vychovaní k práci v hladině kódu budou při vývoji programů stále přemýšlet v hladině kódu a budou mít problémy s návrhem správné architektury Mimo jiné budou mít problémy s pochopením objektových modelů nejrůznějších knihoven a frameworků, které budou používat Přichází řada zpětných vazeb od podniků, že ze škol přicházejí studenti opojení představou o své dokonalosti, ale když přejdou od školních úloh k těm praktickým, zjišťují, že je škola naučila něco jiného, než opravdu potřebují
Nevýhody předčasné koncentrace na kód Soustředění se na kód zanedbání výuky návrhu složitých aplikaci (náhrada výuky paradigmatu výukou kódování) přináší problémy Takto vychovaný programátor myslí a hovoří v termínech kódu; mezi ním a zákazníkem vzniká sémantická mezera Common 2011 6
Požadavky na vývojové prostředí Na tuto skutečnost je třeba myslet i při výběru vývojového prostředí, které budeme při výuce využívat Zejména u začátečníků je důležité, aby se mohli soustředit především na návrh programu a jeho architektury a byli přitom co nejméně rozptylováni nutností soustředit se na kód a syntaxi jazyka Zásady správné výuky nás učí, že zejména začátečníci by se měli učit pokud možno jednu věc po druhé a ne několik věcí najednou Učí-li se nejprve kód a teprve pak architekturu, stávají se při návrhu architektury jejich předchozí zkušenosti s kódem koulí na noze, protože při něm stále myslí na budoucí podobu kódu Začneme-li výukou architektury, je doplnění výuky kódu mnohem přirozenější a méně problémové
Reakce na výuku dle Architecture First Domníváte se, že tento způsob výuky pomůže studentům v lepším chápání vazby mezi vyvíjeným programem a simulovanou skutečností a z toho plynoucích lepších schopností v návrhu odpovídající architektury? 0 1 2 3 4 5 Nic společného 14% 0% 7% 21% 50% 7% Zadávání či kontrolu 0% 0% 7% 7% 67% 20% Na jiné pozici 10% 0% 0% 10% 50% 30% Vedoucí projektu 4% 0% 4% 12% 60% 20% Architekt 12% 0% 0% 12% 59% 18% Celkem 7% 0% 4% 12% 58% 19%
Graf 20% 0% 4% 7% 12% 57% Velmi uškodí Spíš uškodí Ani nepomůže, ani neuškodí Trochu pomůže Velmi pomůže Neumím posoudit 77 % studentů pociťuje lepší schopnosti oproti klasický vyučovaným spolužákům
Učebnice základů objektové architektury
Program v jazyku Scratch
Prostředí Scratch Prostředí (a jazyk) Scratch, které je na řadě míst nasazováno do výuky programování na základních a středních školách, přináší na jednu stranu několik velmi výhodných vlastností, ale na druhou stranu má řadu vlastností nepříjemných Kladné vlastnosti Je přirozeně objektové aniž by to veřejně vytrubovalo. Děti v něm proto mohou přemýšlet obdobně, jako přemýšlí při řešení problémů běžného života Nevhodné vlastnosti Je dalším z těch, které se soustředí na detail/kód Prostředí nenabízí žádný náhled na celkovou architekturu vyvíjeného programu Děti, které v něm programují, se sice rychle naučí dělat jednoduché programy, ale jakmile se program stane jenom trochu složitější, začnou v něm bloudit
Prostředí BlueJ V našich kurzech používáme pro vstup do světa programování vývojové prostředí BlueJ Ani toto prostředí není dokonalé jeho autoři do něj zakomponovali řadu vynikajících vlastností, které však nedotáhli do konce a ani se k tomu nechystají Před několika lety bylo naštěstí převedeno mezi otevřené programy Postupně proto se studenty v rámci jejich závěrečných prací doplňujeme toto prostředí o funkcionalitu, která by umožnila prodloužit etapu, při níž studenti funkční programy bez nutnosti kódování Nová verze jazyka umožňuje tuto etapu výrazně prodloužit Viz Java 8 Učebnice objektové architektury pro mírně pokročilé
Na čem se právě pracuje Další rozvíjení a následné testování metodiky Architecture First Automatizace testování architektury studentských prací metodami dynamického testování skleněné skříňky Zlepšování použitelnosti vývojového prostředí BlueJ v úvodních lekcích vstupních kurzů programování vývoj upraveného prostředí označovaného BlueJ++ Připojení systému BlueJ++ jak zásuvného modulu do profesionálních prostředí NetBeans rozpracováno Eclipse IntelliJ Idea
Grada Spolupráce s nakladatelstvím Grada Dohoda o zavedení sekce pro vznikající publikace, jejichž polotovary bude lze stáhnout zdarma Inspirováno některými zahraničními nakladatelstvími Vyvoláno zpožděními při vzniku definitivní verze některých knih
Děkuji za pozornost Rudolf Pecinovský mail: rudolf@pecinovsky.cz ICQ: 158 156 600