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, ž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.

 

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.

Algoritmizace každodennosti

Algoritmizace každodennosti představuje nové a poměrně zásadní téma ve vztahu k digitálním kompetencím. Willsonová ve svém článku Algorithms (and the) everyday popisuje skutečnost, že využívání algoritmů a technologií zásadně mění způsoby, jakými řešíme problémy, ale i strukturujeme své vlastní poznání. Jednoduše řečeno – technologie mění způsoby myšlení a to na mnohem hlubší úrovni, než jak jsme si doposud představovali. Lze říci, že již nemá cenu rozlišovat mezi skutečností algoritmy ovlivněnou a nezasaženou – celá naše realita je algoritmy zásadně formována a musíme se naučit v tomto prostředí existovat.

V nejjednodušším pohledu můžeme identifikovat čtyři vrstvy, do kterých algoritmizace každodennosti vstupujeme a které musíme umět hlouběji a systematicky promýšlet.

Využívání techniky v každodenních činnostech – jde o určitou „nejměkčí“ vrstvu, která odkazuje k tomu, že ať již hovoříme o jakýchkoliv činnostech, budou do nich vždy zasahovat určité technologie. Vstáváme prostřednictvím budíků na mobilních telefonech, oblékáme se podle předpovědí počasí ze serveru Yr.no atp. Vlastně bychom jen těžko mohli hledat oblast, ve které se nebude využití techniky systematicky uplatňovat. Jinými slovy; algoritmizace vstupuje do našich životů ve formě konkrétních nástrojů, které nám umožňují mnoho věcí dělat lépe a efektivně.

Do této oblasti spadají ale také další efekty. Například služby jako Tinder mění proces seznamování a navazování přátelství. Do jisté míry mohou být stále vnímané jako společensky problematické, ale faktem je, že tuto oblast bytostně lidské interakce zásadním způsobem proměňují. Seznamování dnes a před třiceti nebo dokonce sto lety je jiné a technologie k tomu zásadně přispívají. Podobně bychom mohli nalézt další oblasti (způsoby nakupování, vyhledávání informací,…) které jsme dříve dělali „jinak“ a díky konkrétním službám a technologiím se transformovala jejich podoba.

Tento aspekt může mít také negativní rozměr, což lze vidět na příkladu sharentingu (nahrávání fotografií dětí na internet), ve kterém je jasně patrné, že rodiče nechápou způsob fungování digitálních technologií a dostupný nástroj, kterým změnili způsob komunikace s okolím může být pro jejich děti velice nebezpečný.

Tato nejnižší (nebo nejdostupnější) vrstva algoritmizace každodennosti je na jednu stranu nejbanálnější – o žádné velké programování v ní nejde, spíše o nějakou uživatelskou zdatnost, ale současně má netriviální dopady na všední životy a běžné procesy, které vykonáváme. Eiband tvrdí, že setkání techniky a člověka může vést k neporozumění a ke komunikačním šumům a to oboustranně. Technika potřebuje očekávané odpovědí, člověk dostupné a pochopitelné rozhraní pro interakci s ní.

Existují činnosti, které vykonáváme každý den, děláme je ručně, a přitom bychom nemuseli. Například si při odchodu z domu vypínáme WiFi na mobilním telefonu a zapínáme data a při návratu děláme totéž v opačném gardu. Tato činnost na první pohled může vypadat banálním dojmem, totiž, že nic nestojí. Ale ve skutečnosti je spojena s nezanedbatelnou kognitivní zátěží – musíme na to myslet a nemyslíme na jiné věci. Jde o důležité téma, protože právě snaha omezovat kognitivní zátěž je podstatná pro rozvoj kreativního myšlení nebo pro možnost se soustředit na skutečně náročné problémy.

Schopnost najít nástroje (typicky v nejjednodušším případě Zapier či IFTTT, v náročnějším umět dávkově zpracovávat úlohy), které nám tyto algoritmicky koncipované úlohy umožní automatizovat bude extrémně důležitá. Povede k vyšší produktivitě, možnosti soustředit se na vlastní práci, sekundárně k šanci získat lepší místo. O světě se tedy budeme muset naučit přemýšlet jako o prostoru, ve kterém algoritmizaci uplatňujeme v mnoha sférách svého života. Diskuse o tom, že celý život není jednoduše algoritmizovaný jsou jistě na místě a vedou k možnostem promýšlet vlastní životy v širší perspektivě, ale současně, jako tvrdí Neyland vedou často ke špatným závěrům. Bez schopnosti využívat algoritmy pro zpracování těchto běžných činností se totiž neobejdeme. Současně budou pravděpodobně postupně směřovat k omezování rutinních činností v práci, což může být příjemným efektem.

