naucse.python.cz icon indicating copy to clipboard operation
naucse.python.cz copied to clipboard

Snake workshop improvements

Open encukou opened this issue 6 years ago • 13 comments

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.

    • [x] floor division
    • [x] list slicing
    • [x] del (instead of pop())
    • [x] tuples
    • [x] in operator
    • [x] list.remove
    • [x] zip() (use a more advanced example with zipitem-and-the-next with staggred listsjust before a break, so advanced people can think about it while others just clear their head)
    • [x] import
      • [x] random.randrange()
    • [x] return
    • [x] Comments
    • [ ] class? (Without __init__, but with general methods, this seems doable – and using it could save time refactoring!)
    • not decorators – those are best explained on Pyglet
    • etc.
  • [ ] Print out cheatsheets, ideally:

    • [ ] Keyboard
    • [ ] Lists
    • [ ] Dictionaries
    • [ ] Basic control structures (loops, if/else, functions)?
  • [ ] 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:

    • [x] Improvements of controls
    • [x] Toroidal topology
    • [ ] Score keeping
    • [ ] Two-snake multiplayer
    • [ ] Gradually sSpeeding up
    • [ ] Split State, plug it into a provided console or web client
    • [ ] Use pyinstaller to make an `exe file
    • etc.
  • [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:

    • 9-12:30: installation; intro to Python
    • (Lunch)
    • 13:30-14:00 Intro to Pyglet
    • 14:00-15:40 Drawing
    • (Break)
    • 16:10-18:00 Logic (another 15-30 min would be great to polish the game, but we had to end)
  • [ ] 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

encukou avatar Mar 27 '18 16:03 encukou

Can it be done without classes? Using a dict for state maybe?

hroncok avatar Mar 27 '18 16:03 hroncok

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

encukou avatar Mar 27 '18 18:03 encukou

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ě:

  • help() vynechám úplně,
  • rozdám taháky,
  • a na tahácích bude teprve odkaz na dokumentaci.
    • 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ší?

encukou avatar Mar 29 '18 07:03 encukou

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?

hroncok avatar Mar 29 '18 13:03 hroncok

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.

Glutexo avatar Jun 14 '18 13:06 Glutexo

Zname Mu editor https://codewith.mu? Mam to od nekoho z CodeClub, co s tim dela micro:bit, laka me to vyzkouset.

show real

vasekch avatar Aug 26 '18 13:08 vasekch

Znám. Taky mě to láká.

hroncok avatar Aug 26 '18 14:08 hroncok

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.

Glutexo avatar Aug 29 '18 14:08 Glutexo

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.

encukou avatar Aug 29 '18 14:08 encukou

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:

  • Taháky na klávesnice se hodí. Asi by stálo za to udělat dvě varianty a nechat lidi si vybrat, než aby všechny měly obě na jednom papíru.
  • Ostatní taháky nebyly, a nechyběly. Hlavně díky Etherpadu:
  • Použili jsme Etherpad, kam jsem po každém kousku úvodu velestručně shrnul co jsme udělali (a pozval jsem ostatní, aby to rozšířili, případně psali už při výkladu). Taky je super na sdílení odkazů a složitějších kousků kódu.
  • Měl jsem otevřený druhý počítač na materiály, poznámky, Etherpad, takže na projektoru jsem mohl mít jenom to, co účastnice potřebovaly vidět. Velice doporučuju.
  • Měli jsme čtyři lístečky. To je moc. Chceme tři: červený (nefunguje to, mám otázku, nevím jak dál), žlutý (nestíhám, potřebuju trochu času ale vím co dělat) a zelený (mám hotovo, nudím se).
  • Čtyři lístečky na hlasování na ABCD otázky nefungovaly. Papírky od sebe šly špatně rozeznat, a nešlo efektivně zadat ad-hoc otázku a přiřadit možnosti barvám. Zkusil jsem to jen jednou nebo dvakrát. Možná jen špatná implementace; budu časem zkoušet dál.
  • Mít kód (jména proměnných) jenom v češtině nebo jenom v angličtině moc nezvládám. Striktní předěl ale funguje: po úvodu jsem řekl že teď budeme psát profi SW, a bylo to OK. Tady asi pak budu potřebovat konzultaci s jinýma lektorama, co ten workshop zkusí.
  • 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.
  • Připravit předem, co říct v úvodní prezentaci: co je cíl workshopu (a co naopak nenaučíme), kdo jsou koučové, poděkování organizátorce, Etherpad, systém lístečků,
  • Instalace předem (z domu) funguje, pojďme jich dělat víc[zen]! Jen virtualenv (a příkazovou řádku?) možná až na workshopu, to sice fungovalo ale nebyly si tím moc jisté.
  • Intro do Pygletu je dobré. Z ukázkového „mini-editoru“ (na kterém se ukážou atributy a třídy) jde dokonce přejít přímo na implementaci hada.
  • Říct na začátku že jsou laptopy na půjčení (pokud jsou)! Až po workshopu jsem zjistil, že jedna účastnice odešla, protože jí nestíhal počítač :'(

Další iterace bude 13. října.

encukou avatar Sep 03 '18 12:09 encukou

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!

Glutexo avatar Sep 03 '18 14:09 Glutexo

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í :) screen

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!

encukou avatar Sep 03 '18 14:09 encukou

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

    • třídu a instanci pojmenovat jinak: Kotatko je mourek a micka; GameState je game
    • __init__ netřeba použí pak ani u Hada; atributy se prostě nastaví po vytvoření instance
  • len('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).

    • i 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é.

encukou avatar Aug 18 '19 08:08 encukou