Open encukou opened 6 years ago
Can it be done without classes? Using a dict for state maybe?
It turns out the class actually isn't that bad if you talk through how to write it, but don't try to explain the internals too much. (Sadly, the materials don't yet say how to do that.)
Zpětná vazba od kouče Romana:
Ahoj, posílám svoji zpětnou vazbu (z pohledu kouče) k nedělnímu školení PyLadies. Je toho trochu víc (a něco už jsme probírali na nedělní rekapitulaci), tak radši píšu mail než jen body na Google Drive. Nejdřív bych ale chtěl moc poděkovat Ivaně a Petrovi za ohromný kus práce, který odvedli, je úžasné, že se někdo takového úkolu zhostil, navíc úplně dobrovolně. Pro mě osobně to byla výborná zkušenost a jsem moc rád, že jsem se akce mohl zúčastnit.
Díky, že sis dal práci to sepsat!
Poznámky pro Ivanu:
- Koučům by mohlo pomoct, kdybys materiály, které posíláš účastnicím, přeposílala i jim. Nejen, že by si mohli např. vyzkoušet konkrétní doporučené editory, ale hlavně by si mohli udělat lepší představu o tom, do čeho jdou (a co od nich budou účastníci a účastnice očekávat).
DjangoGirls tohle dělají přes "install party" – projet to s koučem přes Hangouts/Skype.
- Bylo by dobré v rámci přípravy na kurz kromě instalace Pythonu a editoru také požádat účastnice o to, aby si vyzkoušely napsat na své klávesnici speciální znaky (*/\<>#!@=+-()[]{}|). Napadají mě dvě možná řešení:
- Účastnice budou mít za úkol si v rámci přípravy najít, jak na své klávesnici napíšou speciální znaky (dostanou jejich seznam) a jak to udělají (pravý alt nebo přepnutí na jinou klávesnici), bude na nich.
- Druhá možnost je, že dostanou za úkol jen zjistit, jak přepnout klávesnici na anglickou. Pak by s psaním speciálních znaků neměl být problém. Zase by to ale přineslo nevýhodu v tom, že by některé mohly mít problém s prohozeným "y" a "z". Pokud by se během celého kurzu používala anglická klávesnice, bylo by také potřeba, aby žádné části ukázkových programů neobsahovaly diakritiku.
Na příštích workshopech tohle plánuju řešit tahákama: https://github.com/pyvec/cheatsheets/blob/master/keyboard/keyboard-cs.svg
Na kurzech s nima mám dobré zkušenosti, jen pro expaty z Polska či Ruska nefungují. Na worshop jsem je – já hlupák starý, hlava děravá – nevzal.
- Další věc je, že na nedělní rekapitulaci zaznělo, že dobrým médiem pro získávání účastnic byl facebook. Možná by proto stálo za to založit na fb skupinu a pozvat do ní účastnice, kouče i všechny ostatní, kdo se na kurzu podíleli. Třeba to nemusí mít žádný okamžitý výsledek, ale mohlo by se to hodit, pokud dojde na nějaké pokračování a bude třeba znovu kontaktovat účastnice. Někteří lidé rychleji a spolehlivěji reagují na zprávu na facebooku než na mail.
Poznámky pro Petra:
- Vlastně mám jenom jednu větší připomínku, ostatní jsou spíš drobnosti nebo neověřené nápady. Hlavní věc je ta, že mi přišel obsah školení příliš nabitý, takže aby bylo možné všechno odvykládat, bylo potřeba udělat nějaké kompromisy. Na jednu stranu je pravda, že úroveň účastnic nebyla úplně vyrovnaná a takhle se nenudily ani ty, které byly trochu napřed, ale přišlo mi, že úplné začátečnice nemohly všechno pobrat.
Takhle ten workshop funguje. Je to přímo založené na DjangoGirls. Není to "nauč se programovat", ale "vytvoř svou první videohru" (nebo v originále webovou stránku). Jde o to ty lidi nadchnout, ukázat jim že to není to zas taková magie a je v lidských silách rozpohybovat na obrazovce příšerku. O učení jde až v druhé řadě. Za jeden den toho stejně moc nenaučíš.
Napadly mě dvě možnosti, co by se s tím dalo dělat:
- Vypustit programování hada a věnovat se víc do hloubky základům. Co se týče obsahu, přijde mi, že to, co bylo odvykládáno za dopoledne, by na celý den stačilo. Kdyby měly účastnice prostor na vlastní experimenty nebo by dostávaly úkoly, mohlo by je to možná naučit víc (je ale pravda, že to asi nebylo primárním cílem kurzu). Na druhou stranu je pravda, že odnést si ze školení naprogramovanou hru, je něco, co může později (po skončení kurzu) sloužit jako dobrá motivace.
- Další možností by mohlo být osekání programované hry, jak jen je to možné. Myslím si, že zatěžovat účastnicím hlavu s OOP nemá cenu, kód je sice (z pohledu zkušeného programátora) čistší, ale z pohledu začátečníka, který vidí třídy poprvé, je to jen zkomplikování. Navíc OOP nebylo v kurzu vysvětleno, takže mi přijde, že není správné ho používat. Kromě OOP by se možná dalo zjednodušit i vykreslování hada. Ukázka s vykreslením pouze zelených čtverců byla, myslím, dost názorná, a vlastní vykreslování jednotlivých částí těla hada (tj. funkce, která bere list se souřadnicemi částí těla hada, a vykreslí ho) by se dalo dát účastnicím už hotové. To by umožnilo vynechat výklad funkce zip(), slovníků a generování názvů souborů s částmi hada. No a kdyby na konci kurzu přeci jen přebýval čas, byla by možnost tyhle vynechané věci dovysvětlit.
O možných zjednodušeních jsem přemýšlel hodně, a dát stav do slovníku místo do třídy jsem i naprototypoval, abych to mohl porovnat. Třída je možná složitější, ale na druhou stranu ji nemusí pochopit do detailů – stačí ukázat použití a říct k tomu základní koncept. Atributy se pak oproti klíčům slovníku používají výrazně líp.
Hotovým kouskům kódu bych se rád vyhnul – z toho pak je místo "napsala jsem vlastní hru" spíš "uplácala jsem golema, ale pořád k životu potřebuje kouzelný šém". Samozřejmě ne vždycky to jde (viz to OpenGL na alpha blending), ale vykreslení mi přijde hezké pořádně projít.
Používání OOP bez vysvětlení mi taky vadí. Rád učím "zdola nahoru", od základních bloků. Ale čím dál víc si uvědomuju, že na některé věci se hodí jiný přístup :)
- A teď už jen drobné poznámky
- Možná by bylo dobré říct už na začátku, že v konzoli (jak v cmd, tak Pythonu) lze používat šipku nahoru a tab, mohlo by to zrychlit vývoj.
- Na začátku by také mohlo být užitečné ukázat, že text se z konzole (nebo z projektoru) nemusí opisovat, ale že (a jak) je možné si ho zkopírovat někam vedle do Wordu nebo Notepadu.
+1 a +1, tohle jsem ještě neměl v poznámkách, připsáno!
- Přišlo mi, že pro některé účastnice bylo Atom dost složité IDE. Možná by bylo jednodušší, kdyby se (aspoň na Windows) programovalo jednotně v Notepadu (přiznávám ale, že to může být dost subjektivní názor).
Notepad určitě ne. Neumí pořádně UTF-8, takže se pak musí místo psaní prvních příkazů řešit problémy s kódováním, v každém dalším souboru, účastnice které nepoužívají diakritiku zjistí že to není potřeba a pak v půlce kurzu najednou diakritiku použijí a... prostě ne.
Když už jednodušší editor, tak spíš něco jako Gedit, ale to mě zas lidi nařknou z linuxocentrismu :)
- Přišlo mi (a několikrát se to objevilo i ve zpětné vazbě od účastnic), že se během kurzu dost často opisovalo podle projektoru. Možná by bylo užitečnější kód projít, pak ho nasdílet, a pak případně zadat jednoduchý úkol, na kterém by si účastnice ověřily, že látku pochopily. Čas teď strávený opisováním by se tedy využil na užitečnější činnost (vymýšlení kódu účastnicemi školení).
Vymýšlení kódu je, bohužel, spíš pak spíš na dlouhodobý kurz, respektive teda na domácí úkoly. Na workshopu na to není čas. A času to zabere opravdu příliš hodně. Nasdílení je zase druhý extrém – tam odpadá takové to soustředění na kód (včetně hledání chybějících dvojteček), které myslím na workshop patří; bez toho to je málo vlastní výtvor.
- Možná bych se nevzdával českých názvů proměnných, pokud se budou používat konzistentně. Vzpomínám si, že když jsem se sám začínal seznamovat s programováním, česky pojmenované proměnné mi pomáhaly v rozlišení toho, co si mohu pojmenovat po svém (proměnné, konstanty) a toho, co jsou klíčová (rezervovaná) slova jazyka, která nelze změnit. Při pojmenování proměnných anglicky sice vznikne (stejně jako v případě použití OOP) v očích profesionálního programátora hezčí a čistší kód, pro začátečníka ale bude komplikovanější.
Víc konzistence to chce určitě. O tom jestli česky nebo anglicky mám pochyby, ale nahlodáváš mě úspěšně :)
- Asi by bylo dobré také ukázat použitelnou dokumentaci, kterou můžou začátečníci při programování použít. Myslím si, že na rozdíl od příkazu "help", by pro začátečníky byla více použitelná webová dokumentace https://docs.python.org/3/, která je vizuálně relativně přívětivá, a ve které lze pohodlně vyhledávat.
Problém oficiální dokumentace – a zvlášť té o standartních datových typech – je, že se v ní začátečník spolehlivě ztratí. Spíš příště:
- Pokud by to bylo časově možné, asi by bylo příjemné dělat více pauz (alespoň krátkých na WC). Některé účastnice musely odcházet v průběhu výkladu, takže jim část utekla.
+1
- No a nedá mi to nepochválit systém lístečků. Fungovaly skvěle, obzvlášť ty červené. Jejich využití na zpětnou vazbu na konci byl také výborný nápad.
Celý koncept je zkopírovaný ze Software Carpentry; or PyLadies to zase převzaly Czechitas :)
Nerad bych, aby poznámky ode mě vyzněly jako nějaká kritika, naopak, akce se mi moc líbila, byl to pro mě výjimečný zážitek a jsem moc rád, že jsem se mohl jako kouč zúčastnit. Pokusil jsem se jen vypsat věci, které by možná mohly být na nějaké příští akci ještě lepší. Moc děkuju za ohromný kus práce, který jste odvedli, a doufám, že se uvidíme na nějaké další akci.
Díky moc! Většinou se naše myšlenky překrývají, ale je fajn to takhle projít v textové podobě.
Moje poznámky jsou kdyžtak jako checklist do dalšího běhu na https://github.com/pyvec/naucse.python.cz/issues/356
Můžu tam tenhle mail zkopírovat, ať je veřejně a může inspirovat další?
Notepad určitě ne. Neumí pořádně UTF-8, takže se pak musí místo psaní prvních příkazů řešit problémy s kódováním, v každém dalším souboru, účastnice které nepoužívají diakritiku zjistí že to není potřeba a pak v půlce kurzu najednou diakritiku použijí a... prostě ne.
Když už jednodušší editor, tak spíš něco jako Gedit, ale to mě zas lidi nařknou z linuxocentrismu :)
Thonny?
Nahradit editor, který neumí pořádně UTF-8, editorem, který neumí pořádně zacházet s klávesnicí (např. skočit na konec řádku, napsat složený znak) a myší (např. označit část textu poklepáním), mi nepřijde úplně jako to pravé ořechové.
Jinak sám bych měl výhradu vůči Atomu, že je docela nenasytný. Na starších počítačích, a že se jich objevuje, může instalace i spouštění trvat (obzvláště oproti poznámkovému bloku) věčnost. Akorát teda… co jiného? Sublime je placený, Vi ani Emacs fakt nechceš, Visual Studio Code je prašť jako bouchni jak Atom (Electron)… no a nic ostatního není multiplatformní. Ale to vlastně asi nemusí vadit.
Zname Mu editor https://codewith.mu? Mam to od nekoho z CodeClub, co s tim dela micro:bit, laka me to vyzkouset.
Znám. Taky mě to láká.
Ještě ke klávesnici. Česká klávesnice má velkou výhodu, že na ní jdou napsat všechny věci, které jsou potřeba pro programování v Pythonu, a k tomu navíc ještě česká (a dokonce i anglická!) písmena. Na v česku koupených počítačích ty blešky bývají i nakreslené. Stisknout AltGr není o nic horší než stisknout Shift, některá národní rozložení jej dokonce používají běžně pro psaní svých vlastních bukev.
QWERTY varianta na Windows má navíc ještě rozložení speciálních znaků stejné jako americká, takže slouží vlastně jako takový přepínač na americkou klávesnici, který ale funguje jen, když jej držíš. Na Macu se tak dokonce chovají obě mutace a pomocí ⌥ se tam kromě programátorských výmyslů běžně píší i jiné užitečné věci jako třeba €
či „
, “
a …
.
Z těchto a i z dalších důvodů mi přijde přeučování na jiné (a proč zrovna americké?) rozložení jako zbytečné a spíše škodlivé. Když už něco učit, tak lépe používat nástroj, který už máš, který už umíš používat a na který už jsi zvyklý. Věřte tomu, nebo ne, ale lidi občas píší závorky, zavináče, rovnítka a podobné věci. Změnou rozložení se najednou všechno toto (ne jen y/z) někam přesune a přichází frustrace. Jako by už jí tak nebylo ze začátku dost.
Když už něco učit, tak lépe používat nástroj, který už máš, který už umíš používat a na který už jsi zvyklý.
Amen.
Druhá instance je za námi! Povedla se, ale je stále co zlepšovat. Zpětná vazba je na Gistu. Braindump, než to zapomenu:
import
a random.randrange
(a random.shuffle
) jsem dal, jako vsuvku, v půlce části o seznamech – jako odpověď na otázku jedné účastnice, která mi krásně nahrála.Další iterace bude 13. října.
Ten bod s druhým počítačem mi napovídá, že jsem ještě neviděl software, který by uměl zrcadlení druhé obrazovky (zde projektoru) hodit do obyčejného okna na první obrazovce. Díra na trhu!
Stačí vybrat na projektoru menší rozlišení a zobrazit jen výřez. Používal jsem často a úspěšně, na dvouhodinovky je to ideální :)
Opravdový druhý monitor je ale mnohem lepší. To že je u jiného počítače nevadí. Nutnost sdílet všechno přes Etherpad je spíš výhoda – účastníci to pak mají taky!
Poznámky ze včerejší iterace:
Úvodní slajdy jsou k dispozici pro příště.
taháky na klávesnici jsme rozdali jen těm co je chtěly/potřebovaly
Úvod do slovníků zredukovat na nejnutnější – vyhledání hodnoty, přidání záznamu, přepsání záznamu
Slovníky jdou dát až za zbytek teorie (tentokrát nám takhle líp vyšlo načasování přestávky)
Udělat úvod do tříd (Kotatko
) s metodou a atributem (bez __init__
); hada psát přímo s třídou
Kotatko
je mourek
a micka
; GameState
je game
__init__
netřeba použí pak ani u Hada; atributy se prostě nastaví po vytvoření instancelen('Ola'.upper())
je hodně matoucí
Úvod do Pygletu s mini textovým editorem je nakonec super: stejně jako úvod do Pythonu všechno je ukázáno dvakrát (jednou samotný koncept a podruhé spojení všeho do hry).
schedule_interval
by to chtělo ukázat už v tom editoruŽluté lístečky se opravdu nedají rozeznat od zelených. Příště modré.
Braindump of TODOs after the first iteration of the Snake workshop.
(Checked means solved in my fork, not necessarily merged here)
[ ] Adapt Django Girls' Intro to Python, extending it to include every language/stdlib feature we'll need (with exceptions below). We need some examples of functionality; let's use stuff that'll make people go oh, I knew this already! afterwards.
del
(instead ofpop()
)in
operatorlist.remove
zip()
(use a more advanced example withzip
– item-and-the-next with staggred lists – just before a break, so advanced people can think about it while others just clear their head)import
random.randrange()
return
class
? (Without__init__
, but with general methods, this seems doable – and using it could save time refactoring!)[ ] Print out cheatsheets, ideally:
[ ] Introduce a simple & consistent poor man's versioning scheme very early after writing the first
.py
file: copy the file to another name, then clear the current file.[ ] About the class: explain what a "class" is conceptually (a "blueprint"), show how to write one, but don't go in detail and don't aim for thorough understanding.
[x] Don't split the game into two files. That takes too much time and is hard to manage on a projector.
[x] Warn about naming a file
pyglet.py
,random.py
& similar[x] Edges of the screen should kill the snake; don't do the toroidal topology. It's exciting for the mathematician, but messes up tile selection which is already more than complicated enough. Move this to a "possible extensions" section at the end
[ ] Do a "possible extensions" section at the end. There should be proper materials to walk you through:
State
, plug it into a provided console or web client[x] Discourage creating the virtualenv on the desktop (actually, just fix #313 and make sure the result is usable for workshops)
[ ] Skip intro to Pyglet; explain all that on the game itself: draw, move, and resize a green square. Maybe add a simple mouse handler with
print()
, which won't be used in the actual game (that makes it possible to ask "what do the arguments mean?" without giving an answer).[ ] Use one language (Czech/English) consistently.
[x] Include answers to the hard problem. With diagrams. (This includes removing the code snippet with
???
, which isn't syntax-highlighted nicely.)[ ] Better time management. Set a fixed schedule. The first workshop wasn't ideal, but its timings were:
[ ] Have regular WC breaks.
[ ] Make a properly dumbed down-version of the intro to command line. Mention ↑ and Tab; avoid
mkdir
and other stuff you can click up graphically. Mention how to copy from/to the command line. Merge improvements to the beginners' course intro.[ ] https://github.com/pyvec/naucse.python.cz/issues/667