V minulém článku jsem se pokoušel vysvětlit, proč je třeba i na základních a středních školách učit objektově orientované programování. Dnes bych se s vámi chtěl podělit o své zkušenosti s chováním absolventů klasických programátorských kurzů a srovnat je s chováním neprogramátorů a dětí.
Zdroje
V posledních dvou letech jsem se intenzivně věnoval metodice výuky objektově orientovaného programování. Oproti těm, kteří učí na školách, jsem měl jednu velkou výhodu: moje kurzy totiž nejsou roční s hodinovou či dvouhodinou týdenní dotací. Jsou to intenzivní týdenní či dvoutýdenní kurzy, v nichž se přes den přednáší a cvičí a večer dostávají posluchači noční domácí úkoly, při jejichž řešení si ověří, nakolik jsou schopni použít čerstvě přednesenou látku při samostatném řešení úloh. Další den pak začínáme projitím vyřešených úloh a zopakováním látky, s jejíž aplikací měli posluchači potíže.
Za jeden či dva týdny potřebujeme zvládnout látku, která se na vysokých školách přednáší celý semestr. Nechceme‑li v tomto tempu látku pouze odpřednášet, ale chceme‑li ji posluchače doopravdy naučit, přijímáme do kurzů maximálně 4 posluchače, kterým se pak lektor intenzivně věnuje. Vyučující tak naváže s posluchači mnohem těsnější kontakt, než je v běžných kurzech obvyklé.
To vše tu neříkám proto, abych se chlubil, ale proto, abych vás přesvědčil, že závěry, o nichž budu za chvíli psát, nemám vycucané z prstu, ale jsou podložené poměrně intenzivní zkušeností z výuky řady posluchačů, jejichž práci a způsoby uvažování jsem měl možnost pozorovat z daleko větší blízkosti, než jak je tomu zvykem v běžných, masových kurzech.
Vedle těchto placených kurzů vedu i dva kroužky programování, které navštěvují děti od 10 do 16 let. V nich si občas ověřuji některé nápady, které pak používám při výuce v placených kurzech. Mám totiž vyzkoušeno, že nové věci chápou děti daleko lépe než dospělí, protože se u nich informace ukládá do čistého prostředí. Vím, že budu‑li mít s nějakým výkladem potíže u dětí, bude to u dospělých už jenom horší.
Posluchači
Do našich placených kurzů se hlásí dva druhy zájemců:
- Ti, kteří nikdy neprogramovali, a pokud se je ve škole někdo snažil něco z programování naučit, úspěšně to zapomněli (alespoň to o sobě tvrdí, a hlásí se proto do kurzů, které jsou o pár dnů delší a dražší). Nejčastěji to bývají administrátoři nebo technici, kteří cítí, že by si jako programátoři mohli vydělat víc.
- Ti, kteří již mají s programováním své zkušenosti a vytvořili již několik programů. Doposud však programovali pouze strukturovaně, byť často používali jazyky, které práci s objekty umožňují (Visual Basic, PHP) nebo dokonce OOP plnohodnotně implementují (C++, Delphi). Do kurzu se hlásí proto, že zjistili, že jim dosavadní znalosti nestačí, a chtějí‑li si udržet či zlepšit své současné postavení, potřebují se naučit programovat objektově.
Do obdobných dvou skupin se dělí i děti v kroužcích. Převážná většina je těch, které nikdy neprogramovaly. Některé ale již mají své první programátorské kroky za sebou a do kroužku se přihlásily proto, aby rozšířily portfolio zvládnutých jazyků také o Javu.
Kromě toho jsem se s dětskými „zkušenými strukturovanými programátory“ setkal i při několika „suplováních“, kdy jsem zaskakoval za vedoucí jiných kroužků, kteří ten den zrovna nemohli přijít učit, a já měl náhodou čas.
Zkušenosti
Pro mnohé z vás bude asi překvapivé, že se zkušenými programátory je to těžší. Odmítají totiž na počátku přistoupit na to, že by OOP vyžadovalo zcela jiný přístup k řešení problému, jiné myšlení. Podle nich je programování jen jedno – to, které se naučili. Vždyť jejich programy fungovaly, takže musely být naprogramované správně! Objektové technologie jsou podle nich jen další rozšiřující konstrukcí na úrovni if nebo while.
V kurzu se proto dlouhou dobu snaží interpretovat předváděné objektové konstrukce pomocí prostředků, na jejichž používání byli doposud zvyklí. Dokud se jim to daří (a moje metodika je upravená tak, aby to moc dlouho netrvalo), domnívají se, že se jenom naučí novou syntaxi a pár nových obratů. V průběhu druhého dne školení však začnou ztrácet půdou pod nohama a nejpozději třetí den přiznají, že se OOP opravdu vyžaduje zcela jiný způsob myšlení a snaží se rychle zpětně přeinterpretovat vše, co jsme do té doby probrali a tím také změnit způsob, jakým si to uložili do paměti. (Jak prohlásil jeden z posluchačů: Za první tři dny kurzu jsem se naučil víc, než za předchozí půlrok intenzivního samostudia.)
Se začátečníky je život jiný. Ty není třeba nic odnaučovat, takže nenastává ona mezifáze, kdy musí znovu přehodnocovat to, co si už jednou nějak zasadili do paměti. Začínající účastníci profi-kurzů mají jiné problémy: počátky výuky vnímají jako nezávazné hraní a odmítají si přiznat, že když v této fázi něčemu zcela neporozumí, bude jim to v dalších fázích chybět. V dalších fázích výuky se proto musí občas vrátit zpět a něco si ještě jednou ujasnit.
Nejlepší ze všeho je práce s dětmi. Ty jsou ze školy zvyklé na pravidelný přísun informací, které jsou pro ně naprosto nové (takové mají často nejraději) a které si do výsledné mozaiky skládají teprve postupně. Nemívají zažitá schémata, kterým se snaží nově zadávané vědomosti přizpůsobit. Navíc jsou zvyklé získávat nové poznatky a vědomosti hrou, takže si z počátečního experimentování s objekty většinou odnášejí mnohem hlubší poznání než průměrný dospělý.
Moje dosavadní zkušenosti ukazují, že objektové programování chápou děti většinou snadněji než klasické strukturované, protože je daleko bližší lidskému způsobu popisu skutečnosti. Navíc je OOP i daleko víc baví, protože vyučujícímu umožňuje připravit výukové prostředí tak, že děti jsou během dvou až tří měsíců schopny vyvíjet programy, které jsme dříve museli zařazovat až do dalších ročníků. Úlohy, které nyní řeší ve druhém pololetí, jsme dříve většinou vůbec nemohli do kurzů zařadit.
Jedinou výjimkou jsou starší děti, které se před tím naučili z programování víc než jenom prohánět Baltíka bludištěm a získaly tak pocit, že jsou již zkušenými programátory, protože přeci umějí používat příkaz if a while. Tyto děti (jestli smím pro 14 až 16leté človíčky toto nazvání použít) ale, na rozdíl od zkušených programátorů, nemají dostatečné prostředky k tomu, aby se mohli s jejich pomocí pokoušet nové informace interpretovat, takže zůstávají u negativního odmítání něčeho, co odporuje tomu, co se doposud naučily, a marně se snaží dopátrat nějakého mostu.
Pokud však tuto nechuť překonají (k tomu většinou stačí, když jim prozradím, že je učím podle naprosto stejné metodiky, podle které učím profesionální programátory, a pošlu je na web, ať se podívají, kolik takový týdenní kurz stojí), tak se velice rychle zařadí mezi ostatní, a i ony pak ukládají nové informace do paměti mnohem lépe než průměrný dospělý.
Prozatím jsem vysvětloval, jak a proč jsou současné postupy špatné. Příště bych se vám pokusil ukázat, jak si myslím, že by se programování dalo učit lépe.
Autor pracuje jako EDU-expert ve společnosti Amaio Technologies, Inc.
Rudolf Pecinovský
0 komentářů:
Okomentovat