Kõigepealt paar sõna kursuse enda kohta. Enne kursuse algust anti meie õpilastele "eeltöö" ülesanne, mis sisaldas juhiseid ja harjutusi, mis tuli enne kursuse algust täita. Nende ülesanded hõlmasid Linuxi installimist, terminali tundmaõppimist ning mõningaid HTMLi, CSSi ja Giti põhitõdesid.
Arvutused
Järgmise nelja kuu jooksul kohtusime iga kahe nädala tagant ja samm-sammult avastasime The Awesome World of Ruby et al. Kursus hõlmas Ruby keelt, Ruby on Rails, Javascript ja mõned populaarsed tööriistad RoR-rakenduste jaoks, nagu Devise, Pundit, Sidekiq või Carriewave.
Igal õpilasel oli ka mentor, kes vastutas õpilaste motiveerimise ja nende tööde kontrollimise eest kohtumiste vahel.
Rünnaku plaan
Õpetajana tulin valmis 3-aastase kogemusega Ruby on Rails, 10-aastase kogemusega programmeerimisega üldiselt ja mõne ettekandega, kus olid küsimused ja harjutused, mida tuli teha.
Peale lühikese Linuxi juhtimise kursuse, mille olin varem läbinud, polnud mul mingit kogemust õpetamisega. Mis puutub õpilastesse, siis teadsin vaid, et neid saab olema kümme ja et nad on väga erineva taustaga - mõnele neist on see esimene kokkupuude programmeerimisega, samas kui teised püüdsid enne kursusele registreerumist ise C või Ruby keelt õppida.
Ma otsustasin võtta kaks otsust - ma olen kannatlik ja ma selgitan kõike, kui vaja (ei mingit "me juba käsitlesime seda"). Esimene resolutsioon on ajaproovile vastu pidanud, kuid teine - üsna ilmselgelt - mitte. Otsustasin, et ei tee mingit erilist ettevalmistust seoses asjadega, mida kavatsen õpetada - ma töötan Ruby/Railsiga iga päev ja tunnen end selles valdkonnas oma oskustes üsna kindlalt. Kõige rohkem lugesin ettekandeid, mis mul olid.

