Úvodní strana Seznam blogů Blogeři VIP blogy Registrovat se a založit nový blog

Archiv za Červen 2017

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. 


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


V minulé epizodĕ jsme sledovali … 

Nahlédli jsme do článku Anabely Gomes. Autorka v nĕm popisuje, vysvĕtluje a zdůvodňuje svoje představy o postupném zvyšování požadavků kladených na studenty kurzu programování. Požadavky by mĕly být odstupňovány podle kategorií Bloomovy taxonomie, a nemĕly by „přeskočit“ nejnižší dvĕ kategorie. Jako nepominutelný příklad schopnosti na úrovni nejnižších dvou kategorií paní Gomes uvádí schopnost číst kód. 
Doprovodil jsem to ukázkou mého kódu a také nĕkolika příklady otázek, na které by studenti se schopností číst kód podle mého názoru mĕli umĕt odpovĕdĕt.  

 

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

část 1 Taxonomie a výuka programování 1 (nad článkem Anabely Gomes)
 tx-pg-2   Taxonomie a výuka programování 2 (znovu 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“). 
Poslednĕ jsem rozebíral „Úvod“. Tentokrát se podívám na části „Taxonomie učení“, „Studie“ a „Kontext kurzu“.  

 

Gomes [2] Taxonomie učení   
Část „Taxonomie učení“ je zcela teoretická. Paní Gomes zde připomíná nejznámĕjší a nejpoužívanĕjší taxonomie vzdĕlávacích cílů, od výchozí Bloomovy, přes revidované po nejrůznĕjší odvozené, s odkazy na Fullera a Andersona. Opĕt je zdůraznĕn požadavek (pocházející od Listera) nejprve učit studenty kurzu programování číst kód, a to dříve, než se od nich chce, aby programovali.  

 

Gomes [3] Studie   
V části „Studie“ paní Gomes připomíná odlišnosti jejího kurzu Informační technologie od bĕžných kurzů programování, a jsou to odlišnosti nepřehlédnutelné. 
V kurzu Informační technologie se studenti paralelnĕ učí architekturu počítačů a programování. 
Paní Gomes mĕla v plánování kurzu značnou volnost. Za programovací jazyk, ve kterém se studenti učí programovat, paní Gomes schválnĕ zvolila assembler. Důvodem pro tuto nevšední volbu programovacího jazyka byla snaha přiblížit studentům druhou složku tematické náplnĕ kurzu, totiž architekturu počítače.  

Toto propojení protikladů, softwaru a hardwaru, chce paní Gomes v kurzu rozsáhle využívat. Chce opustit zavedenou představu počítače jako tajemné černé skříňky (neboli black box) a naopak z nĕj učinit pro studenty průzračnou sklenĕnou skříňku, o jejímž vnitřním uspořádání vĕdí vše. 

 

Protinázor [4] Assembler   
V kurzu Informační technologie paní Gomes se učí základy programování. 
Volbou assembleru za programovací jazyk kurzu se ale z obecných základů staly „nepraktické základy“. 
Vždyť co dnes (!!) patří do základů programování? Ukládání dat, hromadné aritmetické výpočty, vĕtvení, cyklení a volání podprogramů jako v dobách Charlese Babbage a lady Ady Augusty? 
To jistĕ ano. 
Ale také „praktické“ činnosti jako práce se soubory, formátování textu, bitová grafika, ukládání do XML a čtení z XML struktur. 
To vše samozřejmĕ lze naprogramovat i v assembleru. 
Všechno lze naprogramovat v assembleru! 
Ale odhadnete ty desítky (ne-li stovky) řádků assemblerovského kódu nutné pro zápis činností, které vyšší jazyk zapíše jediným příkazem? 
Zdlouhavému opisování desítek řádků assemblerovského kódu se lze vyhnout použitím vhodného makro-jazyka (a navíc by se tím studenti naučili další užitečnou vĕc). 
Ale je tu „nĕco za nĕco“ – tím by se studenti „odřízli“ právĕ od toho, proč byl assembler zvolen, totiž od bezprostředního styku se strojovými instrukcemi procesoru.  

 

Protinázor [5] Black box   
Black box je vynikající, vysoce užitečná abstrakce, kterou dal svĕtu behavioralismus. 

V tomto místĕ, předpokládám, všichni čtenáři povstali a mocným hlasem potřikráte zvolali „Sláva behavioralismu!“. 
Dĕkuji. 
Můžete se posadit a číst dál. 

