24 января

Как я учу детей Питону

PythonУчебный процесс в IT
Из песочницы
image

Моя основная работа связана с данными и программированием на R, но в этой статье я хочу рассказать про своё увлечение, которое даже приносит некий доход. Мне всегда было интересно рассказывать и объяснять что-то друзьям, одноклассникам и однокурсникам. Ещё мне всегда просто было находить общий язык с детьми, не знаю, почему. Вообще, я считаю, что воспитание и обучение детей это одно из важнейших занятий из всех, да и жена у меня педагог. В общем, примерно год назад я дал объявление в местной группе на фейсбуке, набрал группу и стал преподавать скратч и питон раз в неделю. Сейчас у меня пять групп, свой класс в доме и индивидуальные занятия. Как я дошёл до жизни такой и как именно я учу детей, я раскажу в этой статье.

Я живу в Канаде, городе Калгари, провинция Альберта, так что некоторые моменты будут связаны с местной спецификой.

Помещение


Наличие места для занятий было с самого начала основной проблемой. Я пытался искать офисы и классы в аренду по часам, но не очень успешно. Наш университет и SAIT — местный аналог MIT — сдают классы с компьютерами и без. Цены оказались там не очень гуманные, а в итоге выяснилось, что универ не пускает несовершеннолетних, а SAIT вообще сдаёт только своим студентам. Так что, этот вариант отпал. Есть много офисных центров, которые сдают комнаты для совещаний и офисы по часам, есть целые компании, которые предлагают кучу вариантов от полноценного класса до комнатки на четыре человека. У меня были надежды, так как Альберта нефтяная провинция, у нас с 2014 года вялотекущий кризис, и многие бизнес-площади пустуют. Зря я надеялся, цены оказались настолько конскими, что я даже поначалу не поверил. Владельцам проще сидеть на пустых офисах и платить издержки, чем демпинговать.

В этот момент я вспомнил, что исправно плачу налоги, и нет ли чего там у нашего дорогого государства, точнее — у города Калгари. Оказалось, что очень даже есть. У города есть арены для игры в хоккей и прочих фигурных катаний, а в этих аренах есть комнаты, где суровые ледовые воины обсуждают стратегии будущих сражений. Короче, при каждой арене есть пара комнат со столами, стульями, белой доской и даже мойкой с чайником. Цена вполне божеская — 25 канадских тугриков за час. Я изначально решил делать занятия по полтора часа, поэтому назначил цену за занятие $35 с носа в группе на пять человек, чтобы компенсировать аренду, ну и себе что-то в карман положить. В целом, мне нравилось заниматься в аренах, это решало одну из проблем — большинство русскоязычных живут на юге, а я живу на севере города, поэтому я выбрал арену примерно посередине. Но были и неудобства. Канадская бюрократия хорошая и дружелюбная, но, как бы помягче сказать, бывает несколько неповоротливой. Нет проблем, когда привыкаешь к ритму и планируешь заранее, но иногда возникают неприятные моменты. Например, на сайте города можно удобно выбрать время и место, зарезервировать комнату, но заплатить нельзя, никак. Они сами звонят по телефону и принимают оплату картой. Можно поехать в офис и заплатить наличными. Был забавный но не очень приятный момент, когда я ждал их звонка, чтобы заплатить за второе занятие, не дождался, а в офис в последний день опоздал на пятнадцать минут. Пришлось с наглой мордой подходить к охране и врать, что комната забронирована. Мы, канадцы, верим на слово, меня спокойно пустили и не стали ничего проверять, но я бы не стал так делать, если бы люди уже не ехали на занятие.

Так я занимался зиму и весну, а потом произошли изменения, которые стали последней каплей. Во-первых, офис закрыли для посетителей и предложили принимать оплату по телефону за углом. Я просидел не менее получаса на проходе, прежде чем дозвонился. Во-вторых, если раньше милая тётенька брала у меня оплату за полтора часа, то теперь трубку взяла какая-то девка и заявила, что оплата только по часу. У меня на тот момент группа была то три, то два человека, и лишние $12.5 были вовсе не лишними. Я, конечно, идейный, но если жена меня выгонит на улицу, то преподавать будет некому. Я тогда ещё был без работы.

