Как увлечь 3 млн школьников программированием на Python

Как мы делали курс программирования для детей 6–11 лет, не оглядываясь на другие свои продукты, а ориентируясь на опыт, амбиции и здравый смысл.

Как увлечь 3 млн школьников программированием на Python
Ирина Красильникова
Дизайнер интерактивных курсов образовательной онлайн-платформы Учи.ру
Как увлечь 3 млн школьников программированием на Python

Как все начиналось

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

Сейчас над курсом работают восемь человек: менеджер по продукту и методист в одном лице, дизайнер, иллюстратор, тестировщик и четыре JavaScript-разработчика.

Обучение делится на десять модулей, семь из которых уже выложены на сайт, а три — в разработке. За время существования курса уже 3 млн детей прошли хотя бы одно задание, более 2,4 млн — написали свой первый код. Многие возвращаются к пройденным заданиям и решают их повторно.

<p>Наша команда, слева — в сентябре 2018 года, справа — в декабре 2019</p>

Наша команда, слева — в сентябре 2018 года, справа — в декабре 2019

Концепция и цель

У нас был полный карт-бланш. Мы могли делать что угодно, не оглядываясь на предыдущие курсы и ориентируясь на опыт, амбиции и здравый смысл. На первом совещании у нас не было ТЗ, программы и вводных — мы начали с нуля.

Как увлечь 3 млн школьников программированием на Python

На берегу мы договорились, что делаем честное программирование, в котором ребенок научится вводить приближенный к реальному код, сможет стирать, отлаживать и проверять написанное. Два года назад уже было немало хороших scratch-based-платформ обучения, и нам было неинтересно делать еще одну drag-and-drop-игрушку. Поэтому мы сфокусировались на создании среды разработки с игровым контекстом и максимально отзывчивым интерфейсом.

Как увлечь 3 млн школьников программированием на Python

Игровая основа

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

1. Бессвязность сюжета и механик

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

2. Однообразность механик и задач

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

Как увлечь 3 млн школьников программированием на Python

Обе проблемы были решены формулой «герой + программируемые предметы»

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

Таким образом мы создаем у ребенка ощущение безопасной среды, в которой он может просто ходить по карте, как в обычных играх, но, чтобы пройти уровень, нужно чуть-чуть помочь. Фокус ученика смещается с «меня заставляют писать что-то непонятное на английском языке» на «сейчас заставлю этот плот перевезти Гришку через реку», и страх куда-то улетучивается.

Как увлечь 3 млн школьников программированием на Python

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

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

Сергей Шашков, Менеджер по продукту курса «Программирование»
Как увлечь 3 млн школьников программированием на Python

Как выглядит курс

Главная страница курса — это длинная карта с островами, на которых расположены кружочки уровней. Остров — это группа упражнений, объединенных темой и локацией. В каждом из них примерно 20 задач, часть из которых — необязательные задания «с огоньком», повышенной сложности. В среднем один остров дети проходят за час-полтора, а на весь курс уходит от 14 (для первоклассника) до 9 часов (для четвероклассника).

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

Как увлечь 3 млн школьников программированием на Python

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

Кодовая зона максимально напоминает взрослую среду разработки. Тут есть название файла, кнопки Undo, Clear, запуска и отладки, а также инструменты для редактирования строк.

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

Как увлечь 3 млн школьников программированием на Python

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

Как увлечь 3 млн школьников программированием на Python

Доступность

На момент проектирования курса процент мобильных устройств среди нашей ЦА был не больше 10 (сейчас он вырос до 35%), но мы все равно решили, что будем адаптировать его для всех устройств — от мобильника до интерактивной доски. Это был первый адаптированный курс на Учи.ру, до этого все карточки масштабировались под размер экрана, а поля заполнялись обоями. Кроме того, было вызовом создать не только адаптив под разные размеры экранов, но учитывать и тач-устройства. В этом нам снова помогла находка с выпадающими подсказками, а для передвижения Гриши мы включаем экранный джойстик.

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

Как увлечь 3 млн школьников программированием на Python

Новые острова

В основе каждого нового острова необходимо заложить крепкий фундамент из трех составляющих:

  • методической цели (чему учим);

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

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

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

Обычно больше всего времени и сил отнимает именно первый этап замеса прочного фундамента, дальше все идет как по маслу. Вдумчивое исследование вопроса и физические прототипы помогают видеть слепые пятна, рисовать черновые макеты и ставить внятные ТЗ на иллюстрации.

Как увлечь 3 млн школьников программированием на Python

Ачивки, мультики и звездочки

Мы много работаем над онбордингом и оптимизацией проходимости курса.

Базовая механика по удержанию пользователя — нарратив, который поддерживается комиксом и обстановкой. Курс объединяет история о том, как динозаврик Гриша отправляется в гости к родителям-космонавтам, а по пути его ждут увлекательные приключениями.

Как увлечь 3 млн школьников программированием на Python

