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

V minulých epizodách jsme sledovali … 

Nahlédli jsme do článku Anabely Gomes. Autorka upravila metodiku, u závĕrečné zkoušky studenti řeší také problémy z nižších kategorií Bloomovy taxonomie, a než začnou programovat, studenti by mĕli získat schopnost číst kód. 
V tom bych se s paní Gomes neshodnul. Pokud by na svém požadavku – začínat kurz programování vyučováním a ovĕřováním schopnosti studentů číst kód – trvala. 
Ale trvá na nĕm? 

*** *** ***
 tx-pg-1

část 1 Taxonomie a výuka programování 1 (nad článkem Anabely Gomes)
 tx-pg-2

část 2 Taxonomie a výuka programování 2 (znovu nad článkem Anabely Gomes)
 tx-pg-3 Taxonomie a výuka programování 3 (stále nad článkem Anabely Gomes)
*** *** ***
Gomes [1] Struktura 
Stále čteme č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. 
Článek 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“). 
V předchozích vstupech jsem rozebral první čtyři části až po „Kontext kurzu“. Zbývají části „Studie“, „Diskuze“ a „Závĕry“. Vzhůru do díla! 

Gomes [2] Studie 
Část „Studie“ je nesmírnĕ zajímavá a poučná. Přináší informace tří druhů. 
Za prvé popisuje koncepci a strukturu závĕrečných zkoušek kurzu Informační technologie, včetnĕ typů otázek a jejich zařazení do kategorií Bloomovy taxonomie. 
Za druhé výsledky, které studenti dosáhli v jednotlivých kategoriích. 
A za třetí interpretaci výsledků zkoušek a související typologii studentů. 
V souladu s celkovou koncepcí kurzu, kterou paní Gomes avizovala v předchozích částech článku, otázky byly rozvrstveny podle kategorií Bloomovy taxonomie a rozdĕleny do tří skupin. 
Opakuji, že mi tato část článku připadá velice poučná, a proto z ní budu citovat ve vĕtším rozsahu nežli dosud. 

Skupina [1] Otázky podle kategorií Bloomovy taxonomie 
Tato skupina obsahovala otázky příslušejíci do kategorií 1 (Znalost) a 2 (Pochopení). Otázky byly rozdĕleny do tří úrovní. 

1. úroveň odpovídala 1. kategorii Bloomovy taxonomie (Znalost) a studenti zde řešili následující problémy: 
– určit místo v programu, kde je promĕnná deklarovaná, 
– určit prostor v pamĕti, který promĕnná zabírá, 
– rozhodnout, zda fragment kódu obsahuje cyklus. 
(Toto by byl ve vyšším programovacím jazyce smĕšnĕ triviální problém, ale připomínám, že ti studenti to řešili v assembleru.) 
Úspĕšnost studentů byla vysoká a u jednotlivých otázek se pohybovala mezi 95.3% a 68.9%. Jenom otázka s cyklem dopadla na katastrofických 47.3% . 

2. úroveň odpovídala 2. kategorii Bloomovy taxonomie (Pochopení) a studenti mĕli pochopit roli konkrétní instrukce. 
Úspĕšnost studentů byla o málo nižší a u jednotlivých otázek se pohybovala mezi 77.0% a 61.5% . 

Ve 3. úrovni studenti mĕli analyzovat celý program a porozumĕt mu. 
Úspĕšnost studentů byla výraznĕ nižší a u jednotlivých otázek se pohybovala mezi 33.1% a 33.8% . 
Podle paní Gomes i otázky této úrovnĕ patřily do 2. kategorii Bloomovy taxonomie (Pochopení). 
Zde se s paní Gomes neshodnu. Porozumĕní celému programu bych zařadil do vyšší kategorie, čemuž nasvĕdčuje i nízká úspĕšnost studentů. 

Skupina [2] Úkol: naprogramovat fragment kódu 
Zde studenti mĕli napsat krátký úsek programu, kterým doplnili již existující program. 
Úspĕšnost studentů byla zoufale nízká, pouhých 15.73% . 
Bylo by zajímavé znát názor paní Gomes na zařazení této činnosti do kategorií Bloomovy taxonomie, ale bohužel jej neuvádí. 

Skupina [3] Úkol: naprogramovat celý program 
Zde studenti mĕli naprogramovat celý program. 
I zde byla úspĕšnost studentů zoufale nízká, pouhých 9.46% . 
Ani zde paní Gomes nespecifikuje zařazení této činnosti do kategorií Bloomovy taxonomie. 

