Programování

Programování představuje zřejmě nejdiskutabilnější část digitálních kompetencí. Proč by měl umět člověk programovat? Čím se liší programování třeba od medicíny nebo ekonomie, jejichž aplikace každý den využíváme, ale současně nemusíme disponovat schopností s nimi metodologicky přesně ani prakticky pracovat?

Můžeme se setkat s následující odpovědí: „Pokud využíváme programy k řešení různých úkolů a životních situací, bylo by dobré vědět, jak vlastně fungují, jak jsou programovány a tvořeny. Tím bude nastolena silnější diference mezi ovládaným a ovládajícím, člověk nebude tak závislý na technologiích a bude k nim schopen kritičtěji přistupovat.“ Rádi bychom ale ukázali, že takové pojetí je principiálně problematické a motivace, proč by programování mělo být součástí digitálních kompetencí, je třeba hledat jinde.

Předně je nutné říci, že znalost základních algoritmických struktur, jako jsou podmínky, procedury, funkce či cykly, nijak nezvyšuje schopnost porozumět komplexním a složitým programům. Aby člověk tušil, co stojí za poměrně banálními operacemi, jako je vyhledávání souborů na disku, musí být poměrně zdatný odborník a samotné programování mu v tom pomůže poměrně málo. Také bychom neměli spojovat informatiku jako vědní disciplínu a programování, které je primárně řemeslem (byť kognitivně i zkušenostně náročným).

Současně platí, že znalost programování nevytváří žádnou kompetenci k tomu umět si opravit pokažený program na počítači. Také ona míra závislosti nebo kritického náhledu se samotným programováním příliš nesouvisí. Ostatně platí, že většina technických aplikací softwaru je natolik složitá, že není možné je zařadit do všeobecného kompetenčního rámce.

Domníváme se, že prameny motivace je možné hledat ve třech oblastech. Tou první je rozvoj algoritmického či informatického myšlení. Tedy analytické schopnosti identifikovat problém, rozložit ho na menší samostatně studovatelné části a navrhnout postup, jak tyto malé části zpracovat. Jde tedy o určitou formu aplikace matematického způsobu myšlení, který má těsnou návaznost na symbolické analytiky Roberta Reicha – ten musí mít právě takovou myšlenkovou schopnost či dovednost.

Druhou motivaci je možné najít v partikulárních oblastech lidské činnosti. Datový žurnalista, astrofyzik modelující hvězdnou atmosféru či člověk hledající podezřelé bankovní transakce mají společné to, že nejsou informatici, ale pro svoji práci potřebují automatizovaně pracovat s daty. V návaznosti na předchozí dvě kapitoly bychom mohli říci, že by měli disponovat kompetencí najít kód pro řešení svého problému a být schopni si ho upravit a vložit do aplikace tak, aby získali potřebný výsledek. Znalost programování je pro ně důležitá proto, aby rozuměli tomu, co hledají, jak to přibližně funguje a jaké mohou být případné úpravy kódu. Stále větší množství profesí bude využívat právě jednoduché skripty na práci s daty a je tedy užitečné s nimi umět pracovat.

Třetí motivace může souviset s tím, že znalost programování vytváří jistý přirozený most či svorník mezi dvěma částmi Digcomp, tedy mezi tvorbou obsahu a řešením problémů. Schopnost ve světě hledat situace, které je možné řešit pomocí programování, je možné jen tehdy, pokud s ním má člověk alespoň minimální zkušenost.

Opět je zde možné vidět jistou distinkci mezi programováním a kódováním. Zatímco znalost kódování, tedy psaní určitého kódu konkrétním programovacím jazykem, člověk univerzálně nepotřebuje, respektive lze očekávat, že se naučí ten jazyk, který bude v praxi potřebovat, znalost jisté myšlenkové struktury je čímsi stabilní a neměnná.

Domníváme se také, že pokud jsme říkali, že lidé mají potíže s tím o svých činnostech uvažovat tak strukturovaně, aby bylo možné pro řešení rutinních úkolů užívat algoritmy, má smysl a význam usilovat o rozvoj právě takového způsobu myšlení. Bude mít totiž významný vliv na konkurenceschopnost, ale také na pracovní produktivitu a i pracovní možnosti daného jedince. Programování tak budeme vnímat jako jistý předpoklad nebo uhelný kámen u tématu řešení problémů s využitím technologií.

