Site icon AppTractor

Как я учился учить программированию

Алексей Поимцев (основатель Progress Engine) в своем новом блоге рассказал про то, как он учил людей программировать.

В мае 2016 года совместно с командой коворкинга #tceh я впервые начал читать курс по программированию на ruby. Изначально это казалось мне не особо сложным. Казалось бы  —  составь программу из самых актуальных тем или возьми готовую у коллег по цеху и знай себе рассказывай все что знаешь. Что может быть проще?

Но спустя некоторое время я в очередной раз убедился что жизнь  —  боль и на своей шкуре почувствовал что ощущали мои преподаватели, пытавшиеся донести крупицу знаний до такого балбеса как я ;) Не-не  —  с учениками мне повезло, вы не подумайте плохого, но одно я понял точно  —  жизнь меня к такому [концу всего сущего] не готовила :) Поэтому я постараюсь поделиться своими соображениями, чтобы у тех, кто в дальнейшем сделает такую же ошибку как я и пойдёт преподавать  —  хоть будете знать к чему готовиться. Итак, я расскажу все, чему я научился за время моего недолгого преподавательского опыта.

Разные платформы

Пересев примерно 8 лет назад на продукцию компании Apple со всей их экосистемой, я казалось бы обрел счастье в жизни. Мало того, что я наконец-то избавился от плохо работающей поделки компании Microsoft, так я еще и обрёл возможность пользоваться всеми преимуществами unix-систем  —  тут тебе и возможность использовать rbenv/rvm, homebrew и кучу других полезных утилит, которые облегчают жизнь простого технаря.

При подготовке курса я не видел большой проблемы в том, что придут на занятия люди, пользующиеся другими платформами. Даже несмотря на предупреждения коллег по цеху, что будет много геморроя, я решил, что скачать и установить основной софт для разработки не составит больших проблем. Как бы ни так  —  почти все первое занятие я бегал между столами и помогал установить необходимый софт студентам  —  у кого-то не ставился ruby, кому-то надо было помочь с установкой PostgreSQL, git или чего-либо еще. Более того  —  на нескольких последующих занятиях все еще возникали проблемы, связанные с Windows-платформой. Например  —  проблемы, вызванные названием аккаунта пользователя на кириллице.

Позже, проанализировав возможные способы решения этой проблемы, мы пришли в мысли, что самым простым было бы подготовить образ системы со всем необходимым установленным софтом для системы виртуализации типа VirtualBox, Parallels или VMWare и инструкцию, чтобы студенты могли достаточно быстро его скачать и развернуть у себя. Но, как говорится  —  хорошая мысля всегда приходит слишком поздно :)

Разный уровень знаний студентов

Еще одной проблемой оказался разный уровень знаний студентов. Одна половина студентов пришла из непрофильных областей (например, бухгалтерии) и для них не то чтобы сложно было понять, что такое класс, так и само понятие переменных пришлось разжёвывать на дополнительном занятии. Более того  —  одной из студенток я вынужден был порекомендовать книгу по программированию для детей, которую я читаю вместе со своей 9-летней дочкой и именно это помогло ей понять некоторые базовые принципы.

С другой стороны были студенты, которые пришли из около-технических отраслей, и вот для них чтение самых основ программирования оказалось скучным и они регулярно меня подгоняли с просьбой не зависать на самых элементарных вещах.

Таким образом, я оказался между двумя крайностями. Наверное, самым оптимальным выходом из такой ситуации было бы разделить студентов на две группы и преподавать раздельно, но это понимание пришло слишком поздно, когда часть студентов отвалилась, мотивировав своё решение тем, что им слишком тяжело усваивать материал, преподаваемый с такой скоростью.

Разная оценка необходимости преподаваемой информации

Когда я учился в университете, я, конечно же, считал, что я лучше знаю, что преподаватели должны мне рассказывать. Именно поэтому я посрался с преподавателем, который читал нам лекцию по CASE/OLAP инструментам и был не допущен к зачёту. Я уж молчу про то, как я выпендривался на лекциях по C++, тыкая преподавателя носом в то, что он рассказывал про то, как вывести строку в консоль, когда я уже освоил ООП. Сейчас, глядя с высоты прожитых лет, я понимаю, что был неправ  —  надо было бросать этот универ к [мужским половым органам] и идти туда, где преподавали микроэлектронику, знаний которой мне явно не хватает, а программирование все равно пришлось изучать заново :)