Paní Gomes upozorňuje, že existují studenti, kteří dokážou sledovat výklad kurzu programování, dokážou rozebírat a porozumĕt programům, ale nejsou schopni napsat vlastní program. Takovíto studenti – podle paní Gomes – umí kódovat, ale neumí vytvořit algoritmus. 


Poznámka k algoritmizaci: 
Obávám se, že mezi mnou a paní Gomes existuje jistý rozdíl v nakládání s pojmy. Moje představy jsou takovéto: 
„Kodér“ je programátor, který „píše kód“, neboli převádí do programovacího jazyka algoritmus vytvořený nĕkým jiným, případnĕ převádí do programovacího jazyka požadavky zadavatele. 
„Kodér“ nemusí umĕt vytvářet algoritmy – bohatĕ stačí, když umí používat ty již známé. 
„Algoritmizátor“ je nĕkdo, kdo vytváří algoritmy. Nemusí nezbytnĕ umĕt programovat, ale mĕl by dokázat ty svoje algoritmy jednoznačnĕ zapsat, což vlastnĕ vyjde nastejno s programováním. 
Pokud algoritmizátor neumí programovat, musí mít k ruce programátora (kodéra), který chápe jeho představy. 
Na to, aby kodér napsal ucelený vlastní program, nepotřebuje vytvořit žádný nový algoritmus. 
Psaní kódu a vytváření algoritmů jsou dvĕ odlišné činnosti. Jedno s druhým souvisí, ale nejedná se o totožné činnosti, ani není vytváření algoritmů nĕjakou vyšší úrovní psaní kódu. 
„Kódování“ neboli psaní kódu je rutinní, řemeslná činnost. 
„Algoritmizace“ neboli vytváření algoritmů je tvůrčí činnost. 

Cílem mého kurzu programování je vyučit řemeslné programátory, kodéry. Zdá se, že cílem kurzu „Informační technologie“ paní Gomes je vychovat algoritmizátory. 


Poznatky ze závĕrečné zkoušky 
Zdá se, že i výsledky studentů u závĕrečné zkoušky potvrzují existenci propasti mezi nejnižšími kategoriemi Bloomovy taxonomie a „opravdovým“ programováním. 
Lze z toho usoudit, že schopnost studentů programovat nelze zredukovat ani na znalost, ani na pochopení, a snad ani na aplikaci znalostí? 
Podle mne lze. 

Gomes [3] Diskuze 
Paní Gomes píše, a já cituji doslova: 
„The students knew in advance that the final exam would have a group of questions that wouldn’t require them to create complete programs. In no way did we tell them that answering those types of questions correctly would be enough to pass (in fact we said the contrary). Just the same, they felt that they had better chances to pass.“ 

Volnĕ přeloženo: 
Studenti vĕdĕli předem, že závĕrečná zkouška bude obsahovat skupinu otázek, které nebudou vyžadovat, aby nĕco naprogramovali. V žádném případĕ jsme jim neslibovali, že správné zodpovĕzené otázky tohoto typu postačí ke složení závĕrečné zkoušky. (Naopak – varovali jsme je, že nepostačí!) I tak ale mĕli pocit, že jejich šance složit zkoušku se (novou metodikou) zvýšily. Při stanovení výsledné známky mĕly výsledky za kategorie 3 až 6 vyšší váhu nežli výsledky za kategorie 1 a 2, a mnoho studentů celkovĕ neuspĕlo, navzdory tomu, že za kategorie 1 a 2 mĕli dobré výsledky. 

Paní Gomes je přesvĕdčená, že studenti musí umĕt nejen přečíst úseky kódu, ale i naprogramovat úseky kódu a celé programy, a že testy a zkoušky by na prvním místĕ mĕly ovĕřovat právĕ tuto schopnost. 
I já jsem o tom přesvĕdčen a v tomto bodu s ní zcela souhlasím. 

Diskuze [4] Význam 
Při stanovení výsledné známky mĕly výsledky za kategorie 3 až 6 vyšší (a to rozhodující!) váhu nežli výsledky za kategorie 1 a 2, 
jinými slovy otázky z kategorií 1 a 2 byly ve zkoušce pouze jako „snadný úspĕch“ pro povzbuzení slabších studentů. 
S posouzením schopnosti studentů programovat nemĕly nic společného 
a paní Gomes se místo nich klidnĕ mohla studentů ptát, kolik noh má židle. 

