
Основната ми работа е свързана с данни и програмиране на R, но в тази статия искам да разкажа за хобито си, което дори носи известен доход. Винаги съм имал интерес да разказвам и обяснявам неща на приятели, съученици и колеги. Освен това винаги ми е било лесно да намирам общ език с деца, не знам защо. Смятам, че възпитанието и обучението на деца е едно от най-важните занимания, пък и жена ми е учител. Около година назад дадох обява в местната група във Фейсбук, събрах група и започнах да преподавам Scratch и Python веднъж седмично. Сега имам пет групи, собствен клас в дома и индивидуални занятия. Как стигнах до тук и по какъв начин обучавам децата, ще разкажа в тази статия.
Живея в Канада, в града Калгари, провинция Алберта, така че някои моменти ще бъдат свързани с местните особености.
Помещение
Наличието на място за занятия беше основен проблем от самото начало. Опитвах се да търся офиси и класни стаи под наем по часове, но не много успешно. Нашият университет и SAIT — местен аналог на MIT — наемат класни стаи с компютри и без. Цените там се оказаха не много хуманни, а в крайна сметка разбрах, че университетът не допуска непълнолетни, а SAIT отдава стаи само на своите студенти. Така че този вариант отпадна. Има много бизнес центрове, които отдават стаи за срещи и офиси по часове, има компании, които предлагат множество варианти от целия клас до стаи за четирима души. Имах надежди, тъй като Алберта е нефтена провинция, при нас от 2014 година има продължителна криза, и много бизнес площи остават празни. Напразно се надявах, цените се оказаха толкова завишени, че в началото дори не повярвах. Наемателите предпочитат да остават с празни офиси и да плащат разходи, отколкото да правят дъмпинг.
В този момент си спомних, че редовно плащам данъци и дали не е имало нещо, свързано с нашата скъпа държава, по-точно — с град Калгари. Оказа се, че определено има. Градът разполага с арени за хокей и фигурно пързаляне, а в тези арени има стаи, в които сурови ледени воини обсъждат стратегии за бъдещи схватки. С две думи, всяка арена притежава няколко стаи с маси, столове, бяла дъска и дори мивка с електрическа кана. Цената е напълно разумна — 25 канадски тугрика на час. Първоначално реших да правя занятия по един час и половина, затова определи цената за занимание на 35 $ на човек в група от петима, за да компенсирам наема и да изкарам нещо за себе си. В общи линии, харесваше ми да работя в арените, това решаваше един от проблемите — повечето руски говорещи живеят на юг, а аз живея на север в града, така че избрах арена горе-долу по средата. Но имаше и неудобства. Канадската бюрокрация е добра и приятелска, но, да кажем по-леко, понякога е малко тромава. Няма проблеми, когато свикнеш с ритъма и планираш предварително, но понякога се появяват неприятни моменти. Например, на сайта на града можеш удобно да избереш време и място, да резервираш стая, но плащането е невъзможно, по никакъв начин. Те сами ти се обаждат по телефона и приемат плащането с карта. Можеш да отидеш в офиса и да платиш в брой. Имаше забавен, но не много приятен момент, когато чаках тяхно обаждане, за да платя за второто занятие, не се обадиха, а в офиса пристигнах последния ден с петнадесет минути закъснение. Трябваше нахално да се приближа до охраната и да лъжа, че стаята е резервирана. Ние, канадците, вярваме на дума, спокойно ме пуснаха и не провериха нищо, но не бих го направил, ако хората вече не бяха тръгнали за заниманието.
Така аз прекарах зимата и пролетта, а след това настъпиха промени, които станаха последната капка. Първо, офиса затвори врати за посетители и предложиха да се извършва плащането по телефона за ъгъла. Прекарах не по-малко от половин час в чакане, преди да успея да се свържа. На второ място, ако преди милата леличка взимаше плащането за време от час и половина, сега телефона вдигна някаква девойка, която заяви, че плащането е само за един час. Тогава групата ми беше или три, или двама души, и излишните 12.5 $ бяха изключително ценни. Аз, разбира се, съм идеалист, но ако жена ми ме изгони на улицата, няма да има кого да обучавам. Тогава все още бях без работа.
И реших да отида в библиотеката. Библиотеките предлагат прекрасни стаи напълно безплатно, но има едно но - не може да се извършва търговска дейност. Даже благотворителните организации нямат право да събират там пари. Казаха ми, че това не се контролира особено, важното е да не взимаш пари на входа, но аз наистина не обичам да нарушавам правилата. Още една проблема - стаите често са заети и е трудно да се водят занятия по график в едно и също време на едно място. Преподавах в библиотеки през лятото и началото на зимата, трябваше да избирам тези, където има място, в крайна сметка смених пет-шест библиотеки. После започнах да резервирам място два месеца предварително и то успях да направя само в една малка библиотечка, в останалите редовно нямаше места за нужното време. И тогава реших да направя компютърен клас у дома. Закачих дъска, купих по обява второ бюро и няколко стари монитора. Работодателят ми купи нов мощен лаптоп, защото на компютъра ми анализът отнемаше почти 24 часа. В крайна сметка, имах нов стар компютър, стар стар компютър, лаптоп, на който детето ми счупи екрана и един древен нетбук, на който аз самият счупих екрана. Свързах ги всички към мониторите и инсталирах навсякъде Linux Mint, освен на нетбука, на който сложих много леко дистрибутив, изглеждаше като Puppy. Имам също стар нов лаптоп, купен за 200 $, който свързах с телевизора. Освен това, не на последно място, нашият хазяин наскоро смени прозорците, и в стаята вече вместо ужасното разнебитено съоръжение има нови бели рамки. Холът, кухнята и втората спалня жена ми държи под детска градина, така че целият етаж стана чисто педагогически. И така, с помещението всичко е наред, да преминем към преподаването.
Scratch
Започвам да давам основите на програмирането с языка Scratch. Това е език, който използва готови блокове, измислен някога в MIT. Повечето деца вече са виждали Scratch в училище, затова бързо го усвояват. Има готови програми и планове на занятия, но на мен не ми харесват изобщо. Някои са странни - създай собствена история, например. Цялата програма се състои от безчислени блокове. say '' for 2 seconds. Ясно е, че е създадено от много креативни личности, но с такъв подход може да се научи да се пише класически индийски spaghetti код. Аз от самото начало обяснявам принципите на D.R.Y. Другите сборници със задачи са доста добри, но децата бързо схващат същността и започват да ги правят като от нашивка. В крайна сметка, за един урок правят това, което трябваше да направят за пет. А търсенето и селекцията на задачи отнемат много лично време. Всъщност, Scratch повече наподобява IDE, където просто трябва да запомниш къде да кликнеш и къде какво да търсиш. В момента, в който учениците се ориентират, се опитвам да ги прехвърля на Python. Имам дори седемгодишно момиче, което пише прости програми на Python. Ползата от Scratch я виждам в основните концепции, които се усвояват в игрален формат. Защо-то на всички без изключение им е много трудно да разберат идеята за променлива. В началото бързо преминах през тази тема и продължих напред, докато не се сблъсках с факта, че те изобщо не знаят какво да правят с това. Сега отделям много време на променливите и постоянно се връщам към тях. Приходи се да се занимавам с глупаво чуккане. На екрана променям различни променливи и ги карам да казват стойността им. Освен това в Scratch има контролни структури и проверки на стойности, като докато, for или if в Python. Те се дават доста лесно, само с вложените цикли понякога има проблеми. Опитвам се да дам няколко задачи с вложен цикъл, за да бъде действието му наочевидно. След това преминавам към функциите. Дори за възрастни понятието функция е трудно за разбиране, а за децата — още повече. Дълго обяснявам какво е функция изобщо, разказвам за фабриката, която получава предмети на входа и издава стоки, за готвача, който прави храна от сурови продукти. После правим програма „направи сандвич“ с продуктите, а след това правим функция от нея, на която продуктите се подават като параметри. С изучаването на функциите завършвам със Scratch.
Python
С Python всичко е по-лесно. Има добра книга Python for Kids, по която уча. Там всичко е стандартно — низове, ред на операциите, print(), input() и т.н. Написана на ясен език с хумор, децата я намират за интересна. Има недостатък, характерен за много книги по програмиране. Както в известен виц — как да нарисуваш сова. Овал — кръг — сова. От простите понятия има рязък преход към доста сложни концепции. У мен отнема няколко часа, за да обясня как обектът се свързва с метода чрез точка. От друга страна, не бързам, повтарям едно и също по различен начин, докато не се образува поне някаква картина. Започвам с променливите и отново ги обсъждам, вече на питон. Променливите са някакво проклятие.
Сообразителен студент, който преди няколко месеца ловко обработваше променливи на скратче, сега гледа като овца на нови врати и не може да сложи х и у, които на видно място са написани на дъската. Повтаряме! Какво има при променливата? Име и стойност! Какво означава знакът за равенство? Присвояване! А как ще проверим равенството? Двойният знак за равенство! И така, повтаряме отново и отново, до пълно просветление. След това преминаваме към функциите, където най-дълго отнема обяснението за аргументите. Именувани аргументи, по позиции, по подразбиране и т.н. Още не сме стигнали до класовете в нито една от групите. Освен питона по книгата, изучаваме популярни алгоритми, за които ще стане дума по-късно.
Собствено обучение
Урокът при мен е устроен така — половин час давам теория, проверявам знания, утвърдявам наученото. Час — лабораторни упражнения. Често увлекателно говоря до час, тогава за практика остава половин час. Когато учих питон, прегледах курс Алгоритми и Структури от Данни Хирянова от МФТИ. Много ми хареса изложението и структурата на лекциите му. Идеята му е следната — фреймворките, синтаксисът, библиотеките — остаряват. Архитектурата, екипната работа, системите за контрол на версиите — все още е рано. В крайна сметка остават алгоритмите и структурирането на данни, които отдавна са известни и ще останат винаги в подобен вид. Аз самият помня само интежерите от университетския Паскал. Понеже учениците ми са основно млади, от седем до петнадесет години, считам, че за тяхното бъдеще е по-важно да се заложат основите, отколкото да напишем платформа на Питон. Въпреки това, те повече искат платформа и ги разбирам. Давам им прости алгоритми — пузырьков, бинарно търсене в подреден списък, обратна полска нотация с помощта на стек, но всеки от нас го разглежда много подробно. Оказа се, че съвременните деца не знаят как всъщност е устроен компютърът, и аз им разказвам. Стремя се в всяка лекция да свържа няколко понятия заедно. Например, компютърът — памет / процес — памет от клетки (давам им да държат плочка от памет, да познаят колко клетки има тук) — всяка клетка е като лампичка — има две състояния — true / false — and / or — бинарна / десетична — 8 бит = 1 байт — байт = 256 варианта — логически тип данни на един бит — цели числа на един байт — float на два байта — string на един байт — най-голямото число на 64 бита — списък и кортеж от предишните типове. Отбелязвам, че в реален компютър всичко е малко по-различно и количеството памет за тези типове данни е различно, но основното е, че ние сами в процеса създаваме по-сложни типове данни от по-прости. Типовете данни са сред най-трудните неща, които трябва да запомним. Затова започвам всяко занятие с бърза загрявка — един ученик назовава тип данни, следващият дава два примера и така на кръг. В крайна сметка успях да постигна, че дори най-малките деца радостно викаят — float! boolean! seven, five! pizza, car! По време на лекцията постоянно дразня единия, после другия, иначе бързо започват да си ровят в носа и да гледат в тавана. Да не забравяме, че е важно и да проверявам нивото на знанията на всеки междувременно.
Учениците ми не спират да ме изненадват както с простотията си, така и с неочакваната си находчивост. За щастие, находчивостта е по-често.
Исках да напиша повече, но и така стана дълго. С удоволствие ще отговоря на всички въпроси. Всяка критика е добре дошла, само молба — да сме по-толерантни един към друг в коментарите. Това е добра статия.
Източник: habr.com