Väljakutse
Üks esimesi asju, mis mulle kohe pärast kursuse algust täiesti selgeks sai - kõike ei saa seletada. See on väga kurb tõdemus sellise inimese jaoks nagu mina, kellele meeldib süveneda ja avastada, kuidas asjad toimivad, kuid ühe kohtumise piiratud aja jooksul on võimalik õpetada vaid nii palju, et see jääks õpilastele meelde. Tuleb välja, et sa võid olla väga korralik Ruby programmeerija, teadmata täpselt, kuidas on Arrays tegelikult mälus esindatud või kuidas täpselt Devise töötab.
Õppetunnid toimusid laupäeviti ja pühapäeviti kell 9.00-17.00. Oluline on mõista, et õpetamine on üsna kurnav töö - lisaks materjali selgitamisele tuleb alati olla valmis vastama seotud (või mitte nii seotud) küsimustele ja lahendama erinevaid probleeme, mis õpilastel tekivad.
Kohv on teie sõber, kuid kõige olulisem on eespool nimetatud kannatlikkus. Inimeste jaoks, kes ei ole varem kodeerinud, tuleb programmeerijatele ilmselged mõisted - nagu silmused, tüübid või isegi muutujad - õppida ja see ei ole kiire protsess. Kui te olete programmeerinud XX aastat, peate matemaatikat lihtsaks, oskate keset ööd loetleda kõik tuntud programmeerimisparadigmad, siis võib olla raske panna end sellise inimese kingadesse, kes ei ole päris kindel, kummal pool võrdusmärki asub muutuja nimi. Aga see on hädavajalik, et te seda teeksite. Põhimõisted nagu muutujad, tsüklid või massiivid muutuvad nii loomulikuks, et on raske mõista, kuidas saab keegi neist kohe mitte aru saada, kuid "meile, programmeerijatele" on need raskemad, kui nad tunduvad.
Täiendavaks raskuseks, eriti kursuse alguses, oli nende mõistete selgitamine nii, et need oleksid hästi arusaadavad. Minu arvates ei ole võimalik õppida Rails'i ilma Ruby't õppimata - kuigi ma tean, et mõned väidavad, et see ei ole nii. On tõsi, et Railsil on omad mustrid ja palju asju saab pigem meelde jätta kui alguses õppida. Kuid ma arvan, et selleks, et saada teadlikuks RoR arendajaks, on Ruby, OOP või SQL mõõdukas mõistmine kohustuslik. Programmeerimise õpetamine on hoopis teine asi kui Railsi õpetamine - kui Railsi puhul võib eeldada, et paljusid asju lihtsalt võetakse omaks või usutakse (keegi ei pea alguses teadma, kuidas callbackid toimivad - ainult seda, mida nad teha saavad), siis programmeerimise mõisteid tuleks üksikasjalikumalt seletada.
Jõudude kaasamine
Kuidas seda siis teha?
Kannatlikult.
Ilmselt tundub, et ma kordan ennast kogu aeg, kuid ma ei saa piisavalt rõhutada, kui oluline on kannatlikkus. Isegi minu kõige motiveeritumad õpilased on teadaolevalt siin ja seal süntaksivigu teinud - see on osa normaalsest õppimisprotsessist ja õpetajal pole tegelikult midagi muud teha, kui näidata, milles viga seisneb ja kuidas seda parandada. Aja jooksul õpivad nad neid ise parandama, kuid selleks on vaja palju rohkem kui üks või kaks viga.
Veel üks asi, mida tuleb tähele panna, on see, et Ruby ei ole nii lihtne, kui tundub. Kui te alustasite Ruby õppimist C/Java/Python tundides, siis tundus kõik ilmselt nii puhas ja kena ja lihtne. Proovige aga mõelda ja te märkate:
- Miks on sulgudes? Kas ma peaksin neid kasutama? Kas ma ei peaks?
- Mis see on?
ise
asi? Mõnikord pean ma seda kasutama (nt. attr_writer
– self.variable = ...
), mõnikord mitte (attr_reader
– muutuv
) ja mõnikord ma ei saa! (private def some_method
– self.some_method
viskab vea)
- Plokid. Vean kihla, et isegi mõned kogenud programmeerijad (erinevates keeltes) vajaksid oodatust rohkem aega, et mõista
#inject
Peale lihtsa vigade parandamise on veel küsimus, kuidas tegelikult oma arusaamist asjadest õpilastele edasi anda. Selleks on teil vaja palju paindlikkust. Mõned õpilased rahuldusid sellega, et Array on lihtsalt järjestatud elementide loetelu. Teised vajasid rohkem visuaalset analoogiat, nagu riiul nummerdatud kohtadega, kuhu saab asju panna. Leidsin end seletamas samu asju mitu korda erinevalt - mis on üsna keeruline harjutus!
Aga nagu ma juba ütlesin, kõike ei saa seletada. Kui ma Railsis suhteid seletasin, siis oli see pigem "nii teete seda, ja see võimaldab teil teha seda ja seda. Sa tahad seda, see on vinge". Õnneks ei küsinud keegi minult, kuidas see toimib - ma ei usu, et nooremad arendajad peavad peegeldustest teadma.
Situatsiooniline positsioneerimine
Meie kursuse formaadi tõttu (kohtumised igal teisel nädalavahetusel ja pikad vaheajad) pidime tagama, et nende nädalavahetuste vahelised perioodid oleksid meie õpilaste jaoks produktiivsed - ilma nende praktikata ei toimiks kursus üldse.
Mõned minu kolleegid nõustusid olema kursuse õpilaste mentorid. Mentorite ülesanne oli kontrollida nädalavahetuse kohtumistel antud harjutusi ja aidata nende täitmisel tekkivate probleemide korral. Õpilased suhtlesid mentoritega Slacki kaudu.
Ma olin kahe oma õpilase mentoriks. See oli oluliselt erinev õpetamise vorm - ja täis omaette lõkse. Üks asi, millest ma natuke liiga hilja aru sain, on see, et hea programmeerija peab olema iseseisev - ta peaks vähemalt proovima probleeme ise lahendada, enne kui abi paluda. Ja kogu aeg Slackis kättesaadav olemine ei võtnud mitte ainult palju minu aega, vaid ei innustanud ka sellist iseseisvust.
Ärge saage minust valesti aru - paljud küsimused, mida mulle mentorina esitati, olid põhjendatud ja neile vastamine oli õpilaste teadmiste laiendamine. Siiski on väga lihtne minna "õpetaja režiimi" - ja seletada uuesti kõiki küsimusi nädalavahetuse kohtumistest. Tänapäeva vaatenurgast arvan, et mentori roll on anda ülevaade, pakkuda kasulikke linke ja esitada küsimusi, mis võivad aidata lahendust leida. Aeg-ajalt võib juhtuda seletamist, kuid see ei tohiks olla enamus.
Luure kasutamine
Iga õpilane on erinev. Üks suuremaid raskusi oli kohandada kursuse tempot nii, et see sobiks kõige paremini kõigile õpilastele. Erineva tausta ja üldise kerguse tõttu uute ideede vastuvõtmisel õpilaste vahel on see peaaegu võimatu ülesanne.
Meie ajakava oli 9 kohtumist - 2 päeva korda 8 tundi andis meile 144 tundi, et jõuda 0-st Ruby-hero'ni. See oli ülimalt tähtis, et kogu õppekava selle aja jooksul läbi teha - mis iseenesest sundis meid üsna kiirele tempole. Esimesed kolm kohtumist olid kõik Ruby kohta - siis üks kohtumine SQL-i, siis RoR-i ja üks kohtumine JS-i kohta vahepeal.
Õpetajana pidin alati teadma, kes enam-vähem mõistab osa materjalist, mida esitasin. Mõnikord piisas, kui küsisin, kas sellest on aru saadud, mõnikord tegin väikeseid teste. Näiteks palusin kõigil oma õpilastel saata mulle oma määratlused Ruby mõistete kohta, näiteks klass
, ise
, meetod
, muutuv
jne, Slackis. Kui mõni küsimus oli eriti ebaselge, läheksin tagasi ja üritaksin seda uuesti selgitada.
Illusioon ja tegelikkus
Kokkuvõtteks võib öelda, et õpetamine oli veelgi raskem ettevõtmine, kui ma arvasin. See võib olla ka väga rahuldust pakkuv. Sellegipoolest on see raske töö ja selle mõju ei sõltu ainult õpetajast - õpilase enda pingutused on nende õppimisel veelgi olulisemad. See muudab õpetamise väga erinevaks programmeerimisest, kus tavaliselt saab kõik õnnestumised ja ebaõnnestumised enda kätte. Seda erinevust on oluline meeles pidada.
Samuti sunnib see teid mõtlema teemadele, millele te tavaliselt ei mõtle - asjade selgitamine annab teile ka parema arusaamise neist. Sel moel võib õpetamine muuta teid ka paremaks programmeerijaks.