Programátorské minimum
Tato kapitola je velmi letmým úvodem do programování. Cílem výuky informatiky není naučit se vytvářet nějaké složité programy. Většina studentů se softwarovým inženýrstvím živit nebude. Přesto má programování ve výuce informatiky své místo:
- S trochou programování mnohem lépe pochopíš ostatní látku v učebnici a co se odehrává v jádru digitálních technologií. Říká se, že dobře něčemu rozumí ten, kdo to dovede vysvětlit. Nejlépe někomu dost natvrdlému — což počítač perfektně splňuje. Abys něco vysvětlil(a) počítači pomocí programu, musíš tomu nejdřív dobře rozumět.
- S trochou programování si lépe poradíš při řešení rozličných problémů, které by jinak řešit nešly — např. pro tebe bude snazší drobně upravit již existující prográmek, aby dělal, co ty chceš.
- S trochou programování se dorozumíš s programátorem, až ho budeš potřebovat.
- Z trochy programování si můžeš udělat přibližnou představu o činnosti programátora a zvážit, jestli by tě nebavilo prozkoumat to hlouběji.
Když zjistíš, že máš o programování zájem víc než trochu, najdeš v závěru kapitoly odkazy na osvědčené materiály a zdroje, se kterými se může dál rozvíjet.
Tato učebnice samozřejmě není jediná možnost, jak se s programováním seznámit. Další úvodní výukové materiály jsou shromážděné např. na této stránce.
Podkapitoly programátorského minima jsou tematické, neodpovídají vyučovacím hodinám. Je na vás, do jaké hloubky se studenty půjdete. Pokryli jsme zde to, co se uplatní na jiných místech učebnice a co zároveň tvoří ucelený základ, který lze dále rozvíjet (aniž by bylo třeba se něco zásadního přeučovat).
Stejně tak záleží na situaci a rozhodnutí v jednotlivých případech, jestli programování věnujete jeden ucelený blok, nebo jednotlivá témata prolnete s další látkou. Doporučujeme dostat se rychle přinejmenším k funkcím, aby si studenti udělali představu, k čemu míříme a jak nám to může pomoct. Získaný náhled pomůže i těm, kteří zprvu nepochytí všechny detaily.
Cílem této kapitoly není naučit Python jako jazyk. Snažíme se studenty seznámit se základními programátorskými konstrukcemi a postupy, které se uplatní i v jiných jazycích. Pokud chcete,
Metodiku výkladu jsme se snažili podřídit několika zásadám:
- Řídící struktury a ostatní programátorské konstrukce uvádíme jako řešení nějaké situace. Máme-li např. potřebu počítat často něco podobného, seznámíme studenty s funkcemi apod. (tedy nikoliv „Milí studenti, existuje klíčové slovo def, používá se takhle, a tenhle zápis způsobí tohle…“).
- Je třeba studentům umožnit postupovat po malých krůčcích. Typický příliš dlouhý krok je mezi slovním zadáním úlohy a zdrojovým kódem, který ji řeší. Studenti by např. měli dostat šanci
- pracovat s již hotovými ukázkami a drobně je upravovat, opravovat a dokončovat;
- číst cizí kód a zjišťovat jeho fungování;
- schopnosti přechodu mezi slovním popisem a zdrojovým kódem pomáhá také požadavek svými slovy popisovat, co daný kód dělá;
- hledání řešení je vhodné strukturovat do fází (např. chápeme zadání, hledáme a ujasňujeme si postup, ubezpečujeme se o jeho správnosti, jeho jednotlivé části postupně převádíme do zdrojového kódu a testujeme);
- studenti by si měli uvědomit, že nemají zase tolik možností, co na každý řádek napsat: definovat funkci, přiřadit hodnotu proměnné, o něčem se rozhodnout atd. — tyto možnosti jsou omezené.
- Ani starší studenty v první hodině neurazí úlohy z Code.org. Velmi snadno (mj. právě díky malým krokům) se díky nim seznámí se základními strukturami a koncepty. Na získanou zkušenost lze přímo navázat při programování v Pythonu.
- Práce ve dvojici nutí kolegy vyjadřovat svoje myšlenky, což jim opět pomáhá nacházet vztahy mezi programovacím a přirozeným jazykem a mezi problémem a jeho řešením.
- Programovací jazyk je pro studenty jazyk cizí. Leckdy vědí, co by chtěli říct, ale nevědí, jaká použít slova. Je normální, že si vše neosvojí hned. Dáváme zde k dispozici množství příkladů a cvičení, samozřejmě neuškodí přidat další. Programování studenti ovládnou právě programováním.
- Studenti by se měli stát svědky toho, jak vlastně programování probíhá, jak programátor uvažuje. Ideální je „živé kódování“, kdy vyučující řeší úlohu, přemýšlí nahlas a postupně vznikající a upravovaný kód promítá studentům. Smyslem pochopitelně není předvést bezchybný zápis programu zpaměti, ale naopak předvést, jak program postupně vzniká (tedy včetně různých chyb, slepých uliček a jejich odhalování). Další výhodou ve srovnání s předvedením hotového řešení je snížení rychlosti, aby studenti stíhali pochopit, jak program funguje a proč.
- Některé příklady lze řešit také např. v tabulkovém kalkulátoru. Klidně v hodině zpracujte obě řešení a porovnejte je! Podobně pokud studenti z dřívějška znají některé dětské programovací prostředí.
Nutno ovšem podotknout, že učebnice sama nestačí, z ní samotné si potřebné dovednosti osvojí jen menšina studentů. Zcela stěžejní je role učitele, který může odhadnout vhodnou obtížnost úloh, poskytovat studentům užitečnou zpětnou vazbu, naživo ukázat, jak programátor myslí atd.
Seznámení s programováním začínáme v interaktivní konzoli Pythonu, použité jako kalkulačka. I mnoho dalších uvedených úloh a příkladů je početních a jinak matematických. Snažili jsme se totiž celou kapitolu držet co nejkratší. Počítat studenti umí, patří k základním možnostem většiny programovacích jazyků a dříve či později je určitě potřeba. Vedlejším důvodem je možnost naznačit, jak lze výuku matematiky a programování propojit ku prospěchu obou předmětů. Použití matematických úloh je přímočaré, ale nebudeme tvrdit, že třeskutě zábavné — zejména pro studenty, kteří si vztah k číslům stále ještě hledají. I pro ně by se ale programování mělo ukázat jako praktické. I těm, kteří neradi počítají, pomůže programování ušetřit dost práce.
Máte-li čas, můžete např. zvýšit důraz na tvořivou stránku programování zařazením práce s animacemi, tvorbu (resp. na začátku úpravu) jednoduchých her atp. — zkušenost říká, že to bude mít u studentů úspěch (a přitom se naučí, co je třeba). Ideální samozřejmě je, pokud už třeba ve Scratchi pracovali na základní škole. Potom jednak snáze pochopí ekvivalentní struktury v Pythonu a jednak vědí, kde lze programovat jednoduše a přitom s multimediálními výstupy (a vstupy).
Kromě interaktivní konzole mohou studenti pracovat na několika místech přímo v učebnici díky nástroji Runestone. Smyslem je maximálně usnadnit experimentování a odstranit každé kliknutí, které zejména slabší studenty odvádí od řešeného problému a znepřehledňuje situaci. Vyzvěte studenty, aby tuto interaktivitu využili ve svůj prospěch.
Co se nakonec naučíš
- Poznat zdrojový kód, vědět, k čemu je.
- Odhadnout, co asi nějaký jednoduchý zdrojový kód dělá.
- Používat základní programátorské nástroje: proměnné, podmínky, cykly, podprogramy.
- Podle potřeby existující program mírně upravit.
- Vyřešit jednoduchý problém pomocí programování.
Jak se naučit programovat
Různé dovednosti se učíme různě. I programování má svá specifika:
- Všechno si hned zkoušej a ověřuj na počítači.
- Když ti něco není jasné, nepokračuj, dokud to nevyřešíš: vlastním průzkumem, se spolužákem, hledáním na internetu, dotazem učiteli nebo jakkoliv jinak. Nemá smysl dělat něco, čemu nerozumíš. Má smysl nakouknout dopředu, třeba ti to pomůže uvědomit si některé souvislosti — potom se ale vrať.
- Pracuj ve dvojici, vzájemně si pomáhejte.
- Vypracovávej cvičení. Programovat se nenaučíš bez programování.
- Veď si zápisky. Vytvářej si katalog komentovaných řešení, ke kterým se můžeš vracet jako k osvědčeným příkladům.
Jestli s programováním dosud žádné zkušenosti nemáš, věnuj chvíli času vyřešení sady úloh z Hodiny kódu — s kreslením, naštvanými ptáky nebo jiné. Hravě se naučíš některé základní principy, které zužitkuješ v následujících kapitolách učebnice.
Kapitoly
- Programovací jazyk Python
- Počítač za mě počítá (základní operace)
- Počítač si za mě pamatuje (proměnné)
- Počítač za mě řeší nudné úkoly (funkce, parametry)
- Počítač za mě dělá jednoduchá rozhodnutí (porovnávání, logické hodnoty, větvení)
- Počítač za mě mluví s uživateli (textové řetězce, vstup a výstup)
- Počítač za mě řeší opakované úkoly (while cyklus)
- Počítač to vidí jinak: zjišťování dělitelnosti (operace modulo, procvičování)
- Počítač zpracovává data hromadně (seznamy, for cyklus, range)
- Počítač někdy nedělá, co chci
- Co ještě počítač umí?