И я решил пойти в библиотеку. Библиотеки сдают прекрасные комнаты совершенно бесплатно, но там есть одно но — нельзя вести коммерческую деятельность. Даже благотворительные организации не имеют права собирать там деньги. Мне говорили, что это особо не контролируется, главное прямо там не брать деньги на входе, но я очень не люблю нарушать правила. Ещё одна проблема — комнаты часто заняты и сложно проводить занятия по расписанию в одно время в одном месте. Я преподавал в библиотеках лето и начало зимы, приходилось выбирать те, где есть место, в итоге я сменил пять-шесть библиотек. Потом стал бронировать место за два месяца, и то, получилось так сделать только в одной маленькой библиотечке, в остальных регулярно не было мест на нужное время. И тогда я решил сделать компьютерный класс дома. Повесил доску, купил по объявлению второй стол и пару старых мониторов. По работе мне фирма купила новый мощный ноутбук, потому что на моём компьютере анализ занимал почти 24 часа. Итого, у меня был новый старый компьютер, старый старый компьютер, лаптоп, у которого мой мелкий раздавил экран и древний нетбук, на котором экран раздавил я сам. Я их все подключил к мониторам и поставил везде линукс минт, кроме нетбука, на который поставил совсем лёгкий дистрибутив, кажется, паппи. У меня ещё есть старый новый лаптоп, купленный за $200, я его подключил к телевизору. Ещё, что немаловажно, наш хозяин недавно поменял нам окошки, и в комнате теперь вместо ужасного развалившегося убожества новые белые рамы. Гостиную, кухню и вторую спальню жена держит под детский сад, поэтому весь этаж получился чисто педагогический. Итак, теперь с помещением всё хорошо, перейдём непосредственно к преподаванию.

Скратч


Я начинаю давать основы программирования с языка скратч. Это язык, который использует готовые блоки, придуман в своё время в MIT. Большинство детишек уже видело скратч в школе, поэтому достаточно быстро осваивается. Есть готовые программы и планы занятий, но мне они совсем не нравятся. Одни странные — создай свою историю, например. Вся программа состоит из бесчисленных блоков say '<...>' for 2 seconds. Видно, что её придумали очень творческие личности, но с таким подходом можно научить писать классический индийский спагетти-код. Я же с самого начала рассказываю про принципы типа D.R.Y. Другие сборники заданий вполне хорошие, но детки быстро вникают в суть и начинают делать их как из пулемёта. В итоге, за один урок делают то, что должны были за пять. А на поиск и отбор заданий уходит много личного времени. Вообще, скратч больше напоминает не язык, а IDE, где надо просто запомнить, куда кликнуть и где что искать. Как только ученики более-менее осваиваются, я стараюсь перевести их на питон. У меня даже семилетняя девочка на питоне простые программы пишет. В чём я вижу пользу скратча — в нём такие есть основные понятия, которые усваиваются в игровой форме. Почему-то всем без исключения очень трудно понять идею переменной. Я поначалу быстро пробегал эту тему и шёл дальше, пока не сталкивался с тем, что они вообще не знают, что с этим делать. Теперь я уделяю переменным много времени и постянно к ним возвращаюсь. Приходится заниматься тупым долбежом. Я на экране меняю разные переменные и заставляю говорить их значение. Также в скратч есть контрольные структуры и проверки значений, типа while, for или if в питоне. Они даются достаточно легко, только с вложенными циклами бывают проблемы. Я стараюсь давать несколько задач с вложенным циклом, и чтобы действие его было наглядно. После этого я перехожу к функциям. Даже для взрослых понятие функции бывает неочевидное, а для детей — тем более. Я долго распинаюсь, что такое функция вообще, рассказываю про заводик, которые получает на вход предметы, а выдаёт товары, про повара, который из сырых продуктов делает еду. Потом мы делаем программу «сделай сендвич» с продуктами, а потом делаем из неё функцию, которой продукты передаются как параметры. На изучении функций я заканчиваю со скратчем.

Питон