Pohádkou se jeví i tvrzení o předřazení schopnosti číst kód před schopnost programovat. 
Skutečná schopnost „číst s porozumĕním“ kód se neodehrává na úrovni jednotlivých strojových instrukcí (pokud studenti pracují s assemblerem) ani na úrovni jednotlivých příkazů (pokud studenti pracují s vyšším programovacím jazykem), 
a nespadá do „snadných“ kategorií 1 nebo 2 Bloomovy taxonomie. 
Pro přiblížení této problematiky připomínám, že má-li student opravdu rozumĕt kódu, musí pro každou jednotlivou instrukci (resp. příkaz) vĕdĕt (nebo odhadnout), zda se vůbec provede, případnĕ kolikrát se provede, a ve vztahu k libovolné jiné instrukci, zda se provede dříve nebo pozdĕji. 
Z čehož mi vychází kategorie 4 (Analýza) Bloomovy taxonomie. 
A jak student získá výše uvedené schopnosti, nezbytné pro porozumĕní kódu? 
Teoretizováním? 
Jistĕ by to šlo. 
Ale jako praktičtĕjší se mi jeví studentovy vlastní programátorské pokusy a pozorování, v čem se skutečné chování jeho vlastního skutečného programu liší od jeho zámĕru, a co vše je třeba učinit, aby odlišnost skutečného chování od zamýšleného byla co nejmenší. 

Diskuze [5] Moje shrnutí 
Studenti programování samozřejmĕ musí vládnout schopnostmi na úrovni kategorií 1 a 2 Bloomovy taxonomie. Ale z hlediska jejich schopnosti programovat jsou tak samozřejmé, že je možná má smysl testovat v prvním týdnu po prázdninách, jako rozcvičku. 
Testovat schopnosti na úrovni kategorií 1 a 2 Bloomovy taxonomie v závĕrečné zkoušce (nebo v jakémkoli významném testu) by bylo ztrátou času. 

Gomes [6] Závĕry 
Ty hlavní závĕry jsou: 
– Výsledky dosažené studenty v přestavĕném kurzu Informační technologie (s novou metodikou) jsou podobné výsledkům z předchozích let, z nepřestavĕného kurzu (před novou metodikou). 
– Byla zaznamenána vyšší motivace a vyšší sebedůvĕra studentů, zejména u slabších studentů. 
– Slabší studenti by na úspĕšnĕjší zvládnutí kurzu potřebovali víc času. 
– Konečný cíl zůstává stále stejný – studenti by mĕli umĕt psát programy, které řeší konkrétní problémy. 
– Tým kolem paní Gomes použije tuto metodiku v semestrálním (tedy dvakrát delším) kurzu. 

Závĕry [7] Krotký protinázor 
Výsledky studentů s použitím nové metodiky jsou podobné výsledkům před použitím nové metodiky. Nicménĕ paní Gomes považuje novou metodiku (tu s použitím kategorií Bloomovy taxonomie) za správnou. 
Motivace slabších studentů (a obecnĕ vztah slabších studentů ke kurzu Informační technologie) se díky nové metodice zlepšila, a to je správné. 

Opravdu je to správné? 
Zlepšení motivace studentů (a zejména slabších studentů) je vždy žádoucí. 
Ale v tomto případĕ se obávám, zda nová metodika nedává slabším studentům falešnou informaci, o co v programování doopravdy jde. 
Připomínám, že podle nové metodiky jsou studenti (více než dříve) testováni z otázek, které o jejich schopnosti programovat nevypovídají zhola nic. 
A neznamená tedy jejich zaznamenaná vyšší motivace a lepší vztah ke kurzu Informační technologie pouze vyšší ochotu studentů řešit „problémy“, které mají s programováním málo společného? 


Co dál? 
Článek Anabely Gomes přináší mnoho látky k zamyšlení. 
Mohu se více zamýšlet, do které kategorie Bloomovy taxonomie patří ta která látka, kterou mým studentům přednáším, a ten který problém, který mým studentům zadávám. 
Neočekávám, že bych posílil zastoupení problémů kategorie 1 a 2. 
Pokusím se zkonstruovat nĕjaký test, který potvrdí nebo vyvrátí existenci vazby mezi schopností studenta porozumĕt úsekům kódu a schopností studenta naprogramovat úseky kódu srovnatelné velikosti a složitosti. 
Paní Gomes to nikde výslovnĕ netvrdí, ale zdá se, že o existenci takové vazby pochybuje. 
Já očekávám potvrzení existence takové vazby. 
Tak uvidíme.