
Moja glavna osnova je povezana s podacima i programiranjem na R, ali u ovom članku želim govoriti o svojoj strasti koja čak donosi određeni prihod. Oduvijek me zanimala pripovijedanje i objašnjavanje nečega prijateljima, sugrađanima i kolegama. Također, uvijek mi je bilo lako pronaći zajednički jezik s djecom, ne znam zašto. U globalu, smatram da je odgoj i obrazovanje djece jedna od najvažnijih aktivnosti, a moja supruga je pedagog. Približno prije godinu dana, objavio sam oglas u lokalnoj Facebook grupi, okupio grupu i počeo podučavati Scratch i Python jednom tjedno. Sada imam pet grupa, svoju učionicu u kući i individualne časove. Kako sam došao do ovog načina života i kako točno učim djecu, ispričat ću u ovom članku.
Živim u Kanadi, gradu Calgary, provincija Alberta, tako da će neki momenti biti povezani s lokalnom specifičnošću.
Prostor
Nedostatak prostora za časove bila je od samog početka glavna prepreka. Pokušavao sam tražiti urede i učionice za iznajmljivanje po satima, ali bez velikog uspjeha. Naša sveučilišta i SAIT — lokalni ekvivalent MIT — iznajmljuju učionice s računalima i bez. Cijene su se pokazale nimalo humanima, a na kraju se ispostavilo da sveučilište ne dopušta maloljetnicima, a SAIT iznajmljuje samo svojim studentima. Tako da je ta opcija otpala. Ima mnogo poslovnih centara koji iznajmljuju sobe za sastanke i urede po satima, postoje cijele tvrtke koje nude brojne opcije od punih učionica do prostorija za četiri osobe. Imao sam nade, jer Alberta je naftna provincija, mi od 2014. godine doživljavamo dugotrajnu krizu, i mnoge poslovne površine su prazne. Uzalud sam se nadao, cijene su bile toliko astronomske da nisam mogao vjerovati ni na početku. Vlasnicima je lakše sjediti na praznim uredima i plaćati troškove nego raditi po sniženim cijenama.
V tem trenutku sem se spomnil, da redno plačujem davke, in da morda obstaja kaj pri našem cenjenem državnem organu, natančneje – pri mestu Calgary. Izkazalo se je, da precej obstaja. Mesto ima dvorane za igranje hokeja in druge vrste drsanja, v teh dvoranah pa so sobe, kjer strogi ledeni bojevniki razpravljajo o strategijah prihodnjih bitk. Na kratko, ob vsaki dvorani je nekaj sob z mizami, stoli, belo tablo in celo umivalnikom s čajniki. Cena je povsem razumna – 25 kanadskih dolarjev na uro. Sprva sem se odločil, da bom ure učil po eno in pol ure, zato sem postavil ceno 35 dolarjev na osebo v skupini petih, da pokrijem stroške najema, pa tudi, da si nekaj prislužim. Na splošno mi je bilo v dvoranah všeč, saj je to reševalo eno težavo – večina ruskogovorečih živi na jugu, jaz pa živim na severu mesta, zato sem izbral dvorano nekje na sredini. Vendar so bila tudi določena nevšečna vprašanja. Kanadska birokracija je dobra in prijazna, a, naj povejem milo, je včasih nekoliko okorna. Ni težav, če se privadiš na ritem in načrtuješ vnaprej, toda včasih se pojavijo neprijetni trenutki. Na primer, na spletni strani mesta je enostavno izbrati čas in kraj, rezervirati sobo, vendar plačila ni mogoče opraviti nikakor. Oni sami pokličejo in sprejmejo plačilo s kartico. Lahko greš tudi v urad in plačaš z gotovino. Bil je zabaven, a ne preveč prijeten trenutek, ko sem čakal na njihov klic, da bi plačal za drugo uro, vendar se nisam dochekal, v urad pa sem prišel zadnji dan petnajst minut prepozno. Moral sem se s predrznim obrazom obrniti na varnost in lagati, da je soba rezervirana. Mi, Kanadčani, verjamemo na besedo, mirno so me spustili in niso preverjali ničesar, a jaz ne bi tako ravnal, če bi ljudje že prihajali na uro.
Tako sem delal pozimi in spomladi, nato pa so se zgodile spremembe, ki so postale zadnja kaplja. Prvič, pisarna je bila zaprta za obiskovalce in ponudili so, da plačilo sprejmejo po telefonu za vogalom. Sedel sem najmanj pol ure na hodniku, preden sem se uspel priklicati. Drugič, če je prej prijazna teta sprejela moje plačilo za eno in pol ure, pa je zdaj dvignila slušalko neka punca in dejala, da je plačilo samo za eno uro. Takrat sem imel skupino, ki je imela tri ali dva član, in dodatnih 12,5 $ mi ni bilo povsem odveč. Seveda sem idealist, a če me žena vrže na ulico, potem ne bo nikogar, ki bi poučeval. Takrat sem bil še brez dela.
Inverz sem se odločil, da grem v knjižnico. Knjižnice ponujajo čudovite prostore popolnoma brezplačno, vendar obstaja ena omejitev — ni dovoljeno izvajati komercialnih dejavnosti. Tudi dobrodelne organizacije nimajo pravice zbirati denarja tam. Rekli so mi, da to ne poteka strogo nadzorovano, glavno je, da tam ne zaračunavate vstopnine, vendar zelo ne maram kršiti pravil. Še ena težava je, da so prostori pogosto zasedeni in težko je izvajati učne ure po urniku na enem mestu. Poletje in začetek zime sem poučeval v knjižnicah, moral sem izbrati tiste, kjer je bilo prostih mest, na koncu sem zamenjal pet ali šest knjižnic. Potem sem začel rezervirati prostor dva meseca vnaprej, in to mi je uspelo le v eni majhni knjižnici, v drugih pa so redno primanjkovala mesta ob pravem času. In potem sem se odločil narediti računalniški razred doma. Postavil sem tablo, kupil izdelek po oglasu, drugi mizi in nekaj starih monitorjev. Za delo mi je podjetje kupilo nov močan prenosnik, ker je na mojem računalniku analiza trajala skoraj 24 ur. Torej, imel sem nov star računalnik, star star računalnik, prenosnik, ki mu je moj sin razbil zaslon, in star netbook, na katerem sem sam razbil zaslon. Vse sem jih povezal na monitorje in povsod namestil Linux Mint, razen na netbook, na katerega sem namestil zelo lahek distribucijski sistem, mislim, da je bil Puppy. Imam tudi nov stari prenosnik, kupljen za 200 USD, ki sem ga povezal na televizor. Še kar je pomembno, naš najemodajalec nam je pred kratkim zamenjal okna, in v sobi so zdaj namesto groznega razpadajočega ruševja nova bela okna. Dnevna soba, kuhinja in druga spalnica so namenjene vrtcu, zato je celotna etaža čisto pedagoška. Torej, zdaj je z prostorom vse v redu, preidimo neposredno na poučevanje.
Scratch
Začnem z osnovami programiranja v jeziku Scratch. To je jezik, ki uporablja vnaprej pripravljene bloke, je bil izumljen v MIT. Večina otrok je že videla Scratch v šoli, zato se ga hitro naučijo. Obstajajo vnaprej pripravljeni programi in načrti lekcij, a meni se ti ne zdijo dobri. Eden od njih je nenavaden — ustvari svojo zgodbo, na primer. Celoten program sestavlja nešteto blokov. say '' for 2 seconds. Očitno je, da je bila ustvarjena s strani zelo kreativnih oseb, vendar z takim pristopom lahko naučimo pisati klasično indijsko 'spaghetti' kodo. Od samega začetka govorim o načelih, kot je D.R.Y. Druge zbirke nalog so povsem dobre, a otroci hitro razumejo bistvo in jih začnejo opravljati kot iz mitraljeza. Na koncu za en pouk naredijo tisto, kar bi morali narediti v petih. Iskanje in izbira nalog pa vzame veliko osebnega časa. Na splošno mi Scratch bolj spominja na IDE, kjer se moraš samo zapomniti, kam klikniti in kje iskati. Takoj, ko se učenci bolj-še malo ustalijo, jih poskušam prevesti na Python. Imam celo sedemletno deklico, ki na Pythonu piše preproste programe. Kar vidim kot korist Scratcha, so osnovni pojmi, ki se usvojijo na igriv način. Nekako je vse brez izjeme zelo težko razumeti idejo spremenljivke. Sprva sem hitro prečkal to temo in šel naprej, dokler se nisem srečal s tem, da sploh ne vedo, kaj naj naredijo s tem. Zdaj posvečam spremenljivkam veliko časa in se neprestano vračam k njim. Moram se ukvarjati z trdim klepanjem. Na zaslonu menjam različne spremenljivke in jih prisilim, da povedo svojo vrednost. Prav tako v Scratchu obstajajo nadzorne strukture in preglede vrednosti, kot while, for ili if v Pythonu. Zelo enostavno se podajo, le s povezani cikli so včasih težave. Poskušam dati več nalog s povezanim ciklom, da je dejanje na očitno. Po tem preidem na funkcije. Tudi za odrasle je pojem funkcije lahko nejasen, za otroke pa še bolj. Dolgo razlagam, kaj sploh je funkcija, govorim o tovarni, ki prejme predmete in izda izdelke, o kuharju, ki iz surovih sestavin pripravi hrano. Nato naredimo program 'naredi sendvič' z sestavinami, nato pa iz njega naredimo funkcijo, ki ji predamo sestavine kot parametre. Na učenju funkcij končam s Scratchom.
Python
S Python je vse lažje. Obstaja dobra knjiga 'Python for Kids', po kateri učim. Tam je vse standardno — nizi, vrstni red operacij, print(), input() itd. Napisan je ležernim stilom, s humorom, djeci se sviđa. Ima jedan nedostatak, svojstven mnogim knjigama o programiranju. Kao u poznatoj šali — kako nacrtati sovu. Oval — krug — sova. Od jednostavnih pojmova, prebrzo se prelazi na dovoljno složene koncepcije. Meni treba nekoliko časova da shvatim da se objekat povezuje s metodom tačkom. S druge strane, ne žurim, ponavljam isto na različite načine dok se ne stvori neka slika. Počinjem s promenljivama i ponovo ih obradim, već na Pythona. Promenljive su neka vrsta prokletstva.
Pametan student, koji je pre nekoliko meseci vešto koristio promenljive na skraćenoj verziji, gleda kao ovca u nove kapije i ne može da sabere x i y, koji su jasno napisani na tabli iznad. Ponavljamo! Šta ima promenljiva? Ime i vrednost! Šta znači znak jednakosti? Dodeljivanje! A kako proveravamo jednakost? Dva znaka jednakosti! I tako ponavljamo opet i opet, do potpunog prosvetljenja. Onda prelazimo na funkcije, gde najviše vremena zauzima objašnjenje argumenata. Imenovani argumenti, pozicioni, po defaultu itd. Do klasa još nismo stigli u nijednoj grupi. Osim Pythona iz knjige, učimo popularne algoritme, o tome kasnije.
Učenje
Čas mi je organizovan ovako — pola sata dajem teoriju, proveravam znanje, učvršćujem proći. Sat — laboratorije. Često se zanesem i pričam do jednog časa, pa ostaje pola sata za praksu. Kada sam učio Python, prošao sam kurs Algoritmi i strukture podataka Hirjyanova from MIPT. I really liked his presentation and the structure of the lectures. His idea is that frameworks, syntax, and libraries become outdated. Architecture, teamwork, and version control systems are still premature. In the end, what remains are algorithms and data structures that have long been known and will always exist in a similar form. I myself only remember integers from Pascal in college. Since my students are mostly young, from seven to fifteen years old, I believe it is more important for their future to lay the foundations than to quickly write a platformer in Python. Although they are more eager for a platformer, and I understand them. I provide them with simple algorithms — bubble sort, binary search in a sorted list, reverse Polish notation using a stack, but we analyze each one in great detail. It turned out that modern children generally don't know how a computer works, so I explain that too. I try to connect several concepts in each lecture. For example, a computer — memory/process — memory made of cells (I let them hold a memory chip, guess how many cells are here) — each cell like a light bulb — has two states — true/false — and/or — binary/decimal — 8 bits = 1 byte — byte = 256 variations — logical data type in one bit — integers in one byte — float on two bytes — string on one byte — the largest number on 64 bits — a list and a tuple of previous types. I clarify that in a real computer everything is somewhat different, including the amount of memory for these data types, but the main thing is that we create more complex data types from simpler ones in the process. Data types are probably the most difficult thing to remember. Therefore, I start each class with a quick warm-up — one student names a data type, the next gives two examples, and so on in a circle. As a result, I have managed to have even the youngest kids cheerfully shout — float! boolean! seven, five! pizza, car! During the lecture, I constantly call on one student or another, otherwise they quickly start picking their noses and looking at the ceiling. Plus, I need to check each student’s level of knowledge in the process.
My students never cease to surprise me with both their stupidity and unexpected cleverness. Fortunately, cleverness is more common.
Želel sem napisati več, a tako je že nastal pravi spis. Z veseljem bom odgovoril na vsa vprašanja. Kadar koli kritiko sprejemam z odprtimi rokami, le prosim – bodimo med seboj strpni v komentarjih. To je prijazen članek.
Izvor: habr.com
