eLearning jako součást prezenční výuky kurzů týkajících se programování David Procházka1, Hana Netrefová2
Abstrakt Tento článek prezentuje výsledky projektu „Tvorba multimediálních studijních materiálů pro předmět Progamovací jazyk C++“. Původní cílem bylo, jak je patrné z názvu, vytvořit opory pro předmět Programovací jazyk C++. V při podrobnějším studiu materiálů, které měly být využity jako podklady pro tvorbu opor jsme dospěli k názoru, že drtivá většina knih a tutoriálů neodpovídá způsobu výuky C++ na naší fakultě. Při výuce uplatňujeme přístup blížící se metodě „object first“, tedy nejdříve se snažíme studenty naučit objektovému a algoritmickému programování a teprve poté se soustředíme rysy konkrétního jazyka (C++ nebo Java) v kontextu OOP. Rozhodli jsme se proto vytvořit komplexní opory, které studenty seznámí jen s naprostým minimem syntaxe C++ a okamžitě je uvedou do problematiky objektově orientovaného návrhu (OON) v jazyku C++. Teprve v okamžiku, kdy studenti projdou průpravou v OON, resp. OOP, jsou jim vysvětlovány pokročilé nástroje jazyka C++. Při tvorbě opor jsme vytvořili i řadu testů a demonstračních příkladů. Tyto testy integrované v univerzitním eLearningovém prostředí jsme s spolu s oporami využili v průběhu prezenční výuky. Tento článek prezentuje výsledky nasazení diskutovaných opor a testů v kurzu Základy objektově orientovaného návrhu a Programování v jazyku C++.
Klíčová slova eLearning, testování, prezenční výuka, C++, objektově orientované programování 1
Ing. David Procházka, , e-mail:
[email protected], Ústav informatiky, Provozně ekonomická fakulta, Mendelova zemědělská a lesnická univerzita v Brně, Zemědělská 1, 613 00 Brno, tel. +420 545 13 20 40 2 Ing. Hana Netrefová, Ph.D., e-mail:
[email protected], Ústav informatiky, Provozně ekonomická fakulta, Mendelova zemědělská a lesnická univerzita v Brně, Zemědělská 1, 613 00 Brno, tel. +420 545 13 22 24
Důvody pro využití eLearningových metod ve výuce eLearningové opory se běžně využívají v rámci distančního vzdělávání, případně jako studijní doplněk prezenční výuky na úrovni klasických skript. Snahou našeho projektu bylo integrovat eLearning do výuky silněji. Jsme k tomu nuceni mimo jiné také poměrně nízkou hodinovou dotací předmětů týkajících se programování. Na Provozně ekonomické fakultě MZLU v Brně jsou studenti informatických oborů nuceni absolvovat kurz základů objektově orientovaného návrhu (2h přednášek, 1h cvičení týdně) a kurz základů algoritmizace (2h přednášek, 2h cvičení). Na tyto kurzy navazují kurz programovacích technik (pokročilá algoritmizace, abstraktní datové struktury - také 2h přednášek a 2h cvičení) a kurzy konkrétních programovacích jazyků - Java a C++ (opět hodinová dotace 2, 2). Je zřejmé, že toto množství kontaktní výuky velmi limituje množtví probrané a procvičené látky. Zvláště v kurzu Základy objektově orientovaného návrhu jsou kvůli jedné hodině cvičení týdně problémy s prezentací problematiky na dostatečném množství příkladů. Tento problém samozřejmě doplňuje řada dalších běžných problémů jako jsou nárazové učení studentů těsně před zkouškou, z toho plynoucí nepřipravenost na cvičení, atp. Všechny tyto obtíže nás donutily zamyslet se na tím, jak kontaktní výuku upravit, aby se popsaná situace zlepšila.
Integrace opor do výuky Základním krokem našeho projektu samozřejmě bylo vytvořit eLearningové opory, které umožní studentům připomenout si probíranou látku při přípravě na hodiny a na zkoušky. Zvolili jsme metou vytvoření opory, která pokrývá kurzy základů OON, programovacího jazyka C++ a částečně i algoritmizace. Cílem bylo předvést studentům, že se jedná o vzájemně provázanou problematiku, tj. že kurzy na sebe logicky navazují. Pro zkušeného programátora (pedagoga) se takovýho problém může jevit triviální, ale z ohlasů studentů vyplývá, že často mají problém toto vzájemné provázání pochopit. Například kurzy algoritmizace a objektového návrhu chápou v některých případech těměř jako protiklady. Teprve v okamžiku, kdy je jim vysvětleno a ukázáno, že OON je o vytvoření struktury celého programu a algoritmizace řeší dílčí (technické) problémy, které jsou v praxi reprezentovány zpravidla různými metodami, začínají chápat smysluplnost kurzů. Samozřejmostí by měla být úzká návaznost specializovaných kurzů programovacích jazyků na tyto kurzy programátorského základu. I zde se nám integrace opor osvědčila,
protože pokročilejší studenti úvodních kurzů mají možnost nahlédnout na pokročilejší aplikace probírané látky a naopak studenti pokročilých kurzů se v případě nejasnosti mohou podívat na již probranou látku a nemusí problém složitě hledat na jiném místě. Vytvoření těchto opor byl výchozí krok pro náš projekt. Sebelepší opory však neřeší základní problém výuky - student elektronické (nebo jakékoliv jiné) opory ji otevře často teprve několik dní před zkouškou.
Průběžná příprava My jsme se pokusili s tímto prolémem bojovat důsledným průběžným testováním. Student za průběžné testy mohl získat až 30 bodů. Maximum bodů za předmět je 100. Pro získání známky E postačuje 50 bodů. Testy tedy činí značnou část výsledné známky (spolu s půlsemestrální prací 55 bodů) a pro studenty je nepříjemné, pokud z nich získají málo bodů. Dovolím, si poznamenat, že veškeré testy mají zapnutou korekci hádání, tedy za špatnou odpověď jsou strhávány body. Vzhledem k obsahu testů je poměrně nepravděpodobné, že by byl student schopen dosáhnout výraznějšího bodového zisku pouhým hádáním (tento fakt dokazuje i řada studentů s body z testu v rozmezí 0 až 1). Už samotný fakt, že studenti nejméně jednou za 14 dní píší test nebo písemnou zkoušku, je poměrně motivuje k učení. Subjektivně pozorujeme zlepšení v přípravenosti studentů (častěji reagují na otázky, lepší celkové výsledky). Zde je nutné podotknout, že motivuje snaživé studenty. Existuje samozřejmě řada studentů, kteří se nepřipravují, v průběhu semestru nezískají prakticky žádné body a zkoušku také neudělají. Tito studenti však, podle našeho názoru, nepatří na vysokou školu a jejich neúspěch nelze být brán jako neúspěch výukové metody. Prostě nemají o studium zájem nebo na ně nemají schopnosti. Dalším efektem, kterého jsme dosáhli zavedením kurzů, je seznámení studentů s elektronickými oporami. Cvičné testy jsou přímo součástí opor za příslušnými kapitolami. Studenti tedy při přípravě na test musí opory projít. To je donutí zjistit, že existují, co obsahují, a řada z nich pochopí, že jim mohou být při přípravě na testy a zkoušky užitečné. Obdobného efektu se snažíme dosáhnout zadáním řešení příkladů ze cvičení do opor. Studenti jsou pak nuceni, pokud nebyli schopni příklad sami vyřešit, nalézt si jeho řešení v oporách.
Metodika vs. jazyk V poslední části článku bychom se rádi vrátili k samotnému textu eLearningových opor. Zvláště části, která pokrývá kurz Programovací jazyk C++. Tvořit mírně pokročilý tutoriál k jazyku C++ je poměrně diskutabilní krok. Na Internetu je možné nalézt celou řadu poměrně komplexních průvodců jazykem C++, o knihách ani nemluvě. Přesto jsme se rozhodli vytvořit svůj vlastní text. Bylo to zejména z toho důvodu, že na Internetu často nalezneme kurzy objektového programování a kurzy C++, jen málokdy narazíme na kurz, který by rysy jazyka C++ vysvětloval na objektovém základě. To je poměrně škoda. Pokud bychom objektovost C++ odložili a věnovali se pouze syntaxi a minimalistickým příkladům používajícím výhradně procedury a funkce, popřeli bychom vlastně smysluplnost objektové architektury programů (ta je samozřejmě při vhodném použití smysluplná i u poměrně krátkých příkladů). Navíc velká část pokročilých nástrojů C++ (šablony, string, aj.) je přímo založena na objektovém základě a pokud jej nedůsledně vysvětlíme, mateme studenty v tom, co vlastně používají a jaký má nástroj vlastně smysl. Toto nepochopení je patrné v celé řadě Internetových tutoriálů, kdy autoři demonstrují nástroje na zcela nesmyslných příkladech. Vzorovým příkladem může být setrvalé zamlčování, že třída string je opravdu klasická třída a proměnné třídy string jsou její statické instance (to vysvětluje fakt, že u typu najednou můžeme volat metody). Obdobné příklady lze nalézt např. při používání static, const, atp.
Závěr Popisovaná eLearningová opora již byla využita ve výuce v zimním semestru 2007/2008. Většina studentů její existenci hodnotila kladně. Je to patrné z evaluací předmětu (které vyplňuje drtivá většina studentů) ve kterých jsou ve slovním hodnocení explicitní zmínky ve smyslu, že opora byla přínosem pro zvládnutí předmětu. V současné době nadále pracujeme na vylepšování opory. Snažíme se opravit, resp. nahradit příklady a pasáže, které studenti označili za méně srozumitelné. Průběžně také doplňujeme část opor Práce s pokročilými vývojovými nástroji, která obsahuje video tutoriály ve formátu Flash. Do ní se snažíme umístit nahrávky usnadňující studentům práci s různými vývojovými nástroji (Visual Paradigm, Microsoft Visual Studio, aj.). Také díky kladným ohlasům se snažíme
zpracovat podobnou oporu i pro kurzy zabývající se tématikou geografických informačních technologií.
Literatura [1]
ECKEL, B. Myslíme v jazyku C++ - knihovna zkušeného programátora, Brno: Grada, 2006, ISBN 80-247-9009-2, 556 stran.
[2]
ECKEL, B. Myslíme v jazyku C++ 2. díl - knihovna zkušeného programátora, Brno: Grada, 2006, ISBN 80-247-1015-3, 556 stran.
[3]
KEOGH, J. GIANNIN, M. OOP Objektově orientované programování bez předchozích znalostí - Průvodce pro samouky, 2006, Brno: CP Books, ISBN 80-251-0973-9, 224 stran.
[4]
KOLEKTIV
AUTORŮ
Objektově orientované programování v jazyku C++ (Elektronická
opora pro předměty s týkající se programování v C++) [on-line], citováno 2008-01-14, adresa: http://is.mendelu.cz/eknihovna [5]
KOLEKTIV AUTORŮ Geografické informační systémy (Elektronická opora pro předměty z oblasti GIT [on-line], citováno: 2008-01-14, adresa: http://is.mendelu.cz/eknihovna
Tato práce vznikla na základě grantu FRVŠ FR170051 293/F5/d a za podpory organizátora konference.
Příloha: obsah eLearningového kurzu • Objektově orientované programování v jazyku C++ • Obsah • Cíl kurzu • Návaznost • Motivace • Poučení • Úvod • Základy jazyka C++ • Historie a vývoj jazyka C++ • Překlad a základy jazyka • Řídící struktury • Funkce a rekurze • Vstupní a výstupní proudy • Objektově orientované programování • Základní pojmy a koncepty OOP • Test na základní koncepty C++ • Konstruktor, destruktor • Test na práci s metodami a konstuktory/destruktory • Vztahy • Asociace • Test na modelování v UML se zaměřením na vazby • Agregace • Dědičnost • Test na dědění atributů a metod • Příklady • Pokročilé techniky OON • Složitější případy dědičnosti a polymorfismus • Test na vazby s přihlédnutím ke kompozici a polymorfismu • Návrhové vzory • Shrnutí • Příklady • Práce s pokročilými vývojovými nástroji • Co v této kapitole naleznete • Animace: Visual Paradigm - vytvoření diagramu tříd a základní třídy • Animace: Visual Paradigm - tvorba a nastavení základním vazeb v diagramu tříd • Animace: Visual Paradigm - generování kódu z diagramu tříd a rekonstrukce diagramu tříd z kódu Práce s řetězci, soubory a výjimky • • Soubory pomocí proudů • Práce s řetězci - třída String • Výjimky • Příklady na procvičení problematiky • Knihovna STL a vybrané nástroje OOP • Datové kontejnery • Algoritmy • Vybrané nástroje OOP
• Příklady na procvičení problematiky Grafické knihovny • • OpenGL, DirectX, XNA a ti další... • OpenGL • Příklady na procvičení problematiky • Závěr • Slovníček pojmů