Učili jsme Python na univerzitě, otevřeně a na GitHubu


Petr Viktorin, Miro Hrončok

Na Fakultě informačních technologií Českého vysokého učení technického v Praze (FIT ČVUT) jsme v zimním semestru 2016/2017 učili volitelný předmět pro magisterské studenty Pokročilý Python (MI-PYT). Na FITu již existoval volitelný předmět pro bakalářské studenty Programování v Pythonu (BI-PYT), avšak přišlo nám, že o Pythonu toho lze naučit mnohem více, než se dá za jeden semestr probrat. Petr učí začátečnický kurz PyLadies, Miro učí na FITu 3D tisk a dříve i tvorbu elektronické dokumentace. Učení nás oba baví a Red Hat, kde oba pracujeme, nás podpořil v myšlence vést na univerzitě předmět. Rozhodli jsme se tedy fakultu oslovit s nabídkou předmětu navazujícího na BI-PYT, abychom pomohli budovat vztahy mezi fakultou (potažmo celou univerzitou) a Red Hatem. Naše cíle byly:

  • postavit předmět tak, aby nepřímo navazoval na BI-PYT;
  • vytvořit volně dostupné materiály pod svobodnou licencí;
  • propagovat Python a svobodný software mezi studenty.
Fakulta informačních technologií
Fakulta informačních technologií (© Utar CC BY-SA)

Pro naplánování předmětu byl hlavně zpočátku zásadní výběr témat. Co je to vlastně pokročilý Python? Nakonec jsme vybrali seznam oblíbených knihoven, které se v Pythonu běžně používají, a přihodili pár témat, na které v BI-PYT nezbylo místo. Věnovali jsme se tak využívání webových API, tvorbě webových stránek, tvorbě rozhraní pro příkazovou řádku i tvorbě GUI, psaní testů a dokumentace, zpracování dat, propojení světa Pythonu se světem C, asynchronnímu programování i MicroPythonu. Konkrétní seznam témat najdete na naucse.python.cz.

Předmět jsme otevřeli ve dvou paralelkách (skupinách) po 24 studentech. Obě se zaplnily už v předběžném zápise a těsně před začátkem semestru vznikal drobný přetlak. Protože jsme tušili, že někdo brzy odpadne, povolili jsme zápis asi 51 studentům. Tři z nich opravdu během prvních týdnů odpadli a oficiálně tak mělo předmět zapsáno přesně 48 studentů. Nic nám tedy nebránilo začít učit.

GitHub a otevřený přístup při tvorbě a výuce předmětu#

Materiály k předmětům na FIT ČVUT jsou dle pravidel fakulty na školním portále Edux a zde jsou většinou dostupné pouze studentům fakulty (a učitelům a dalším, zkrátka jsou neveřejné). Již u předmětu 3D tisk (BI-3DT, vyučuje Miro) se podařilo prosadit veřejně dostupné materiály pod licencí Creative Commons, ale je to na fakultě poměrně výjimečné. Na rozdíl od 3D tisku, kde materiály vznikají na Eduxu, ale jsou veřejné, jsme se rozhodli udělat to u Pokročilého Pythonu jinak: materiály jsme vytvářeli nejen pod svobodnou licencí, ale také naprosto otevřeně na GitHubu, tak, jak jsme zvyklí jak z práce v Red Hatu, tak z přispívání do projektů Pyvce. Na školní portál jsme je pak jen zkopírovali. Ukázalo se, že otevřený přístup nese své ovoce. Studenti z FITu i samouci do repozitáře přispívali drobné opravy i rozsáhlejší rady a vylepšení. Pokud měli problém nebo potřebovali poradit, často založili v repozitáři novou issue a společně s námi a ostatními studenty se dobrali kýžené pomoci.

Protože jsou materiály otevřené, dá se stejný kurz uspořádat i jinde než na ČVUT. Této možnosti jsme využili hned od začátku: před každou lekcí v Praze měl Petr přednášku pro několik zájemců v Brně ve sklípku Kiwi.com, kde se odladily chybky v nových materiálech a zjistili jsme, co nefunguje na jiných počítačích než na těch našich. A po skončení kurzu na ČVUT začalo v Brně další neformální opakování, tentokrát v laboratoři Red Hatu na FI MUNI pod názvem Python a jeho knihovny. Zjistili jsme, že lidem, kteří nestudují informatiku, je potřeba výklad trochu přizpůsobit; materiály by tak nyní měly být srozumitelné všem, kteří znají základy Pythonu.

Na GitHubu ale nevznikaly jen materiály k předmětu. Z téměř každé lekce dostali studenti zadaný úkol, který odevzdávali pomocí gitu. Doporučili jsme GitHub, ale nabídli i alternativu ve formě fakultní instance GitLabu. Tu si nakonec nevybral nikdo. Zpětnou vazbu k úkolům jsme dávali buď osobně, nebo prostřednictvím GitHub Issues. Některé úlohy na sebe navazovaly a studenti tak mohli projít tvorbu projektu od zrodu přes přetvoření na modul až k přidání testů a dokumentace. Zde jsme také využívali známé služby jako PythonAnywhere, Travis CI či Read the Docs. Často pak vznikly na základě úkolů práce, které jsou nyní volně k dispozici na GitHubu (a mnohdy i PyPI) pod svobodnou licencí.