Informatické myšlení

Definovat nějak přesně informatické myšlení není snadné. Rádi bychom alespoň naznačili některé směry, kterými by se přemýšlení o této problematice mohlo ubírat. Všichni se shodují na tom, že informatické myšlení není kódování, ale spíše schopnost určitým způsobem přemýšlet o světě kolem nás. Důležité je, že informatické myšlení je myšlení lidí, nikoli strojů. Je třeba o něm uvažovat tak, aby šlo o trvalý specifický lidský myšlenkový statek, a ne o něco, co mohou snadno místo člověka dělat stroje.

Jeanette Wingová říká, že „IM jsou myšlenkové postupy zapojené při takovém formulování problémů a jejich řešení, které umožní tato řešení efektivně provést agentem zpracovávajícím informace.“ Jde tedy v prvé řadě o určitý náhled na to, jak a k čemu využívat informace a data kolem nás. Někdy se říká, že dat mají všichni dostatek, ale je problém vymyslet, k čemu by mohla být dobrá. Doba datová neodkazuje jen k množství dat, ale také k tomu, že člověk hledá a vynalézá nástroje pro jejich využití a také cíle, ke kterým může vést. Druhou klíčovou věcí je, že IM je otázkou schopnosti dobře formulovat problém. Respektive ho vyjádřit dostatečně přesně, jasně a strukturovaně.

Wingová je jednou z klíčových odbornic na IM a zdůrazňuje, že nemůže jít o myšlení mechanické, ale tvořivé. Píše, že jde o nezbytnou dovednost k pobytu v informační společnosti, což je nesmírně zajímavé a silné tvrzení. Kolik lidí, respektive jaká část populace jím disponuje? Nejde o jeden z limitů rozvoje celé informační společnosti?

IM kombinuje a doplňuje matematické a technické myšlení, což jsou dva způsoby řešení problémů, respektive nazírání na svět, které mohou být někdy zaměňované. Používané modely jsou matematické (jako v každé vědě), jsou ale omezené konstrukčními možnostmi strojů. Z druhé strany, informatika je podobná technice, protože produkuje nástroje interagující s fyzickým světem. Vytváří si ovšem také světy vlastní, fyzikou neomezené, tedy takové, které jsou blízké světům matematiky.

Podle Wingové IM samozřejmě zahrnuje konceptualizaci, vyžaduje ovšem uvažování na několika úrovních abstrakce současně, což je pro celé informatické myšlení určující. Do velké míry je právě schopnost abstraktně uvažovat na více úrovních současně jedním ze stěžejních témat celého edukačního procesu. Počítače totiž abstraktně neuvažují. Taková složitá abstraktní úvaha je tedy bytostně antropocentrická.

Zajímavé je si vedle Wingové položit například koncept informatického myšlení podle Google. To zahrnuje sadu technik a dovedností k řešení problémů, které při psaní běžně používaných aplikací (vyhledávání, email, mapy), používají softwaroví inženýři. IM je nicméně využitelné téměř v jakémkoliv předmětu. Součástí IM jsou zejména rozklad problému, rozpoznávání vzorů (např. v grafech na burze, ale i v procesech), zobecňování vzorů (tedy vytváření abstraktních modelů) a navrhování algoritmů.

Rádi bychom zdůraznili to, že Google konkretizuje ony světy, modely abstrakce do dvou klíčových témat – rozpoznávání vzorů a jejich zobecňování. Jde o koncepty, které jsou typické pro libovolné vědecké myšlení a současně o prvky, které mají silné zakotvení ve filosofii vědy a poznání. Opět je zde tedy vyzdviženo to, co je pro člověka typické. Současně je ale nutné mít na paměti, že základním konceptem strojového učení je právě toto – hledání modelů diference různých prvků v určitém souboru. Je tedy nutné hledat způsoby, kterými by bylo možné tyto činnosti provádět tak, aby člověk nekonkuroval strojovému učení. V takovém souboji, jak jsme již vícekrát uváděli, je bez šance na úspěch.

Skriptování a algoritmizace kolem nás

