Что скрывается за курсом по Python: история разработчика

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Привет, Хабр. Меня зовут Дмитрий Демидов, я работаю бэкенд-разработчиком и поделюсь опытом создания курса-интенсива по основам программирования на Python. Я преподаю в Нетологии: начал с открытых занятий, потом стал вести лекции на курсах по Python и базам данных. Статья пригодится, если вы тоже хотите преподавать или даже разрабатываете курс. Даже если нет, просто загляните за кулисы создания образовательных проектов.

Как я дошёл до идеи сделать курс

Дмитрий Демидов

Разработчик в Яндексе и преподаватель Нетологии

Попробовать преподавание я хотел уже давно. Но меня всё время останавливали вопросы:

  • Что я вообще могу рассказать полезного?

  • Вдруг меня спросят о том, чего я не знаю?

Поэтому курса не было, а я вёл открытые занятия. Цель открытого занятия — рассказать большой группе участников про какой-то язык программирования или стек технологий, про профессию разработчика и положение дел на рынке труда. Сделать это нужно так, чтобы слушатели заинтересовались профессией, а в идеале — записались на большой курс.

Программа моего открытого занятия была примерно такой:

  • Какое место занимает Python в мире разработки.

  • Где используется Python.

  • Почему его любят разработчики из самых разных сфер.

  • Как начинать и строить карьеру в разработке.

  • С чего начать изучать программирование Python.

  • Чем занимаются веб-разработчики.

  • Сколько они зарабатывают.

  • Как учиться и не терять мотивацию.

Я старался давать максимум полезной информации, рассказывал о своём опыте и пути в профессию, давал ссылки, отвечал на все вопросы слушателей и усовершенствовал занятия в соответствии с реакцией аудитории.

Со временем программа утряслась, перестала сильно меняться от занятия к занятию, и я заскучал. Во-первых, мне стало неинтересно говорить одно и то же. Во-вторых, я хотел идти дальше, а именно попробовать преподавать: вести лекции и вебинары, давать знания. 

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

В тот период я работал из дома и неожиданно для себя подсел на игровые стримы по Hearthstone. Со временем я заметил, что смотрю их не только для развлечения и убийства времени во время прокрастинации, но и учусь играть. Увидев какую-то фишку на стриме, я захотел зайти в игру и попробовать. Рейтинг в игре рос, я чувствовал себя всё более уверенно.

И мне пришла идея — а не сделать ли стрим с разработкой реального приложения в качестве открытого занятия? Стримы с программированием я тоже видел, и мне показалось, что это хорошая идея. С ней я пришел к Нетологии.

Какие задачи я ставил перед курсом

Я хотел не только попробовать новый вид деятельности — разработку и самостоятельное проведение курса — но и еще две вещи:

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

Основная проблема, которую я пытался решить — переход от теории к практике.

Я начал заниматься программированием в институте, записался на дополнительный курс по С++ на нашем факультете и так узнал некоторые основы. После института я работал в другой сфере, но продолжал в свободное время заниматься программированием: проходил курсы на только-только появившихся тогда образовательных сайтах, читал книги, зависал на Хабре.

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

Я знал основы SQL, но не знал, как подключиться к базе данных, чтобы ввести запрос.

Я знал, как сверстать простую HTML-страничку, но не понимал, что происходит от момента ввода адреса в адресную строку браузера до отображения этой самой страницы.

Я выучил структуры данных, даже список с пропусками однажды упомянул на собеседовании, но не понимал, для чего они используются в программировании и как вообще создаются программы.

Раз я не мог закрыть пробел между теорией и практикой, то, возможно, есть и ещё люди, которым это нужно. Эта идея стала основой курса. Он, кстати, бесплатный.

2. Подготовить студентов к большому курсу

На момент создания курса я уже преподавал на основной программе. Уровень студентов был разным, часто приходили люди совсем «с нуля». Конечно, им было сложнее разбираться с новым материалом. Мне же как преподавателю удобнее было работать с людьми, которые уже что-то знают.

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

Как я определил аудиторию

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

  • Начал самостоятельно изучать программирование и уже что-то знает.

  • Смотрит курсы, но не может перейти к практике.

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