Studenti si mohli na začátku semestru vybrat téma pro prvních pět úloh. Buďto TwitterWall (1, 2, 3, 4, 5, 6) nebo robota, který podle regulárních výrazů označuje issues na GitHubu pomocí štítků (1, 2, 3, 4). V závorce můžete využít odkazy na ty projekty, které studenti zveřejnili.

11/04/2017 08:03:00 (https://twitter.com/naPyvo/statuses/851707139307429888)
Chodíme na Pyvo [naPyvo]: #technologie #umění #design 🎨 Mrkněte na celkem unikátní konferu @SensoriumSK v Bratislavě 🇸🇰, 28.-30. dubna… https://t.co/PaKqiRGm0G

11/04/2017 17:39:52 (https://twitter.com/jmtcz/statuses/851852310833762304)
Jeanne Trojan [jmtcz]: I'm bringing @cedricmaloux from @startupyard to @naPyvo 19.4. He'll talk about their next program in #AI #ML #AR #VR #Robots See you there!

18/04/2017 11:18:57 (https://twitter.com/naPyvo/statuses/854293167063146496)
Chodíme na Pyvo [naPyvo]: 26.-28. května bude #BRNOHACKS, největší hackathon nad otevřenými daty! 👩‍💻 🐊 🇦🇹 🐊 👨‍💻 https://t.co/wGRtnhofiN #opendata #brno #hackaton

18/04/2017 11:23:19 (https://twitter.com/kondrej/statuses/854294266117488640)
Ondřej Kokeš [kondrej]: V Brně by chtěl hackovat každý. https://t.co/OdbP08jCb7

19/04/2017 09:44:43 (https://twitter.com/jschovan/statuses/854631839868362752)
Jarka Schovancova [jschovan]: Kdo jdete dnes @naPyvo ? /cc @kvbik @HonzaKral  @tylersiprova @honzajavorek @aleszoulek @EnCuKou @almadcz @benAbraham

19/04/2017 09:48:17 (https://twitter.com/honzajavorek/statuses/854632738401525760)
Honza Javorek [honzajavorek]: @jschovan @naPyvo @kvbik @HonzaKral @tylersiprova @aleszoulek @EnCuKou @almadcz @benAbraham Já jdu do divadla 🎭 Příště!

19/04/2017 09:48:57 (https://twitter.com/EnCuKou/statuses/854632905724882944)
Petr Viktorin [EnCuKou]: @jschovan @naPyvo @kvbik @HonzaKral @tylersiprova @honzajavorek @aleszoulek @almadcz @benAbraham Já!

19/04/2017 10:00:08 (https://twitter.com/naPyvo/statuses/854635720279031808)
Chodíme na Pyvo [naPyvo]: Určitě víte, že je dneska Pražské PyVo. Ale kdybyste to třeba nevěděli, tak teď už to víte. 🍺🐍🍺
https://t.co/SLzcj4UNEx

19/04/2017 10:58:31 (https://twitter.com/tylersiprova/statuses/854650411596304385)
Tyler Golden [tylersiprova]: @jschovan @naPyvo @kvbik @HonzaKral @honzajavorek @aleszoulek @EnCuKou @almadcz @benAbraham I will come for a while! :-)

19/04/2017 13:41:22 (https://twitter.com/HonzaKral/statuses/854691392865669120)
Honza Král [HonzaKral]: @jschovan @naPyvo @kvbik @tylersiprova @honzajavorek @aleszoulek @EnCuKou @almadcz @benAbraham Ja taky budu

19/04/2017 13:41:54 (https://twitter.com/aleszoulek/statuses/854691529876811777)
Ales Zoulek [aleszoulek]: @HonzaKral @jschovan
TwitterWall do terminálu, geekův sen (převedeno na HTML z výstupu aplikace Marka Suchánka)

Součástí hodnocení předmětu byla i semestrální práce. Každý student si mohl vybrat vlastní téma, které navazovalo na nějakou probranou látku. Téma jsme samozřejmě museli schválit. Nevyžadovali jsme, aby studenti svůj kód zveřejnili, ale důrazně jsme to doporučili. Vzniklo tak mnoho nových open-source projektů na GitHubu:

Raspberry Pi robot
Ondřej Červenka semestrálkou ovládal Raspberry Pi robota (© 2016 Ondřej Červenka, MIT License)

GitHub, kolem kterého se výuka hodně točila, nás ještě před začátkem semestru zásoboval dostatečným množstvím nálepek a několika 100% slevovými vouchery na trička z GitHub Shopu. Studentům s nejlepším hodnocením jsme tak po skončení běhu mohli ještě dodatečně udělat radost. Pokud ve výuce používáte GitHub, určitě si také o swag řekněte.

GitHub nálepky
GitHub nálepky

Tip: Studenti (a učitelé) mohou zdarma využívat GitHub Student Developer Pack. Mimo jiné tak mají k dispozici neomezené množství soukromých repozitářů a nemusíte se tak bát pověstného opisování. My jsme v předmětu využili i službu Travis CI pro soukromé repozitáře, která je jinak placená. V balíčku jsou také cloudové služby, na kterých lze provozovat i Python.

Zpětná vazba#

Po skončení kurzu nám někteří studenti poskytli zpětnou vazbu: buď přes univerzitní anketu, nebo přes formulář, který jsme vystavili na webu. K výsledkům fakultní ankety má přístup jen akademická obec, ale výsledky naší ankety jsou veřejné. Výsledky jsme zpracovali, ale protože oba dotazníky bohužel vyplnilo poměrně málo studentů (a to skoro jen ti, kteří předmět úspěšně ukončili), nejsou příliš relevantní.

GitHub nálepky
Část našeho formuláře pro zpětnou vazbu

Mnohem přínosnější než „známkování“ témat a spokojenosti pro nás byly textové odpovědi, ve kterých nás studenti buď chválili nebo konstruktivně kritizovali. Většina studentů, kteří zaslali poznámku, se shodla na tom, že předmět byl přínosný, ale poměrně těžký a přísně hodnocený. Konkrétně často kritizovali množství a náročnost úkolů. Sypeme si tedy popel na hlavu a pro příští běh předmětu již přemýšlíme jak situaci zlepšit – jak jinak než veřejně na GitHubu.

Další problém, který nám studenti vytkli, byla nedostupnost materiálů a zadání úkolů v předstihu. Tvořili jsme je totiž často na poslední chvíli. V příštím semestru by to u materiálů neměl být problém (ty už existují), a pro úkoly snad zvládneme zveřejnit aspoň předběžná zadání už ze začátku kurzu.

Výsledky studentů#

Předmět nakonec úspěšně dokončilo jen 16 studentů. Často nedokončovali proto, že se rozhodli nedělat semestrální práci, i když průběžné úkoly zvládali a předmět pro ně byl přínosný. Téma práce si zvolilo 25 studentů – téměř všichni ti, kteří dostali alespoň 50 % bodů z úkolů, což byla podmínka úspěšného absolvování kurzu.

Úspěšnost 33 % je vyšší než u bakalářského Programování v Pythonu (BI-PYT) z minulého semestru, kde prošlo 25 % studentů (18 z 71). Magisterské Programování v Ruby (MI-RUB) z tohoto semestru naopak úspěšně dokončilo více lidí – 55 % (38 z 69). (Oba zmíněné předměty jsou volitelné, stejně jako MI-PYT.)

Budeme se snažit předmět zjednodušit, aby příště byla úspěšnost vyšší (a lépe odpovídala tomu, kolik se toho studenti naučili).

Data o průběžném hodnocení studentů a jejich analýza jsou k dispozici na GitHubu.

Přesun materiálů#

Po skončení kurzu jsme materiály z repozitáře ČVUT přesunuli na vznikající portál naucse.python.cz, kam se postupně přesouvají i podklady pro začátečnický kurz PyLadies. Tím dáváme najevo, že materiály nejsou určené jen pro určitou cílovou skupinu (studenty FIT, resp. holky), což některé lidi odrazovalo, a taky zjednodušujeme vytváření nových kurzů, které můžou kombinovat materiály z MI-PYT i začátečnického kurzu.

Zajímavostí je, že podle pravidel fakulty musí být materiály na již dříve zmíněném portále Edux. V průběhu kurzu jsme využili Travis CI a v Markdownu psané materiály z GitHubu jsme konvertovali na dokuwiki syntax a nalévali na Edux. Nyní, když jsou materiály na naucse.python.cz, naléváme na Edux materiály v PDF souborech (stále pomocí Travis CI). Systém, který má toto na starost, je poměrně divná chobotnice využívající Bash, GNU Make a Python, proto nabízíme jako téma semestrální práce přepis do znovupoužitelného Python frameworku, který by se dal využít i v jiných předmětech na FIT ČVUT.

A co dál?#

Nyní se musíme rozhodnout, jestli a jak povedeme předmět příští rok. Podle zpětné vazby bychom asi měli! Musí to ale být v jiném složení – Petr už nebude každý týden jezdit na otočku z Brna do Prahy. Místo toho v Brně vede neformální kurz se stejným obsahem. Na FITu tak bude předmět nejspíš učit Miro společně s jedním z absolventů prvního běhu.

Doufáme, že materiály poslouží i ostatním – ať už pro další kurzy, nebo na samostudium.


Petr Viktorin, Miro Hrončok · @hroncok

Petr Viktorin a Miro Hrončok jsou vývojáři svobodného softwaru v Red Hatu a učitelé Pythonu na FIT ČVUT. Oba objíždějí Pyva v celém Česku.




Komentáře