Využití algoritmů pro rozhodování představuje pravděpodobně nejkontroverznější a současně nejdůležitější a nejhlubší oblast změn, ve které se nacházíme. Již zmiňovaná Willsonová tvrdí, že algoritmizace znamená změnu distribuce moci a staví před nás zásadní otázku – co je to, co chceme, aby za nás rozhodovaly stroje? To na první pohled může vypadat jako stále futuristický scénář, avšak do velké míry se to děje již nyní. Algoritmy zásadním způsobem participují na tom, co jsme si zvykly v přirozeném jazyce označovat jako myšlení a rozhodování:

  • Gmail dokáže třídit poštu a připomíná nám, že jsme dlouho někomu neodpověděli, čímž poměrně silně ovlivňuje to, jakým zprávám budeme věnovat pozornost (filtruje důležité a nedůležité) a jak bude vypadat struktura a prioritizace naší komunikace.
  • Faceobook se snaží petrifikovat naše názory, což je poměrně známá věc označovaná jako filtrační bubliny. Tato sociální síť se snaží vybírat takové informace, které budou resonovat s našimi názory a postupně vedou k fragmentizaci a polarizaci společnosti, k rozpadu možnosti společně sdílené zkušenosti.
  • Google řadí výsledky vyhledávání podle naší předchozí zkušenosti a filtruje výsledky také podle míst, ze kterých vyhledáváme. Informace, které používáme pro rozhodování se nejsou tedy nikde objektivně umístěné, ale jsou zásadním způsobem formované skrze algoritmy. Už jen proto, že více než první stránku výsledků čte jen málo kdo.

V podobném výčtu by bylo možné pokračovat dále. Rádi bychom ale upozornili ještě na jeden fenomén, který získává stále větší popularitu, totiž na tzv. Bayesian beliefs aplikace – do nich zadáme parametry našeho rozhodování a aplikace nám řekne, jak se máme rozhodnout. Bayesovské algoritmy a statistika se dnes těší všeobecné popularitě napříč vědeckými disciplínami, ale jejich participace na rozhodování je nesmírně zajímavá. Předně pravděpodobně proto, že se v nich člověk zbavuje určité autonomie ve volbě, ale také (z druhé strany) tím, že jde většinou o volby nepříliš intuitivní, ale lepší, než by udělal člověk běžně.

Kahnemann upozorňuje, že kognitivní zkreslení, která byla velice výhodná v primitivních společnostech mohou být pro fungování v moderní společnosti velice problematické. Sledovat to, jaké místo nakonec Bayesian beliefs nástrojům přisoudíme v našich životech bude velice zajímavé a poučné. Dokážeme se na ně spolehnout, budeme se na ně obracet nebo po nich sáhneme jen v těžkých chvílích, kdy si nebudeme vědět rady? Každá z těchto otázek by měla zajímavé psychologické i etické konsekvence a na jejich analýze bude do značné míry záležet to, jako bude společnost v níž žijeme za pět let vypadat.

Schopnost vytvářet vlastní algoritmy na řešení konkrétních úkolů. Zde je třeba několik drobných poznámek. Tou první je ono zaměření na konkrétní úkoly. Cílem ani algoritmizace každodennosti, ale ani DigComp není, aby populace byla složena jen z programátorských profesionálů, ale aby dokázala techniku využívat tak, aby řešila reálné problémy, na které lidé narážejí. Domníváme se, že určitá drobná algoritmizace spojená se schopností vidět problémy, které takto lze zpracovávat bude velice podstatná.

V současné době začínají vznikat databáze algoritmů, které jsou koncipovány tak, že uživatel hledá hotové kousky kódu nebo celé algoritmické struktury, které si jen upravuje pro konkrétní účely. To je pravděpodobně mnohem podstatnější, než schopnost tvořit nějaký vlastní kód od začátku. Musíme se snažit stavět na hotových projektech, které už někdo vytvořil a disponovat schopností takový kód nalézt a upravit. Současně musíme vidět trendy (např. AutoML od Google), které ukazují, že programování bude stále více spojené s interakcí s algoritmem nikoli s kódováním jako takovým.

Pokud se podíváme na celou oblast algoritmizace každodennosti, tak jak jsme ji popsali ve čtyřech vrstvách, je zřejmé, jaký význam má celá „programovací“ kompetence v DigComp rámci – umožní člověku dlouhodobě fungovat ve společnosti, která je algoritmizovaná, nikoliv jako programátor, ale jako aktivní člověk v oblasti myšlení, pohybu na pracovním trhu nebo v oblasti učení se. Odmítnout nebo opomenout kompetence směřující k programování je proto sociálně extrémně nebezpečnou oblastí. Náš model čtyř vrstev současně nabízí poměrně jasný návod či strukturu, jak se v jednotlivých oblastech postupně zlepšovat a rozvíjet.

Používáte starou verzi internetového prohlížeče. Doporučujeme aktualizovat Váš prohlížeč na nejnovější verzi.

Další info