Rudolf Pecinovský: Současné trendy v metodice výuky programování

pátek 19. května 2006 ·

Programování doznalo v posledních 25 letech řadu naprosto zásadních změn. Měnily se nejenom používané programovací jazyky, ale měnila se i filozofie celého programování. Dávno již skončily doby, kdy programátoři vyvíjeli většinou samostatné programy a potřebovali se vedle syntaxe použitého jazyka naučit především dovednostem, jak správně algoritmizovat ten či onen problém. Nyní se musí místo toho naučit začleňovat své programy do existujících systémů, ovládat řadu nejrůznějších technologií a standardů a zvládat rozsáhlé knihovny.

Tento příspěvek zazněl na konferenci Počítač ve škole 2006 v Novém Městě na Moravě a je publikován v jejím sborníku.

Ať si to již připouštíme nebo ne, většina obtížných algoritmických problémů je nyní již vyřešena a jejich řešení jsou zařazena do běžně dostupných knihoven. Současné programování již dávno opustilo doby, kdy jsme je mohli zařazovat mezi umění, a přesunulo se do kategorie technologií. Základní dovedností, kterou musí současný programátor ovládat, není vymýšlení nových postupů, ale především správná aplikace postupů dříve vymyšlených.

Dosavadní historie vývoje nejrůznějších programovacích nástrojů a knihoven však přinesla řadu nových poznatků a zkušeností. Jedněmi z nejdůležitějších bylo docenění významu znovupoužitelnosti a snadné modifikovatelnosti dříve vytvořených programů. Znovupoužitelnost a snadná modifikovatelnost jsou v současné době klíčovými zaklínadly všech zkušených programátorů a manažerů softwarových projektů.

Optimální by bylo, kdyby se stejně jako vlastní programování vyvíjela i metodika jeho výuky. Bohužel, jak sami jistě víte, metodika výuky se ve většině oblastí za vývojem daného předmětu výrazně opožďuje. Sebekriticky si přiznejme, že mnozí učitelé často připravují žáky na styl programování, který možná byl před 20 lety progresivní, ale v současné době je již dávno překonaný. O to překonanější bude v době, kdy budou jejich studenti vstupovat do praxe.

V současné době se při vývoji prakticky všech velkých projektů používá objektově orientované programování. Prakticky všechny vysoké školy a s nimi i značná část středních škol proto učí své studenty programovat objektově. Na špičkových vzdělávacích pracovištích a konferencích pedagogů se již neřeší otázka, zda učit objektově orientované programování, ale jak je učit. Tomuto tématu bych chtěl věnovat i tento příspěvek.

Světový standard pro vstupní kurzy programování

Vstupní kurzy programování bývají ve světě označovány zkratkou CS1 (Computer Science 1) a na ně navazující kurzy pak zkratkou CS2. Tyto kurzy přitom přestávají být výsadou univerzit, ale postupně se stávají součástí učebních plánů i na řadě středních škol. Jejich jednotné označení a relativně jednotné požadavky na výstupní znalosti jejich absolventů usnadňují celosvětovou diskusi o jejich náplni i o metodikách výuky.

Od šedesátých let se jednou za čas sejde skupina odborníků z vědeckých společností IEEE-CS (Computer Society of the Institute for Electrical and Electronic Engineers - Computer Science) a ACM (Association for Computing Machinery) a specifikují požadavky na osnovy těchto kurzů. Tato kurikula vyšla postupně v letech 1968, 1978, 1991 a poslední ([3]) pak na konci roku 2001.

Jak začít

Mají li si žáci nějakou látku důkladně osvojit, není možné začít s jejím výkladem až někdy před koncem příslušného kurzu. Tato zásada je obzvlášť důležitá u předmětů, u nichž nestačí se látku pouze naučit, ale je nutné si ji postupně osvojit vyřešením řady praktických úloh. Do této kategorie předmětů patří i výuka programování.

Jak jsem řekl, požadavky kladené v současné době na absolventy těchto kurzů jsou shrnuty v doporučení [3]. Toto doporučení zmiňuje několik základních přístupů k počátečním etapám výuky:

Nejdříve hardware (Hardware-first)
Jeho zastánci tvrdí, že k tomu, aby studenti dokázali správně programovat, musí nejprve vědět, jak je počítač konstruován, protože jedině tak si mohou představit, jak bude jejich program prováděn. Výuka začíná výkladem spínacích obvodů, konstrukcí registrů a aritmetických jednotek, a teprve poté pokračuje výkladem konstrukce programů ve strojovém kódu a následně ve vyšších programovacích jazycích. Tato koncepce se uplatní pouze v několika speciálních oborech, protože většinou, zejména pak při tvorbě rozsáhlých aplikací, je považováno za optimální, je li programátor od hardwaru co nejvíce odstíněn.

Nejdříve algoritmy (Algorithms-first)
Tento přístup nevyužívá k výkladu některého z existujících jazyků, ale vykládá základní algoritmy za použití pseudokódu. Studenti se nejprve učí základní principy, aniž by se zdržovali laděním nějakých programů. Zkušenost však ukazuje, že právě absence této zpětné vazby a nemožnost si vše vyzkoušet je pro studenty silně demotivující.

Nejdříve příkazy (Imperative-first)
Klasická, a jak odhaduji, u nás stále nejpoužívanější metodika výuky. Při ní se studenti nejprve seznámí s klasickými programovými konstrukcemi a teprve pak s případnou objektově orientovanou nadstavbou. Zkušenost však ukazuje, že takto připravovaní studenti se nesžijí s objektově orientovaným paradigmatem tak dobře, jako studenti, kteří začali výuku hned prací s objekty, což je vzhledem k současnému významu OOP považováno za velký handicap tohoto přístupu.

Nejdříve funkce (Functional-first)
Tento přístup zavedli v osmdesátých letech v MIT. Jeho výhodou je sjednocení počáteční úrovně studentů, protože se zde setkají s jazykem, jehož filozofie je výrazně jiná než filozofie jazyků hlavního proudu. Tato odlišnost ale na druhou stranu mnohé ze studentů demotivuje, protože se nechtějí učit něco, co pak ve své praxi přímo nepoužijí.

Nejdříve objekty (Objects-first)
Tato koncepce vychází ze skutečnosti, že OOP je zdaleka nejpoužívanější metodikou programování a mají li si je studenti opravdu osvojit, musí se s ním setkávat od samého počátku výuky.
Nevýhodou tohoto přístupu je, že objektově orientované jazyky bývají koncipovány jako komplexní a pokud vyučující začne studenty seznamovat s daným jazykem v jeho plné šíři, připadají si studenti jejich složitostí zcela zahlceni. Je přitom jedno, zda jde o složitost vlastního jazyka, jak je tomu např. v případě jazyka C++, nebo o složitost standardní knihovny, jak je tomu v případě jazyka Java.
Kurzy vedené tímto přístupem je proto třeba koncipovat tak, aby k tomuto zahlcení nedošlo. Přes tuto drobnou nevýhodu je přístup Object first v současné době nejrozšířenější.

Nejdříve celkový přehled (Breadth-first)
Zastánci této koncepce tvrdí, že by se studenti měli nejprve seznámit s problematikou počítačové vědy v co největší šířce, a teprve pak se soustředit na takové detaily, jakým je např. programování. Studenti prošedší takovýmito kurzy přistupují k řešení problémů z většího nadhledu a jsou jej často schopni chápat v celé jeho šíři. Kritici však této koncepci vytýkají, že odkládá výuku programování a tím i na ni navazující předměty o jeden až dva semestry, což není vždy vyváženo lepšími znalostmi studentů.



Rudolf Pecinovský

0 komentářů:

Články dle data



Učitelské listy

Nabídka práce

Česká škola - portál pro ZŠ a SŠ

Česká škola poskytuje svým čtenářům diskusní prostor k vyjádření názorů na školskou problematiku. Tyto příspěvky se nemusí shodovat se stanoviskem redakce České školy a jsou uveřejňovány jako podnět k dalším diskusím.

Obsah článků nemusí vyjadřovat stanovisko redakce nebo vydavatele Albatros Media, a.s.


Všechna práva vyhrazena.

Tento server dodržuje právní předpisy
o ochraně osobních údajů.

ISSN 1213-6018




Licence Creative Commons

Obsah podléhá licenci Creative Commons Uveďte autora-Neužívejte dílo komerčně-Nezasahujte do díla 3.0 Česká republika, pokud není uvedeno jinak nebo nejde-li o tiskové zprávy.



WebArchiv - archiv českého webu



Tyto webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Informace o tom, jak tyto webové stránky používáte, jsou sdíleny se společností Google. Používáním těchto webových stránek souhlasíte s použitím souborů cookie.