Nejprve několik slov o samotném kurzu. Ještě před začátkem kurzu dostali naši studenti "předpracovní" úkol, který obsahoval instrukce a cvičení, jež měli před kurzem splnit. Jejich úkoly zahrnovaly instalaci Linuxu, seznámení se s terminálem a základy HTML, CSS a Git.
Výpočty
V následujících čtyřech měsících jsme se scházeli každé dva týdny a krok za krokem jsme objevovali Úžasný svět. Ruby et al. Kurz zahrnoval jazyk Ruby, Ruby on Rails, Javascript a některé oblíbené nástroje pro RoR aplikace jako Devise, Pundit, Sidekiq nebo Carriewave.
Každý student měl také svého mentora, který byl zodpovědný za motivaci studentů a kontrolu jejich práce mezi schůzkami.
Plán útoku
Jako učitel jsem přišel připraven s tříletou zkušeností s Ruby on Rails, 10 let zkušeností s programováním obecně a několik prezentací s otázkami a cvičeními k tomu.
Kromě krátkého kurzu správy Linuxu, který jsem absolvoval předtím, jsem neměl žádné zkušenosti s výukou. Co se týče studentů, věděl jsem jen, že jich bude deset a že pocházejí z velmi odlišných prostředí - pro některé z nich je to první setkání s programováním, zatímco jiní se před zápisem do kurzu snažili naučit C nebo Ruby sami.
Rozhodl jsem se dát si dvě předsevzetí - budu trpělivý a v případě potřeby vše vysvětlím (žádné "to už jsme probrali"). První předsevzetí obstálo ve zkoušce časem, ale to druhé - zcela zjevně - ne. Rozhodl jsem se, že se nebudu nijak zvlášť připravovat, pokud jde o věci, které budu učit - s Ruby/Rails pracuji každý den a cítím se ve svých dovednostech v této oblasti docela jistý. Maximálně jsem si přečetl prezentace, které jsem měl k dispozici.

