Как увлечь 3 млн школьников программированием на Python
Как мы делали курс программирования для детей 6–11 лет, не оглядываясь на другие свои продукты, а ориентируясь на опыт, амбиции и здравый смысл.
Как все начиналось
В июне 2018 года мы собрали команду, чтобы создать новый предмет — программирование для учеников начальной школы. Методист, программист, иллюстратор и дизайнер (это я) должны были сделать такой курс, на котором дети без помощи родителей и учителей смогли бы освоить Python. В идеале он должен был получиться захватывающим и удерживать интерес ребенка как можно дольше.
Сейчас над курсом работают восемь человек: менеджер по продукту и методист в одном лице, дизайнер, иллюстратор, тестировщик и четыре JavaScript-разработчика.
Обучение делится на десять модулей, семь из которых уже выложены на сайт, а три — в разработке. За время существования курса уже 3 млн детей прошли хотя бы одно задание, более 2,4 млн — написали свой первый код. Многие возвращаются к пройденным заданиям и решают их повторно.
Наша команда, слева — в сентябре 2018 года, справа — в декабре 2019
Концепция и цель
У нас был полный карт-бланш. Мы могли делать что угодно, не оглядываясь на предыдущие курсы и ориентируясь на опыт, амбиции и здравый смысл. На первом совещании у нас не было ТЗ, программы и вводных — мы начали с нуля.
На берегу мы договорились, что делаем честное программирование, в котором ребенок научится вводить приближенный к реальному код, сможет стирать, отлаживать и проверять написанное. Два года назад уже было немало хороших scratch-based-платформ обучения, и нам было неинтересно делать еще одну drag-and-drop-игрушку. Поэтому мы сфокусировались на создании среды разработки с игровым контекстом и максимально отзывчивым интерфейсом.
Игровая основа
Когда я стала изучать существующих в этой нише конкурентов, обнаружила две основные проблемы:
1. Бессвязность сюжета и механик
Некоторые курсы оказались достаточно красочными и интересными, но задачи подавались беспорядочно, и часто пользователю было трудно переключиться с программирования робота-повара на задачи по шахматам или спасательную операцию для козы. Локально задания были хороши, но без помощи взрослого или большого сопроводительного текста разобраться было сложновато.
2. Однообразность механик и задач
Другие же конкуренты показались мне, напротив, чересчур последовательными. Курсы представляли собой набор из 200 уровней, на которых необходимо управлять одним и тем же роботом/трактором/обезьяной, — изменялся только рельеф местности и добавлялось количество функций.
Обе проблемы были решены формулой «герой + программируемые предметы»
У нас возникла идея совместить игру-платформер и программирование предметов среды. В нашем курсе динозаврик Гриша, маскот и главный герой Учи.ру, ходит по сцене и собирает звездочки, управляемый стрелками на клавиатуре, а в кодовой зоне ученик программирует предметы окружающего мира.
Таким образом мы создаем у ребенка ощущение безопасной среды, в которой он может просто ходить по карте, как в обычных играх, но, чтобы пройти уровень, нужно чуть-чуть помочь. Фокус ученика смещается с «меня заставляют писать что-то непонятное на английском языке» на «сейчас заставлю этот плот перевезти Гришку через реку», и страх куда-то улетучивается.
Кроме того, этот подход решает проблему связности и обоснованности сюжета задач: если придумать естественную обстановку для каждого такого исполнителя, то ученик не увидит подвоха в повышении сложности.
Проблему однообразности задач мы решили с помощью логических загадок. Там, где нам нужно, чтобы ученик отработал полученные навыки кода, но усложнять синтаксис еще рано, мы добавляем микроголоволомки
Как выглядит курс
Главная страница курса — это длинная карта с островами, на которых расположены кружочки уровней. Остров — это группа упражнений, объединенных темой и локацией. В каждом из них примерно 20 задач, часть из которых — необязательные задания «с огоньком», повышенной сложности. В среднем один остров дети проходят за час-полтора, а на весь курс уходит от 14 (для первоклассника) до 9 часов (для четвероклассника).
В начале каждого острова мы даем небольшой вводный комикс, чтобы погрузить ученика в сеттинг и сюжет текущей локации.
Перед заданием появляется расширенное описание с теорией, иногда — с примером выполнения, а при переходе к выполнению оно сворачивается. Его можно перечитать в любой момент.
Кодовая зона максимально напоминает взрослую среду разработки. Тут есть название файла, кнопки Undo, Clear, запуска и отладки, а также инструменты для редактирования строк.
Нашей особой фишкой стали подсказки в коде — можно пройти курс, ни разу не напечатав ничего на клавиатуре, используя только кнопки-токены. В каждой такой кнопке мы рисуем иконки, которые доносят смысл этого элемента, чтобы подстраховать нечитающих детей или ребят со слабым английским.
В конце упражнения мы показываем экран, на котором отображается количество заработанных звезд и похвала (уникальная для каждого задания). Учеников такое очень ободряет: тестирования показали, как много значат для детей поддержка и признание их успехов.
Доступность
На момент проектирования курса процент мобильных устройств среди нашей ЦА был не больше 10 (сейчас он вырос до 35%), но мы все равно решили, что будем адаптировать его для всех устройств — от мобильника до интерактивной доски. Это был первый адаптированный курс на Учи.ру, до этого все карточки масштабировались под размер экрана, а поля заполнялись обоями. Кроме того, было вызовом создать не только адаптив под разные размеры экранов, но учитывать и тач-устройства. В этом нам снова помогла находка с выпадающими подсказками, а для передвижения Гриши мы включаем экранный джойстик.
Наш курс рассчитан на учеников 1–6 классов. А это значит, что мы должны быть готовы к тому, что некоторые из них еще плохо читают и не знают английского. Для всех заданий мы делаем озвучку, английские слова озвучиваем отдельно и выделяем особым образом. Иконки при написании кода тоже здорово помогают детям ориентироваться в языке.
Новые острова
В основе каждого нового острова необходимо заложить крепкий фундамент из трех составляющих:
методической цели (чему учим);
- окружения (обстановка и что мы тут программируем);
- головоломки, которая захватит школьника на час (и чтобы это было не убийственно сложно программировать нашим фронтенд-разработчикам).
Например, на шестом острове мы учим детей поворачивать космический корабль на произвольный угол и чуть позже — циклам. А чтобы усложнить и поддержать интерес, добавили механику шутера: надо отстреливать астероиды на своем пути.
К слову, ради этой механики нам пришлось прикрутить полноценный игровой движок, поскольку базовое решение, на котором писались первые острова, уже не вытягивало такой сложной физики.
Обычно больше всего времени и сил отнимает именно первый этап замеса прочного фундамента, дальше все идет как по маслу. Вдумчивое исследование вопроса и физические прототипы помогают видеть слепые пятна, рисовать черновые макеты и ставить внятные ТЗ на иллюстрации.
Ачивки, мультики и звездочки
Мы много работаем над онбордингом и оптимизацией проходимости курса.
Базовая механика по удержанию пользователя — нарратив, который поддерживается комиксом и обстановкой. Курс объединяет история о том, как динозаврик Гриша отправляется в гости к родителям-космонавтам, а по пути его ждут увлекательные приключениями.
Второй метод — звездочки, которые ученик зарабатывает во время прохождения каждого уровня. Часто дети, увидев на финальном экране, что они получили не все звездочки, проходят уровень повторно. Это стимулирует собирать больше звездочек в следующий раз, писать больше кода, проходить задания повышенной сложности. Также это сильно влияет на время, которое проводит пользователь на платформе. Решение «на три звезды» в среднем требует на 30–50% больше времени, чем просто прохождение уровня.
Третья сила — это ачивки. Их можно получить за выполнение нескольких заданий подряд без ошибок и другие подобные мини-квесты. Изначально мы создали эту систему, чтобы подтолкнуть детей к повторному прохождению уровней в промежутках между выходами новых островов, а также для того чтобы ученики хвастались своими успехами в соцсетях. Гипотеза с соцсетями не подтвердилась — дети не очень охотно делились достижениями, но время нахождения в курсе у пользователей, которые реагируют на ачивки, увеличилось на 12%.
Большой проблемой было перебороть страх учеников перед кодовой зоной и сделать простой и внятный онбординг. У нас было 5–6 итераций стартовых заданий, прежде чем мы смогли сгладить резкий отток пользователей на первом упражнении с написанием кода. В итоге нам помогли мультики и плавный вход в тему. А также ангельское терпение наших front-end-разработчиков, которые переделывали эти задания и онбординги.
Тестирование с детьми
В процессе создания у нас возникает много гипотез, которые мы проверяем на разных стадиях разработки острова. Специфика продукта такова, что полноценно протестировать остров возможно только уже на финальной стадии, когда код работает и сцена на него реагирует, поэтому цена ошибки велика. Приходится прибегать к ухищрениям, чтобы убедиться, что остров не окажется слишком трудным или не оттолкнет учеников сеттингом. На ранних стадиях проекта мы тестировали интерфейс с детьми и постоянно находили с ними какие-то волшебные неочевидные баги — это было полезно как для разработчиков, так и для оптимизации интерфейса с моей стороны.
Зоны роста и планы
Нерешенной остается проблема «нетерпеливых детей» — учеников, которые не хотят читать задания и рвутся сразу в бой. На сложных уровнях они испытывают затруднения, и мы пока не знаем, как отличить внимательных детей от торопыжек и как мотивировать вторых замедлиться и вникнуть.
Учителя программирования просят нас адаптировать курс под внеурочную деятельность, создать рекомендации по классной работе — это сложная история, которая требует большого методического ресурса. Но мы работаем над этим: придумали конструктор упражнений, в котором педагог мог бы сам создавать задачи для учеников, но он пока остался на уровне макета. Мы сделали версию курса для учителя, в которой ему доступны все уровни, а также методическое описание островов и варианты решения каждого задания.
На первом совещании мы накидали примерную структуру курса, до чего мы сможем доучить ученика начальной школы в Python, и разбили ее на блоки. Мы покрыли эту программу примерно на 70%: сделали семь островов, на данный момент ученикам доступно 110 заданий. Нам осталось доделать три острова. Сейчас работаем над восьмым и параллельно уже год занимаемся новым курсом Python для учеников 6–11 классов. На днях выкатили его на небольшую тестовую группу пользователей, будем тестировать, дополнять, а осенью раскатим на широкую аудиторию.
И все-таки честным программирование на Python в рамках нашего курса можно назвать с оговоркой: мы не заставляем ученика постоянно подключать модули и городить сложные конструкции и часть черной работы делаем за него. В остальном, кроме отсутствия импортов, код для решения задач — это честный Python. По окончании программы школьники смогут пользоваться черепашьей графикой из модуля Turtle, а также будут знать некоторые языковые конструкции (циклы for и while, ветвление с if, функции).
Увлечь-то можно, а выхлоп какой?
Вот изучал я турбопаскаль... Грезил программами и небольшими роликами на нем... А потом оказалось, что это один из ущербнейших языков. Это среда Delphi потом нормальная... Хотя до сих пор в некоторых вузах учат TB7, некоторые, к счастью хотя бы на PascalABC и Lazarus переходят.
Ладно, Пайтон не такой, он перспективный. Как и в любом языке первые 4-6 глав учебника такое простенькое, а+б, если с, то д и т.д. И бац! Следующая глава - лямбда-функции со сложновложенными условиями, кортежами и списками, импортируемыми из нескольких источников. И не смотря на кросс-платформенность, какой-нибудь модуль у тебя работать не будет (черепашонок в пайтоне и сишный math на линуксе, например).
Хорошо, как-то понял и с подсказками написал. Открываешь вакансии и видишь доп.требования: С++, NodeJS, PHP, CSS, VueJS, PyQT, HTML, и Бигдата в придачу с основами AI.
Твой кролик написал (in english)!, да мне еще пару лет надо на это, а жить-то я на что буду?
А-а-а, я взрослый дядька залез в тему обучения детей? А дети, когда увидят, что еще надо изучить, чтобы хоть как-то успешно применять полученные навыки, грустными не станут? Мотивация не пропадет? Или ваша цель срубить бабла на обучении, а дальше конь не валяйся?
Этот курс — способ с ранних лет познакомить ребенка с программированием и побороть страх перед самостоятельным написанием кода. Конечно, курс не сделает из первоклашки крутого прогера, но если ребенок заинтересуется, он продолжит изучать настоящие языки в дальнейшем.
Меж тем хватает и вакансий программистов в крупные IT-компании, где вообще не указывают в обязательных требованиях конкретных языков программирования.
Нафига, а главное зачем? Программирование как ИЗО - сколько человека не заставляй рисовать пейзажи, он не станет великим художником. Да и питон - так себе язык для обучения программированию, во-первых: он сложный, во-вторых: у него динамическая типизация. Без статической типизации у человека нет понимания, почему нельзя складывать цифры и строки и вообще структуру кода. Ну и к тому же тот же + это перегруженный оператор у класса. Алгоритмический склад ума, тут лучше математики, геометрии, физики, химии еще лучше ничего не придумали. Только если ребенок начал сам залипать за кодом, может что то получится, в противном случае эти занятия - засорение головы ненужными обстракциями и отторжение, подобное занятиям музыкой.
в статье не написано что кого-то заставляют
оценку лучше - хуже имеет смысл проводить с целевой группой и фактами на руках
народ занят? - занят, лучше это игрулек - "расскачай мага на 100 уровень" - хз, субъективно - более полезней.
математика физика и тп - задротство, к которому прийдут единицы, для того чтобы рулить фронтом - физика? серьезно?
раньше были бабки на скамейках, сейчас - математика физика бубуббу, институт бубубу естесенные знания бубубу, такое впечатление что всем сразу и в гугл надо идти трудиться. Кого-то штука$ и свободный график и нормальная жизнь вполне устроит.
пц - ребята молодцы, было бы неплохо приблуду добавить, чтобы отвлекались на отдых и так все уже горбатые на одно плечо и слепые.
И чем этот проект отличается от Codecombat? Или "вы не понимаете - это другое"?
Мы изучали CodeCombat при разработке, он отличается от нашего курса как минимум отсутствием озвучки, другой ЦА, не такими отзывчивыми и внятными обработками ошибок. Программируют там персонажей-людей, а не объекты реального мира (в статье я написала, почему программировать предметы детям оказалось удобнее), специфичный и немного устаревший, перегруженный интерфейс, опять же, он не для каждого 7 летки подойдет.
Прикрепляю скриншоты Codecombat, можно отметить как много они уделяют места геймификации, и оценить общий look&feel этого продукта.