Второй метод — звездочки, которые ученик зарабатывает во время прохождения каждого уровня. Часто дети, увидев на финальном экране, что они получили не все звездочки, проходят уровень повторно. Это стимулирует собирать больше звездочек в следующий раз, писать больше кода, проходить задания повышенной сложности. Также это сильно влияет на время, которое проводит пользователь на платформе. Решение «на три звезды» в среднем требует на 30–50% больше времени, чем просто прохождение уровня.

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

Большой проблемой было перебороть страх учеников перед кодовой зоной и сделать простой и внятный онбординг. У нас было 5–6 итераций стартовых заданий, прежде чем мы смогли сгладить резкий отток пользователей на первом упражнении с написанием кода. В итоге нам помогли мультики и плавный вход в тему. А также ангельское терпение наших front-end-разработчиков, которые переделывали эти задания и онбординги.

Как увлечь 3 млн школьников программированием на Python

Тестирование с детьми

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

Как увлечь 3 млн школьников программированием на Python

Зоны роста и планы

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

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

Как увлечь 3 млн школьников программированием на Python

На первом совещании мы накидали примерную структуру курса, до чего мы сможем доучить ученика начальной школы в Python, и разбили ее на блоки. Мы покрыли эту программу примерно на 70%: сделали семь островов, на данный момент ученикам доступно 110 заданий. Нам осталось доделать три острова. Сейчас работаем над восьмым и параллельно уже год занимаемся новым курсом Python для учеников 6–11 классов. На днях выкатили его на небольшую тестовую группу пользователей, будем тестировать, дополнять, а осенью раскатим на широкую аудиторию.

Как увлечь 3 млн школьников программированием на Python

И все-таки честным программирование на Python в рамках нашего курса можно назвать с оговоркой: мы не заставляем ученика постоянно подключать модули и городить сложные конструкции и часть черной работы делаем за него. В остальном, кроме отсутствия импортов, код для решения задач — это честный Python. По окончании программы школьники смогут пользоваться черепашьей графикой из модуля Turtle, а также будут знать некоторые языковые конструкции (циклы for и while, ветвление с if, функции).

2727
63 комментария

Увлечь-то можно, а выхлоп какой?
Вот изучал я турбопаскаль... Грезил программами и небольшими роликами на нем... А потом оказалось, что это один из ущербнейших языков. Это среда Delphi потом нормальная... Хотя до сих пор в некоторых вузах учат TB7, некоторые, к счастью хотя бы на PascalABC и Lazarus переходят.

Ладно, Пайтон не такой, он перспективный. Как и в любом языке первые 4-6 глав учебника такое простенькое, а+б, если с, то д и т.д. И бац! Следующая глава - лямбда-функции со сложновложенными условиями, кортежами и списками, импортируемыми из нескольких источников. И не смотря на кросс-платформенность, какой-нибудь модуль у тебя работать не будет (черепашонок в пайтоне и сишный math на линуксе, например).

Хорошо, как-то понял и с подсказками написал. Открываешь вакансии и видишь доп.требования:  С++, NodeJS, PHP, CSS, VueJS, PyQT, HTML, и Бигдата в придачу с основами AI.

Твой кролик написал (in english)!, да мне еще пару лет надо на это, а жить-то я на что буду? 
А-а-а, я взрослый дядька залез в тему обучения детей? А дети, когда увидят, что еще надо изучить, чтобы хоть как-то успешно применять полученные навыки, грустными не станут? Мотивация не пропадет? Или ваша цель срубить бабла на обучении, а дальше конь не валяйся?

6
Ответить

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

10
Ответить

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

1
Ответить

Нафига, а главное зачем? Программирование как ИЗО - сколько человека не заставляй рисовать пейзажи, он не станет великим художником. Да и питон - так себе язык для обучения программированию, во-первых: он сложный, во-вторых: у него динамическая типизация. Без статической типизации у человека нет понимания, почему нельзя складывать цифры и строки и вообще структуру кода. Ну и к тому же тот же + это перегруженный оператор у класса. Алгоритмический склад ума, тут лучше математики, геометрии, физики, химии еще лучше ничего не придумали. Только если ребенок начал сам залипать за кодом, может что то получится, в противном случае эти занятия - засорение головы ненужными обстракциями и отторжение, подобное занятиям музыкой.

2
Ответить

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

математика физика и тп - задротство, к которому прийдут единицы, для того чтобы рулить фронтом - физика? серьезно? 

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

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

3
Ответить

И чем этот проект отличается от Codecombat? Или "вы не понимаете - это другое"?

1
Ответить

Мы изучали CodeCombat при разработке, он отличается от нашего курса как минимум отсутствием озвучки, другой ЦА, не такими отзывчивыми и внятными обработками ошибок. Программируют там персонажей-людей, а не объекты реального мира (в статье я написала, почему программировать предметы детям оказалось удобнее), специфичный и немного устаревший, перегруженный интерфейс, опять же, он не для каждого 7 летки подойдет.

Прикрепляю скриншоты Codecombat, можно отметить как много они уделяют места геймификации, и оценить общий look&feel этого продукта.

2
Ответить