Аналогичная ситуация оказалась и при чтении моего курса. Далеко не все студенты восприняли положительно мой рассказ про протокол http и его будущее в лице http2 с примерами. Было также еще несколько тем, которые я считаю достаточно важными для общего понимания материала, но опять же  —  у каждого своё понимание, что для него важно. Единственное, что тут можно посоветовать  —  общаться больше со студентами и стараться рассказ про важные на ваш взгляд темы, которые могут быть не очень интересны студентам (например с практической точки зрения), сделать максимально увлекательным и показать реальные примеры его использования в жизни. В принципе  —  это применимо вообще к любому материалу :)

Примеры использования

Еще один очень важный момент  —  это стараться показать студентам как применять весь материал в практической плоскости. Вспомните пример из предыдущего пункта с CASE/OLAP. Готов спорить, что я бы вряд ли бы забил на изучение этой темы, если бы видел её практическое применение, которое я мог бы использовать “прям сдезь прям щаз”. Теория  —  это очень хорошо, но будучи оторванной от практики она не только становится скучной, но и крайне бесполезной. Кстати  —  большинство учебных заведений страдают этой проблемой. Если преподаватель не применяет на практике свои знания, то он существует в мире, оторванном от реальности и постепенно деградирует, отставая от современных трендов.

Необходимость освежить свои собственные знания

Ох, а вот тут я хочу отдельно заострить внимание своих читателей. Даже когда вы постоянно применяете свои знания на практике  —  вам надо освежать свои базовые знания на теоретическом уровне.

Например,  если вы привыкли пользоваться автокомплитом в любимой IDE, то невозможность быстро вспомнить формат команды или список опций на лекции может оказаться неловким моментом. А если вы еще параллельно занимаетесь еще одним языком программирования с похожим синтаксисом? А если на это наложатся трудности тяжёлого рабочего дня? Тут удастся выкрутиться только если у вас такая же лояльная и адекватная группа студентов как у меня :)

Необходимость слайдов

Перед одной из лекций я решил, что пора завязывать со скучной теоретической частью и переходить к хардкорной практике. Одним из стимулов к этому послужили просьбы студентов, наверняка уставших от своего препода-зануды, вещающего про “космические корабли, бороздящие просторы большого театра” :) Я самоуверенно решил, что на этом занятии нам не понадобятся слайды, а мы обойдёмся консолью и IDE. Попробуйте угадать с первого раза, кто выглядел самоуверенным мудаком? Вы совершенно правы :) Студенты, которые до этого не использовали преподаваемый материал, вполне ожидаемо не смогли сразу запомнить всё то, что я писал в консоли и IDE, и попросили меня в дальнейшем так не делать :) Поэтому мне пришлось поставить себе галочку  —  перед каждым занятием обязательно делать слайды, даже если на каждом из них будет всего по 1 строчке кода.

Партнеры и спонсоры

Вот тут я должен сказать, что мне очень повезло с моими друзьями и знакомыми, работающими в других компаниях. Для того, чтобы поддержать моих студентов, я договорился с книжным издательством “Манн, Иванов, Фербер”, которые сделали скидку на все свои книги для моих студентов и с замечательными ребятами из компании JetBrains, которые подарили подписку на свои продукты для ребят. На самом деле  —  это выгодно для всех. Издательство хоть на чуть-чуть, но повысило свои продажи (логично же, что даже несмотря на скидку, они все-таки имеют маржу), а JetBrains приобрели лояльных клиентов (скорее всего студенты продолжат пользоваться их IDE, поскольку они делают действительно качественные продукты). Таким образом ,  все оказались в выигрыше. Единственное, на что стоит обратить внимание  —  иногда имеет смысл делать такие подарки после того, как часть студентов “отвалится”, решив, что им не интересно учиться.

В общем  —  жизнь преподавателя достаточно занятная, хоть и тяжёлая. Надо быть готовым, что помимо основной работы вы будете ходить на лекции, после которых еще долго будете отвечать на вопросы и решать проблемы студентов. Надо быть готовым к тому, что времени на подготовку к лекции будет уходить примерно столько же, сколько и на её чтение, а это значит  —  опять же часы, украденные от работы или от семьи. Надо ли это вам  —  не знаю, но одно могу сказать  —  попробовать однозначно стоит.

Exit mobile version