Тут проявилась первая проблема. Аудитория открытых занятий максимально широкая. Мой курс планировался как альтернатива, а в последствии — замена открытых занятий, поэтому целиться только в один сегмент было нельзя. Пришлось добавить к аудитории ещё две группы потенциальных студентов и расширить материал для них:

  1. Абсолютные новички. Никогда не занимались программированием, но хотят попробовать. Ищут курс, который поможет им стартовать.

  2. Люди с опытом программирования на другом языке. Возможно, с не самым свежим: школа, институт, работа. Хотят посмотреть возможности Python и начать использовать его.

Конечно, такое расширение ЦА размыло материал курса. Просто серию стримов сделать не получалось, так как новичкам нужно было рассказать основы. Но и долго застревать на базовых моментах не хотелось. Во-первых, курс был не про это, во-вторых, опытные пользователи могли заскучать. Однако, от расширения аудитории были и плюсы.

Мы ввели такое определение программы: набор инструкций и данных, над которыми эти инструкции выполняются.

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

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

Далее сначала рассказали про типы данных, с которыми мы можем работать в Python, а потом более подробно рассказали об инструкциях. Подкрепили рассказ практикой на реальной программе. В реальности оказалось, что на этом этапе опытные пользователи активно помогают новичкам: отвечают на вопросы, дают ссылки на дополнительные материалы.

На что я ориентировался при создании курса

Конечно, на стримы.

Сам я смотрел и могу рекомендовать стримы Хекслета и Федора Борщева. В качестве образца, как нужно рассказывать теорию, я взял видео Тимофея Хирьянова. Я помню его старый курс на Stepik, который понравился мне логичностью и стройностью изложения материала.

Еще один курс, которым я вдохновлялся — fast.ai Я проходил его пару раз, и мне очень понравился их подход, основанный на практике. Студенты начинают писать код и даже обучать модели машинного обучения с первого занятия.

Последний курс-книга, аналогов которому я не встречал в Рунете, — Учебник по разработке Телеграм-ботов. Благодаря ему я понял, что разработать бота вполне по силам даже с минимальным набором знаний. Студентов курса с вопросами, которые выходят за рамки программы, я отправлял именно к этому учебнику.

Что я даю в блоке теории

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

Именно поэтому для своего первого курса я взял только основы Python — языка, на котором пишу коммерческий код уже более восьми лет. Мы рассматриваем только базовый синтаксис языка:

  1. ввод и вывод строк на экран,

  2. условные конструкции,

  3. циклы,

  4. создание и использование функций.

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

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

Из планов рождаются презентации для самого занятия
Из планов рождаются презентации для самого занятия

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

Какие практические задачи я придумал

Курс максимально ориентирован на практику. В первой части курса мы разрабатываем простейшее консольное ToDo приложение. Оно позволяет добавлять задачи на определённую дату (даты никак не валидируются и хранятся в текстовом формате) и выводить список задач на определённую дату.

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

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

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

Теперь программа может выполнять разные команды в зависимости от пользовательского ввода. Но делает это всего один раз. Это приводит студентов к изучению циклов. Мы обсуждаем цикл while, который позволяет организовать бесконечный цикл работы программы, и цикл for, с помощью которого делаем красивый вывод списка задач на экран.

План занятия
План занятия

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

Почему телеграм-бот?

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

Можно было сделать веб-приложение. Но для этого нам пришлось бы познакомиться с вёрсткой. Даже если бы мы делали полностью server side рендеринг, основы HTML пришлось бы изучить. А в курсе не должно быть моментов, когда мы предлагаем ученику просто скопировать код, не объясняя, что происходит. Даже не изучаемые в курсе темы объектов и декораторов я отдельно разобрал, чтобы дать хотя бы приблизительное понимание того, что происходит, когда мы пишем, например:

@bot.register_handler(...)

Разработка ботов отлично подходит для знакомства с веб-разработкой.

Переход к телеграм-боту

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

Телеграм-боту же для работы нужны серверы Telegram. А что вообще такое сервер? На этот вопрос мы постарались ответить сразу после изучения базового синтаксиса и окончания разработки программы. Задача студентов — перенести функциональность программы в бота, а для этого нужно понимать, как устроены телеграм-боты и что они вообще такое. Для этого в свою очередь нужно понять, хотя бы примерно, как устроен интернет. Определив интернет как сеть связанных между собой компьютеров, между которыми можно передавать информацию, мы рассказали про модель «клиент-сервер» и объяснили, как по этой модели взаимодействуют приложения Telegram, серверы Telegram и программы ботов.