С питоном всё проще. Есть хорошая книжка Python for Kids, по ней я и учу. Там всё стандартно — строки, порядок операций, print(), input() и т.д. Написана легким языком, с юмором, детям нравится. У неё есть недостаток, свойственный многим книгам по программированию. Как в известной шутке — как нарисовать сову. Овал — круг — сова. От простых понятий слишком резкий переход к достаточно сложным концепциям. У меня на то, что объект скрепляется с методом точкой, уходит несколько занятий. С другой стороны, я не тороплюсь, повторяю одно и то же на разный лад пока не сложится хоть какая-то картина. Я начинаю с переменных и снова долблю их, уже на питоне. Переменные это какое-то проклятие.

Сообразительный студент, который пару месяцев назад ловко щёлкал переменные на скратче, смотрит, как баран на новые ворота и не может сложить икс с игреком, которые строчкой выше явно на доске написаны. Повторяем! Что есть у переменной? Имя и значение! Что значит знак равенства? Присвоение! А как мы проверим равенство? Двойной знак равенства! И так повторяем снова и снова, до полного просветления. Потом переходим к функциям, там дольше всего занимает объяснение про аргументы. Именованные аргументы, по позициям, по умолчанию и так далее. До классов мы ещё ни в одной группе не дошли. Кроме питона по книжке мы изучаем популярные алгоритмы, об этом дальше.

Собственно, обучение


Урок у меня устроен так — полчаса я даю теорию, проверяю знания, закрепляю пройденное. Час — лабы. Часто я увлекаюсь и вещаю до часа, тогда на практику остаётся полчаса соответственно. Когда я учил питон, я просмотрел курс Алгоритмы и Структуры Данных Хирьянова из МФТИ. Мне очень понравилось его изложение и структура лекций. Его идея такова — фреймворки, синтаксис, библиотеки — устаревают. Архитектура, командная работа, системы контроля версий — пока рано. В итоге остаются алгоритмы и структуры данных, которые давно известны и будут всегда в похожем виде. Я сам из институтского паскаля только интежеры и помню. Так как у меня ученики в основном юные, от семи до пятнадцати лет, я считаю, что для их будущего важнее заложить основы, чем поскорее написать платформер на питоне. Хотя, им больше хочется платформер, и я их понимаю. Алгоритмы я им даю простые — пузырёк, бинарный поиск в сортированном списке, обратная польская нотация с помощью стека, но мы каждый разбираем очень подробно. Выяснилось, что современные дети не знают в принципе как устроен компьютер, тоже рассказываю. Я стараюсь в каждой лекции связать несколько понятий вместе. Например, компьютер — пaмять/проц — память из ячеек (даю подержать плашку памяти, угадайте, сколько здесь ячеек) — каждая ячейка как лампочка — есть два состояния — true/false — and/or — бинарная/десятичная — 8бит = 1байт — байт = 256 вариантов — логический тип данных на одном бите — целые числа на одном байте — float на двух байтах — string на одном байте — самое большое число на 64 битах — список и кортеж из предыдущих типов. Я оговариваюсь, что в реальном компьютере всё несколько иначе и другое количество памяти для этих типов данных, но главное, что мы сами в процессе создаём более сложные типы данных из более простых. Типы данных это, пожалуй, самое сложное, что надо запомнить. Поэтому я каждое занятие начинаю с быстрой разминки — один ученик называет тип данных, следующий приводит два примера, и так по кругу. В итоге я добился того, что даже самые юные детишки бодро кричат — float! boolean! seven, five! pizza, car! Во время лекции постоянно дёргаю то одного, то другого, иначе они быстро начинают ковырять в носу и смотреть в потолок. Да и уровень знаний каждого надо проверять между делом.

Мои ученики не перестают меня удивлять как своей тупостью, так и неожиданной сообразительностью. Сообразительностью, к счастью, чаще.

Хотел написать больше, но и так простыня получилась. Отвечу с удовольствием на все вопросы. Любую критику всячески приветствую, только просьба — быть терпимее друг к другу в комментариях. Это добрая статья.
Теги:детиобучениеscratchpython 3
Хабы: Python Учебный процесс в IT
+84
32,2k 212
Комментарии 91
Лучшие публикации за сутки