Процесс создания урока


Месяц назад начал новый курс по основам программирования на английском языке — Intro to Programming. Уроки выходят дважды в неделю, и включают в себя видео, дополнительные тексты, конспекты, тесты, упражнения и ссылки для самостоятельного просмотра и прочтения. Видео публикуются на YouTube. Подписывайтесь, кстати.

Сегодня расскажу, как происходит процесс создания одного урока, на примере урока номер 8 — про рекурсию. Итоговый результат можно увидеть в самом конце статьи.

При подготовке курса используются следующие источники для вдохновения:

  1. Курс «Основы программирования» Кирилла Мокевнина на Хекслете.
    Кирилл проделал огромную работу по созданию полной учебной программы на Хекслете, и «Основы» - это первый курс цикла. Нам важно, чтобы английская версия Хекслета, не смотря на отличия в формате и подаче, приводила людей примерно на тот же уровень, что и русская версия. Кирилл и вся наша команда долго шла к этой методологии, и в итоге получилось сделать цикл курсов не про язык или инструмент, а про программирование и абстракцию. Нужно сделать так, чтобы английская версия Хекслета была совместима с русской на уровне концепций, изучаемых навыков и приоритетов.
  2. Книга “Structure and Interpretation of Computer Programs”.
    Если можно прочитать только одну книгу по программированию, то этой книгой должна быть SICP. Первые несколько курсов на Хекслете основаны именно на ней.
  3. Интерактивные статьи и выступления Брета Виктора. Это просто фантастический человек. Советую посмотреть как минимум одно его выступление — Inventing on Principle.
  4. Книга Mindstorms: Children, Computers, And Powerful Ideas Сеймура Паперта. Про боязнь математики, неправильное обучение и интересный подход к обучению детей. Каждый учитель, а особенно учитель математики или информатики, должен прочитать ее.
  5. Кучка разных каналов на ютубе, особенно с хорошими визуализациями: Ted-ED, Vox, Minute Physics, Numberphile, Computerphile.

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

1. Сценарий

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

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

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

Новый урок будет про рекурсию. Пора переходить к проработке последовательности объяснений и черновикам визуализации.

В этом курсе я стараюсь делать визуализацию не просто вторичным способом донесения информации, а «гражданином первого класса». Визуальная аналогия находится на одном уровне важности с формальным, словесным описанием концепции. Это требует консистентности — язык визуализации должен иметь смысл и не должен меняться на протяжении всего курса.

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

А в 10 уроке появились переменные. Это такие же бумажки, но значение написано не ручкой, а карандашом. Поэтому значения переменных можно менять:

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

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

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

anotherFunction(someFunction(3));

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

Потом я перехожу к тексту на компьютере. Использую любимый редактор Sublime Text 3 (нет, он не умер. нет, Атом не лучше). Один урок — это примерно 1000 слов или 4500 знаков. На это уходит в лучшем случае час-полтора, в худшем — несколько часов.

Готовый текст перечитываю еще несколько раз, потом проговариваю его вслух. В итоге приходится внести еще несколько правок. Далее — запись аудио.

Аудио

Записываю на любимый микрофон Rode Podcaster, который служит мне уже 10 лет.

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

В итоге запись 5-минутного аудио иногда растягивается на 40 минут. Восхитительно не получается никогда, но когда становится «не отвратительно», то я делаю копию файла и приступаю к монтажу: вырезаю ошибки, правлю продолжительность пауз, убираю клики, вздохи, пуки, лай собак. Потом применяю три фильтра: адаптивное подавление шумов, эквалайзер, примерно подстроенный под мой голос, и компрессор для уменьшения динамического диапазона (грубо говоря, чтобы сделать громкости более равномерными).

До — 10 минут:

После — 6.5 минут:

В процессе записи тоже бывают небольшие исправления текста. Аудио готово: это означает, что сценарий теперь точно финализирован. Пора браться за виртуальные кисти!

Графика и видео

Я умею рисовать дурацкие штуки, поэтому использую их в уроках.

Иду по сценарию и представляю, что должно быть на экране. Есть три типа медиа: рисованная графика, видео и текст. Текст — это код или какие-то короткие определения. Для каждого куска, где хочется видеть графику, рисую сцены — фигурки и объекты. Анимация будет при монтаже видео, поэтому нужно заранее нарисовать все так, чтобы было возможно нарезать позже.

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

Все, теперь на руках есть аудио, графика, видео и текст. Последний большой этап…

Монтаж

Самый муторный и долгий этап — монтаж видео. Все материалы сбрасываю в Final Cut Pro и начинаю накладывать нужные визуальные штуки на голос. Сначала — все самое очевидное. Эта графика и видео-ролики покрывают примерно 50%. Потом нужно заполнить оставшиеся 50%. Для этого обычно приходится дорисовывать или доснимать что-то в процессе.

Всякие простые звуки (чпоньк! пуннь! дзынь!) записываю сам, звуки посложнее нахожу в интернете. Иногда добавляю местами куски музыки или даже пару секунд видео из фильма или сериала. Обычно, просто для юмора.

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

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

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

Текст урока

Каждый урок это комплект: видео + текст. Текст состоит из нескольких секций:

  1. Важные заметки. Что-то не критичное, но важное, не вошедшее в видео-часть.
  2. Конспект. Короткая выжимка всего урока. Чтобы учащиеся могли быстро освежить память.
  3. Рекомендуемые и опциональные материалы — ссылки на статьи, видео и сайты по теме урока.
  4. Полный текст урока. То, что я писал на первом шаге.

Все это находится в одном маркдаун-файле, который в итоге уходит в репозиторий курса, откуда Хекслет и получает всю информацию.

Упражнение

Практические упражнения — одна из главных фишек Хекслета. Кирилл сделал hexlet-exercise-kit, универсальный набор для создания и тестирования упражнений. Упражнение — это текст задания + решение + тесты. Учащийся получает упражнение с вырезанным решением, а после самостоятельного прохождения может посмотреть наше решение.

Иногда я беру упражнения из курса «Основы программирования» и модифицирую их с учетом изученного ранее материала, иногда делаю новые. Тут снова очень помогают бумажки из первого шага: сразу понятно, какие штуки можно включать в требуемое решение, о чем стоит напомнить, и т.д.

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

Публикация на YouTube

Экспортированное видео нужно просмотреть еще раз, можно на ускоренной перемотке. Удостовериться, что нет артефактов и явных косяков. Потом видео уходит на YouTube.

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

Теперь нужно добавить субтитры. Делаю копию файла с текстом урока, удаляю оттуда код и другие элементы, которые не попали в аудио-версию, очищаю от маркдаун-разметки, потом добавляю этот файл к видео на YouTube. Их умная система сама распознает голос и текст, и автоматически проставляет время для каждой фразы. Это очень круто, потому что изначально я думал, что придется делать это вручную.

Тесты и публикация на Хекслете

Добавляю новый урок на Хекслет, добавляю 4-6 вопросов в тесты (квизы). Эти тесты нужно пройти сразу после видео, перед упражнением. Задача — проверить концептуальное понимание, поэтому там не бывает вопросов на тренировку памяти.

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

Прикрепляю упражнение к уроку и жму «Опубликовать». Уф! Всё!

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

Результат

Вот итоговое видео:

Подпишитесь на канал чтобы не пропустить новые видео.

А сам урок, со всеми текстами, упражнением и тестами — на Хекслете.

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