Výzva
Jedna z prvních věcí, která mi byla hned po začátku kurzu naprosto jasná, byla, že nelze vysvětlit všechno. Je to velmi smutné zjištění pro někoho, jako jsem já, kdo se rád hloubá a objevuje, jak věci fungují, ale v omezeném čase jednoho setkání můžete naučit jen tolik, kolik si studenti zapamatují. Ukázalo se, že můžete být velmi slušným programátorem v Ruby, aniž byste přesně věděli, jak jsou vlastně pole reprezentována v paměti nebo jak přesně funguje Devise.
Výuka probíhala v sobotu a v neděli od 9 do 17 hodin. Je důležité si uvědomit, že výuka je dost vyčerpávající práce - kromě vysvětlování látky musíte být také vždy připraveni odpovídat na související (nebo i nesouvisející) otázky a řešit různé problémy, které vaši studenti mají.
Káva je váš přítel, ale nejdůležitější je výše zmíněná trpělivost. Pro lidi, kteří dosud nekódovali, je třeba se naučit pojmy, které jsou pro programátory samozřejmé - jako jsou cykly, typy nebo dokonce proměnné - a není to okamžitý proces. Pokud programujete už XX let, matematiku považujete za snadnou, dokážete vyjmenovat všechna známá programátorská paradigmata uprostřed noci, může být těžké vžít se do situace člověka, který si není úplně jistý, na kterou stranu znaménka rovnosti patří název proměnné. Je však nezbytné, abyste to udělali. Základní pojmy jako proměnné, cykly nebo pole se stávají tak přirozenými, že je těžké pochopit, jak je někdo může hned nepochopit, ale pro "nás programátory" jsou těžší, než se zdá.
Dalším problémem, zejména na začátku kurzu, bylo vysvětlit tyto pojmy tak, aby byly dobře pochopeny. Podle mého názoru není možné naučit se Rails bez toho, abyste se naučili Ruby - i když vím, že někteří by tvrdili, že to tak není. Je pravda, že Rails má své vlastní vzory a spoustu věcí si lze spíše zapamatovat, než se je naučit na začátku. Nicméně si myslím, že k tomu, aby se člověk stal svědomitým vývojářem RoR, je třeba mírné porozumění Ruby, OOP nebo SQL je nutností. Učit lidi programovat je něco úplně jiného než učit Rails - zatímco u Rails se dá očekávat, že spoustu věcí prostě přijmete nebo jim uvěříte (nikdo nemusí na začátku vědět, jak fungují zpětná volání - stačí, co umí), programátorské koncepty by měly být vysvětleny podrobněji.
Zapojení Síly
Jak se to dělá?
Trpělivě.
Asi to vypadá, že se stále opakuji, ale nemohu dostatečně zdůraznit, jak důležitá je trpělivost. I o mých nejmotivovanějších studentech bylo známo, že tu a tam udělají syntaktickou chybu - je to součást normálního procesu učení a učiteli nezbývá nic jiného než ukázat, v čem chyba spočívá a jak ji opravit. Časem se je naučí opravovat sami, ale to bude trvat mnohem déle než jednu nebo dvě chyby.
Další věc, kterou je třeba poznamenat, je, že Ruby není tak snadné, jak se zdá. Pokud jste se začali učit Ruby se znalostí C/Java/Python, pravděpodobně vám vše připadalo tak čisté, hezké a jednoduché. Zkuste se však nad tím zamyslet a všimnete si toho:
- Co je to za závorky? Mám je používat? Neměl bych?
- Co to je?
vlastní věc? Někdy ji musím použít (např. attr_writer – self.variable = ...), někdy ne (attr_reader – proměnná) a někdy nemůžu! (private def some_method – self.some_method vyhodí chybu)
- Bloky. Vsadím se, že i někteří zkušení programátoři (různých jazyků) by potřebovali chvilku více, než se očekává, aby porozuměli
#inject
Kromě prostého opravování chyb je tu také otázka skutečného předávání znalostí studentům. K tomu budete potřebovat velkou flexibilitu. Někteří studenti se spokojili s tím, že pole je pouze uspořádaný seznam prvků. Jiní potřebovali více vizuální analogie, jako je například police s očíslovanými místy, na které lze věci položit. Zjistil jsem, že stejné věci vysvětluji vícekrát různými způsoby - což je docela náročné cvičení!
Ale jak už jsem řekl, nemůžete vysvětlit všechno. Když jsem vysvětloval vztahy v Rails, bylo to spíše "takhle se to dělá a umožňuje to dělat to a to. Když chceš tohle, je to úžasné". Naštěstí se mě nikdo neptal, jak to funguje - nemyslím si, že juniorští vývojáři potřebují vědět o odrazech.
Situační umístění
Vzhledem k formátu našeho kurzu (setkání každý druhý víkend a dlouhé přestávky) jsme museli zajistit, aby období mezi těmito víkendy byla pro naše studenty produktivní - bez jejich cvičení v tomto čase by kurz vůbec nefungoval.
Někteří z mých spolupracovníků souhlasili, že budou mentory studentů v kurzu. Práce mentorů spočívala v ověřování cvičení, která byla zadána během víkendových setkání, a v pomoci s problémy, které se při jejich plnění vyskytly. Studenti s mentory komunikovali prostřednictvím služby Slack.
Byl jsem mentorem dvou svých studentů. Byla to výrazně odlišná forma výuky - a plná vlastních úskalí. Jednu věc jsem si uvědomil trochu pozdě: dobrý programátor musí být samostatný - měl by se alespoň pokusit vyřešit problémy sám, než požádá o pomoc. A být neustále k dispozici na Slacku mi nejen zabíralo spoustu času, ale také k takové samostatnosti příliš neinspirovalo.
Nechápejte mě špatně - spousta otázek, které jsem jako mentor dostával, byla správná a jejich zodpovězení znamenalo rozšíření znalostí studentů. Je však velmi snadné přejít do "učitelského módu" - a znovu vysvětlovat všechny otázky z víkendových setkání. Z dnešního pohledu si myslím, že role mentora spočívá v přehledu, dodání užitečných odkazů a položení několika otázek, které by mohly pomoci najít řešení. Občasné vysvětlování se může vyskytnout, ale nemělo by tvořit většinu.
Využití zpravodajských služeb
Každý student je jiný. Jedním z největších problémů bylo přizpůsobit tempo kurzu tak, aby co nejlépe vyhovovalo všem studentům. Vzhledem k rozdílnému zázemí a obecné úrovni snadnosti přijímání nových myšlenek mezi studenty je to téměř nemožný úkol.
Náš časový rámec byl 9 setkání - krát 2 dny krát 8 hodin. nás 144 hodin na to, abyste se dostali z 0 na Ruby-hrdinu. Za tuto dobu bylo nejdůležitější zvládnout celý sylabus - což si samo o sobě vynutilo docela rychlé tempo. První tři setkání byla celá o Ruby - pak jedno setkání pro SQL, pak RoR a mezi tím jedno setkání pro JS.
Jako učitel jsem vždy musel vědět, kdo více či méně rozumí části látky, kterou jsem přednášel. Někdy se stačilo zeptat, zda tomu rozumí, jindy jsem dělal malé testy. Například jsem všechny své studenty požádal, aby mi poslali své vlastní definice pojmů z rubínu, jako např. třída, vlastní, metoda, proměnná atd., na Slacku. Pokud by byl nějaký problém nejasný, vrátil bych se k němu a pokusil se ho znovu vysvětlit.
Iluze a realita
Abych to shrnul, učení bylo ještě obtížnější, než jsem si myslel. Může být také velmi obohacující. Nicméně je to tvrdá práce a její účinky nezávisí jen na učiteli - ještě důležitější je při učení vlastní úsilí žáka. Tím se výuka značně liší od programování, kde si obvykle můžete všechny úspěchy i neúspěchy přivlastnit. Je důležité si tento rozdíl uvědomit.
Nutí vás také přemýšlet o věcech, o kterých obvykle nepřemýšlíte - vysvětlování vám také umožní lépe jim porozumět. Výuka z vás tak může udělat lepšího programátora.