Generátor kódu a jeho uplatnění ve výuce programování
Rudolf PECINOVSKÝ
[email protected]
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 0% 7%
4% 12%
20%
Velmi uškodí Spíš uškodí Ani nepomůže, ani neuškodí Trochu pomůže
57%
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:
[email protected] ICQ: 158 156 600