Rádi bychom na tomto místě na několika příkladech ukázali, že skriptování nebo užívání obecně algoritmických („programátorských“) struktur není ničím, co by bylo zcela mimo běžnou zkušenost člověka. Pokud například používáme Word, můžeme mít požadavek, že bychom se chtěli v textu zbavit všech jednopísmenných předložek na konci řádku, protože jde o typografickou chybu.

Postup je poměrně jednoduchý – hledáme výraz, který by popsal jednopísmennou předložku a běžnou mezeru za ní nahradil mezerou pevnou, která ji sváže s následujícím slovem. Stačí tedy dát „Najít a nahradit“ a do pole co vložit “<(?)> “ a do pole čím “\1^s”. Co daná posloupnost dělá, je celkem jasné, ale důležité je, že šlo o algoritmický postup, který využil regulárních výrazů k tomu, aby za člověka zautomatizoval nějakou činnost. Jiným příkladem může být například hromadná úprava fotografií, které potřebujeme všechny najednou zmenšit, na což se užívá dávkové zpracování, které podporuje například IrfanView.

Také matematici, kteří užívají Mapel pro výpočty, statistici s R nebo grafici při sazbě, ti všichni si pomáhají tím, že skriptují. Skriptování neznamená nutně promyšlenou znalost optimálního postupu, ale jde o nápad, jak pomocí technického prostředku zautomatizovat nějakou činnost. Ve výtvarném umění je pak zcela specifickou oblastí počítačové umění, které se stále více prosazuje také v hudbě. Nelze tedy říci, že by šlo jen o doménu technickou nebo matematickou, ale skutečně umět něco jednoduchého naskriptovat ve vhodném nástroji je pro efektivní práci často zcela nezbytné.

Pokud člověk užívá intenzivněji tabulkový procesor, pak se nesporně setkal s makry, která jsou v Excelu tvořená v jazyce Visual Basic. Jde o poměrně jednoduchý jazyk, který má pomocí podmínek, funkcí a cyklů díky makrům zautomatizovat některé úkony. Makra mohou být užitečná jak pro zvýšení efektivity práce, tak především tehdy, když je třeba propojit data z více tabulek. To, co je na makrech zajímavé, je, že skoro vše, co člověk potřebuje, už řešil někdo před ním – makra jsou proto typickým příkladem kódu, který se sdílí, kopíruje a uživatelé jen drobně upravují parametry.

Toto pojetí programování tedy zcela jasně míří ke svorníku mezi problem solvingem pomocí technologií a programováním samotným. Skutečnost, že si člověk uvědomí, co přesně chce dělat a v jakých krocích, je přitom zcela zásadní pro to, aby byl schopen najít hotové kódy, které pak může použít. Zatímco běžná řeč je poměrně volná, co se týče formalizace vyhledávacích požadavků, pokud přesně nevíme, co hledáme v kódu, je jakékoli vyhledávání nesmírně náročné a s nejistým výsledkem.

Rádi bychom také ukázali, proč existuje tolik programovacích jazyků. Lidé se často ptají, jakým jazykem mají začít – zda C, C++, Python, Pascal, Lips, Perl, Java… Obecně platí, že nový programovací jazyk vzniká tehdy, když se objeví třída úloh, které jsou jiným jazykem špatně nebo neefektivně popsatelné. Jen málokdy se stane (pokud se bavíme o „běžném programování“), že by se kód nedal mezi jazyky převést. Jde tedy o to, jakou třídu problémů nebo úkolů chceme řešit a podle toho je vhodné zvolit také programovací jazyk.

Programování jako logická struktura kroků je pro všechny jazyky stejná, byť existují skupiny jazyků, které jsou si bližší (například logické, objektově orientované,…) a které spolu mají společné jen nejobecnější zásady.

Souhlasíme s myšlenkou Wingové, že při programování člověk vytváří nový vlastní svět. Josef Prokeš to dává do souvislosti s tím, že velká část informatiků má o sobě jistou divinizovanou představu, jsou tvůrci, tak jako Hospodin. Liší se jen tím, v jakém světě programují. Toto tvrzení je samozřejmou hyperbolou, ale snad alespoň částečně odkrývá svět, který může být programováním člověku zpřístupněn.