Taxonomie a výuka programování (nad článkem Anabely Gomes)

Proč taxonomie? 

Nedávno se na portálu rvp.cz objevily texty zmiňující různé taxonomie v souvislosti s výukou nĕkterých předmĕtů. 
Na první pohled mĕ napadlo, že ve výuce programování je proti jiným předmĕtům cosi velice jinak. A pozdĕji mĕ napadlo formulovat to přesnĕji.    

 


Specifika programování jako předmĕtu 

Na rozdíl od jiných předmĕtů, výuka programování probíhá (převážnĕ ?) jako dialog studenta se strojem. Tím strojem je obecnĕ vývojové prostředí, speciálnĕ buď překladač nebo studentův program. 
Jak probíhá zmínĕný dialog? 
Student zapisuje (nebo vkládá ze svých pamĕťových medií) kusy textu, a vývojové prostředí na nĕ reaguje tím, že se je snaží považovat za slova daného programovacího jazyka a přeložit je. 
V rámci své činnosti vývojové prostředí může vypisovat chybové hlášky překladače nebo nechat bĕžet studentův program. 
Chybové hlášky překladače mohou být pro studenta dostatečnĕ srozumitelné a on podle nich opraví svůj program, ale mohou být i nesrozumitelné a student vede další dialog s vývojovým prostředím ve snaze získat další, upřesňující údaje. 
Pokud dialog pokročí do stadia, kdy překladač prohlásí program za dostatečnĕ bezchybný, vývojové prostředí spustí studentův program. 
Dialog mezi studentem a strojem pokračuje, tentokrát v jazyce, který student vytvořil pro tento účel (t.j. pro komunikaci s jeho vlastním programem). 
Nyní se role obrací a v pozici zmateného čtenáře nesrozumitelných pokynů se častĕji ocitá stroj.    

Považuji za nutné poznamenat, že se zde mĕní obsah pojmu „sémantika“. 
V programovacím jazyku je syntaxe i sémantika daná definicí příslušného jazyka. 
V dialogu studenta se strojem je sémantikou právĕ reakce stroje. 

Chce-li student „číst“ (cizí) program nebo chce-li student psát svůj vlastní program, část postupu je shodná – student ten program předloží stroji. 
Je otázkou, do jaké míry je tato shodná a společná část postupu významná. Já se domnívám, že velice. 

 


Výuka programování podle Anabely Gomes 

Zaujal mĕ článek z června 2009 s názvem „Bloom’s taxonomy based approach to learn basic programming“ autorky Anabely Gomes z Instituto Politécnico de Coimbra. 
Programování asi učím hodnĕ odlišnĕ od paní Gomes, a mí studenti určitĕ jsou velice odlišní od studentů Instituto Politécnico, ale shodnĕ s paní Gomes si mohu sám hodnĕ vybírat, co a jak v mém kurzu učím. A shodnĕ s paní Gomes tuto okolnost pokládám za významnou.    

 

Gomes [1] struktura   
Článek paní Gomes má (co se týče relevantního obsahu) 7 částí, označených Introduction (úvod), Taxonomies of learning (taxonomie učení), The study (studie), Course context (kontext kurzu), Study (studie), Discussion (diskuze), a Conclusions (závĕry). 
Postupnĕ se pokusím rozebrat i další, ale tentokrát jenom Úvod.    

 

Úvod [2] Zdůvodnĕní   
V úvodní části paní Gomes vysvĕtluje, proč použila Bloomovu taxonomii. Vychází z konstatování, že mnoha studentům se v programování nedaří. Zmiňuje možné důvody tĕchto neúspĕchů, a různé vlivy, které by neúspĕch mohly zvrátit. Z tĕchto vlivů se chce zamĕřit na strategii vyučování, tedy na činnost učitele. 
Zkoumání probíhá v prostředí kurzu Informační technologie, ve kterém se studenti učí architekturu počítačů a programovat v assembleru. 
Paní Gomes se zamĕřuje na dávkování požadavků na studenty. Jak rozsáhlé a jak složité programy mají vytvářet? A kdy se to od nich má požadovat? 
Není sporu o tom, že by se mĕlo začínat nejjednoduššími problémy a že by se obtížnost mĕla postupnĕ zvyšovat. Podle paní Gomes právĕ zde – při volbĕ vhodného zvyšování požadavků – může pomoci Bloomova taxonomie.    

 

Úvod [3] Komentář   
Přestože působíme v odlišných prostředích, konstatování paní Gomes potvrzuji – mnoha studentům se v programování opravdu nedaří. 
A rozhodnutí zamĕřit se na strategii vyučování, tedy na činnost učitele, chválím.    

Velice zajímavá byla zmínka o individuálních stylech učení se. Individuální styly nejsou předmĕtem zájmu tohoto článku, ale každopádnĕ bylo konstatováno, že existují a že mají vliv na studijní výsledky. 

Co se týče náplnĕ kurzu, onoho exotického spojení architektury – tedy hardwaru – a programování – tedy softwaru, jako softwarář je tĕžko mohu posoudit. Souhlasím, že znalost assembleru studentům přiblíží architekturu více, nežli by ji přiblížil vyšší programovací jazyk. Ale pochybuji, že toto přiblížení bude dostatečnĕ významné. Domnívám se, že studenti by navíc potřebovali ještĕ znalost firmwaru. 

 