Мы объяснили только модель взаимодействия ботов с сервером long polling. Web hook гораздо сложнее, и конкретно Telegram, насколько я знаю, требует https для взаимодействия с ботами через вебхуки (что еще добавляет еще сложности).

Почему выбрали онлайн-редактор кода

Разработчики вряд ли используют онлайн-редакторы вроде replit.com для написания и отладки кода. Но такой инструмент обеспечивает важное свойство для массового курса — у всех участников одно и то же окружение. Значит, полностью исключаются вопросы и проблемы, связанные с установкой интерпретатора, запуска программ и так далее.

Telegram-бота в онлайн-редакторе запустить сложнее. Как только мы закроем вкладку браузера, бот прекратит работу. Нам нужен был хостинг. К хостингу было всего два требования: бесплатный и с онлайн-редактором кода.

С первым требованием проблем не возникло, а вот хостинг, где можно работать с кодом на Python, как в онлайн-редакторе, удалось найти не сразу. Обнаружили только один вариант — pythonanywhere.com. У него куча недостатков, даже я иногда путаюсь в его интерфейсе, зато там есть простенький онлайн-редактор кода.

Кто помогал мне сделать курс

Команда — это важно. Через несколько потоков студентов, я подумал: «А зачем мне вообще Нетология? Я же сам могу сделать такой курс, проводить его и даже, возможно, брать за него деньги». Эту идею я всерьёз обдумывал, но когда начал прорабатывать детали, увидел, как много зависит от команды.

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

Во-вторых, работа методистов. Уверен, курс получился бы сырым, если бы не методисты. Эти люди гораздо лучше понимают, кто приходит на курс, что и в каком формате слушатели хотят получить. Хотя я постоянно спорил с тем, что добавлять в курс, все предложения методистов в результате оказались полезными.

Методисты помогли оформить занятия
Методисты помогли оформить занятия

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

Что я понял про собственный курс

Идеально сделать не получится

Причём ни с какого раза. Мы провели уже 14 потоков курса, и нам есть куда расти. Правда, менять курс стало сложнее, так как последние потоки полностью перешли в формат записанных видео.

Вебинары я люблю больше

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

Детали важны

Я не зря говорил про формат вебинаров. Иногда во время лекции я отходил от программы и в обзоре домашнего задания или просто в объяснении темы давал дополнительный материал, исправлял заранее заготовленные файлы. Эти файлы с кодом потом получали участники следующего потока и недоумевали, видя незнакомый синтаксис или что-то, что на их потоке не разбиралось. Такие детали формируют мнение о курсе и об образовательном процессе в Нетологии вообще. Будь у вас хоть самый лучший курс — попробуйте опаздывать на вебинары или не отправлять обещанные материалы, и очень скоро люди не захотят его проходить.

Hatters gonna hate

Это правда. Находились люди, которые писали оскорбительные комментарии, основываясь на этих самых мелочах. Нужно смириться с этим. Конечно, хочется, чтобы были довольны все, но, похоже, так не бывает.

Люблю конструктивную критику
Люблю конструктивную критику

Самое главное на курсе — аудитория

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

Что курс дал лично мне?

Я наконец-то попробовал себя не только в преподавании, но и в разработке образовательных продуктов. Причем прошел полный цикл от идеи до курса. Для меня один из главных критериев успешности — то, что я с удовольствием рекомендую курс своим друзьям и знакомым, которые хотят познакомиться с программированием. 

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

Источник: https://habr.com/ru/company/netologyru/blog/662057/


Интересные статьи

Интересные статьи

Вероятно, вы слышали о компании SiliconGraphics, позже сменившей название на Silicon Graphics, Inc, а потом просто на SGI, однако из домашних пользователей её продукцией не пользовался ...
В новых версиях Python аннотации типов получают всё большую поддержку, всё чаще и чаще используются в библиотеках, фреймворках, и проектах на Python. Помимо дополнительно...
В этом году поучавствовал в соревновании по написанию игровых ботов Russian AI Cup. И хоть не удалось взять 1е место, как в 2017, но все равно это было увлекате...
И еще раз снова привет, дорогой читатель! Здесь мы поговорим о том, как я обошел защиту в компьютерном клубе Arena Arsenal. Все это привело к тому, что я смог спокойно продолжить польз...
Иногда люди обращаются к Яндексу, чтобы найти фильм, название которого вылетело из головы. Описывают сюжет, запомнившиеся сцены, яркие детали: например, [как называется фильм там где мужик выбира...