Přejít k navigační liště

Zdroják » Různé » Učili jsme Python na univerzitě, otevřeně a na GitHubu

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

Zkušenosti z výuky předmětu Pokročilý Python, který vznikal otevřeně a na GitHubu.

Nálepky:

Text vyšel původně na webu blog.python.cz a je zveřejněn pod licencí CC-BY-4.0.

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í (© 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ými opravami i rozsáhlejšími radami a vylepšeními. 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.

TwitterWall do terminálu, geekův sen (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:

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

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í.

Čá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.

Komentáře

Subscribe
Upozornit na
guest
0 Komentářů
Inline Feedbacks
View all comments

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.