Úvod [4] Taxonomie a stupňování požadavků  
Postupné zvyšování požadavků je přirozené a napadne každého. Já v mém kurzu zvyšuji požadavky inuitivnĕ, podle okamžitého nápadu. (Jde o okamžitý nápad v dobĕ, kdy píšu přednášku nebo vymýšlím zadání úlohy, tedy týdny či mĕsíce před vlastní hodinou. Při hodinĕ už zadání úlohy dávno „visí“ na webu.) 
Bylo by zajímavé zjistit (ale to se asi nepovede), oč lepší je, když paní Gomes ve svém kurzu zvyšuje požadavky promyšlenĕ, podle úrovní Bloomovy taxonomie.    

Podle paní Gomes by požadavky na studenty nemĕly začínat programováním (ani úplnĕ jednoduchých a drobných kusů programů), ale činnostmi na nejnižších dvou úrovních Bloomovy stupnice, konkrétnĕ čtením programů. 
Toto je v článku výslovnĕ uvedeno a zdůraznĕno: studenti by mĕli umĕt číst programy dříve než je začnou psát! 
Tento požadavek se mi „nezdá“. V čem spočívají moje výhrady? Nejde o to, zda by student mĕl dříve programy číst nebo programy psát. Jde o to, zda lze čtení a psaní programů od sebe oddĕlit. 

 

Protinázor [5] Čtení kontra psaní programů   
Paní Gomes argumentuje ve prospĕch čtení odkazem na žákovská léta. Lze souhlasit, že schopnost nejmladších žáčků čist a porozumĕt mateřskému jazyku je (zprvu) vyšší nežli jejich schopnost psát v mateřském jazyce krátké a jednoduché texty. 
Ale v případĕ čtení a psaní žáčků první třídy základní školy jde o dvĕ činnosti „technologicky“ velice odlišné. Naproti tomu u čtení a psaní krátkých a jednoduchých kousků programů jde o činnosti „technologicky“ velice podobné. Při psaní, při využití vývojového prostředí student nezapisuje kód vlastnoručnĕ – student pouze naznačuje svůj zámĕr, a kód za nĕj generuje vývojové prostředí. A při čtení cizího kódu, student se může kdykoli obrátit na vývojové prostředí, aby mu sdĕlilo sémantiku toho kterého úseku kódu. Studentovým úkolem je tedy pouze odhadnout zámĕr autora onoho kódu.    

Přiznávám, že vkládám do mých testů otázky, vyžadující přečíst cizí kód. 
Až teprve názor paní Gomes mĕ přivedl k zamyšlení, proč tam takové otázky vkládám. 
Nejspíš proto, že takové otázky se snadno vymýšlí a odpovĕdi na nĕ se snadno vyhodnocují (samozřejmĕ strojovĕ). 
Ale jakou schopnost studentů jimi testuji? 

 

Protinázor [6] Příklad   
Mĕjme program v jazyce C# a v nĕm třídu:    

public class CT1
{ //====== CT1 začátek 
private int mi1; // atribut
public CT1() {mi1=0; } // konstruktor
public int minc1() { mi1++; return mi1; } // metoda
} //====== CT1 konec 

Do hlavniho programu umístĕme následující kód: 

CT1 loCT1; // objekt
int li0, li1, li2; // promĕnné
li1 = 0; // inicializace promĕnné
li2 = 0; // inicializace promĕnné
for (li0=0; li0<4; li0++)
{ loCT1 = new CT1(); li1 = loCT1.minc1(); li2++; }

Očekávatelné otázky do testu jsou: 
(Q1:) „Jaká je hodnota promĕnné li1 ?“ 
(Q2:) „Jaká je hodnota promĕnné li2 ?“ 

Dosud jsem studentům tyto otázky nezadal. Ale předpokládám, že hodnotu li2 trefí každý, zatímco hodnotu li1 málokterý. 
To v případĕ, že studenti budou odkázáni na tužku, papír a vlastní hlavu. 
Budou-li mít k dispozici vývojové prostředí, trefí správnou odpovĕď všichni. Rozdíly budou leda v tom, jak rychle ty správné hodnoty zjistí. 
Zajímavé by bylo, kdyby studenti mĕli vysvĕtlit 
(Q3:) Proč hodnota promĕnné li1 je 1, zatímco hodnota promĕnné li2 je 4 ?  

 

Úvod [7] Připomenutí   
Připomínám 6 kategorií Bloomovy taxonomie (vzdĕlávacího okruhu): 
1. Znalost 
2. Pochopení 
3. Aplikace 
4. Analýza 
5. Syntéza 
6. Hodnocení    

A teď otázka pro čtenáře tohoto blogu: 
(Q4:) Do které kategorie Bloomovy taxonomie patří otázka Q3 ? 

 

 
 https://www.researchgate.net/publication/243962268_Bloom%27s_taxonomy_based_approach_to_learn_basic_programming
 https://cs.wikipedia.org/wiki/Bloomova_taxonomie