Lze si představit situaci, například při výkladu architektury počítače, kdy učitel vĕdomĕ opustí tuto abstrakci, a nechá studenty nahlédnout do (pomyslných) útrob počítače, a popíše a/nebo vysvĕtlí jim funkci jeho jednotlivých součástí. 
Lze si představit situaci, například při programování v assembleru, kdy jistou roli (případnĕ významnou roli) hrají počty registrů a instrukční repertoár procesoru.  

Avšak při výuce programování ve vyšším programovacím jazyce by takovýto krok – „narušení“ black boxu – byl zbytečný a matoucí. 
Programování „funguje“ nejlépe, nevíme-li o cílovém počítači nic. 
Počty registrů, struktura operační pamĕti a instrukční repertoár procesoru, to jsou okolnosti, o které se programátor nestará. 
Tyto starosti přenechá překladači. 

 


Poznámka k terminologii: 
Zdá se, že termín „behavioralismus“ si pro sebe zabavila politická ekonomie, zatímco filosofie, computer science a vĕda o učení si musí vystačit s termínem „behaviorismus“. Ač nerad, budu to (vĕtšinou) respektovat. Tak či tak jde o princip, že objekty zkoumáme podle jejich zjevného chování, kterým reagují na podnĕty zvenčí.  

Poznámka k abstrakci: Pokud učitel vypráví studentům o aritmeticko-logické jednotce, o čítači instrukcí a o registrech, dopouští se podobné abstrakce jako já, když prohlásím celý počítač za black box. Pouze tu svoji abstrakci umístil o jednu či dvĕ úrovnĕ níže. Neabstrahovanou realitou jsou tenké vrstvy kovů na křemíkové destičce a pohyb elektronů (resp. pozitronů, to v případĕ klasických pozitronických robotů) mezi nimi. Výše zmínĕný neabstrahovaný pohyb částic zaručenĕ nedává smysl žádnému studentu programování. 

 

Gomes [6] Kontext kurzu   
Část „Kontext kurzu“ začíná upozornĕním, že celý studijní obor „Informatické inženýrství“ (v originále „Informatics Engineering“) byl právĕ radikálnĕ přestavĕn v důsledku zmĕn vyplývajících z boloňského procesu . Základní zmĕnou byl přechod od semestrálního kurzu na trimestrální. Studenti tudíž absolvují stejný počet lekcí za poloviční časové období, z opačného pohledu tedy dvojnásobný počet vyučovacích hodin za stejné časové období. 
Co se stane, zhustíte-li kurz do poloviční doby při zachování rozsahu kurzu? 
Nĕkteré následky jsou pozitivní, jiné ménĕ. 
Studentům mohla být poskytována intenzivnĕjši podpora, po dobu trvání kurzu jim učitelé mohli být více k dispozici. 
Též prý studenti mĕli lepší příležitost osvojit si schopnost kritičnosti, sebekritičnosti a diskuze. 
Tomu sice vůbec nerozumím, ale nemám důvod to paní Gomes nevĕřit. 
A pak jsou tu negativní následky. 
Studenti mají ménĕ času osvojit si schopnost řešit problémy obecnĕ a programovat speciálnĕ. 
Paní Gomes tvrdí, že na toto studenti potřebují čas, a tentokrát jí to ochotnĕ vĕřím. 
Dále, studenti mají ménĕ času na práci na samostatných projektech a tím pádem učitelé jim takové samostatné projekty mohou zadávat jen v menší míře. 
Obecnĕ se zdá, že takovýto intenzivní formát kurzu vĕtšinĕ studentů nevyhovuje.  

 

Poznatky [7] Kontext kurzu   
Část „Kontext kurzu“ přináší konkrétní poznatky z průbĕhu kurzu Informační technologie. Tyto poznatky lze uplatnit i ve čtyřletém kurzu Programování na střední škole. 
Hlavním poznatkem je nevhodnost intenzivní formy. Ta naštĕstí v našem prostředí nehrozí – výuka Programování probíhá osvĕdčeným poklidným tempem, a studentům lze zadávat dlouhodobé projekty. 
Můžeme naopak zvažovat, jak postupovat, pokud bychom chtĕli posílit schopnosti, kterým více prospívá intenzivní forma výuky – třeba výše zmínĕnou kritičnost a sebekritičnost. Mĕli by se domluvit a spojit síly učitelé různých předmĕtů? 

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