Недавно Физтех, Яндекс и ШАД запустили ещё один курс на платформе Coursera — «Основы разработки на C++: белый пояс». Он посвящён знакомству с С++. Я расскажу, для кого этот курс, как мы его готовили, что получилось в итоге и каковы наши дальнейшие планы.
Как всё началось, было выброшено и началось снова
Онлайн-специализацию из пяти курсов по С++ мы задумали прошлым летом. Сначала сочиняли программу потихоньку, потом активнее, и в октябре начали снимать видео.
Мы успели снять почти половину первого курса, но тут Илья, лидер команды преподавателей, посмотрел доклад Кейт Грегори о типичных ошибках обучения C++ и понял, что мы допустили большинство из них. 30 ноября Илья написал в общий чатик:
Ребята! У меня плохие новости. Я осознал, что наш первый курс — ***** :(
Тут нужно заметить, что мы с самого начала решили делать курсы, которые, во-первых, рассказывали бы про современный С++ и, во-вторых, были бы направлены на практику. Нет смысла пересказывать учебник или справочник — надо давать людям скилл, чтобы человек мог начать писать код после первых же уроков.
И всё-таки академическая привычка и склонность к дотошности оказались слишком сильны. В первоначальном варианте программы темы шли друг за другом, подчиняясь строгой логике. Все зависимости между ними были соблюдены, возможности С++ рассматривались глубоко и подробно. К сожалению, в результате стандартные контейнеры и алгоритмы впервые упоминались не раньше второго курса, потому что являются шаблонными конструкциями — а до середины второго курса, думали мы, слушатели ещё не будут знать шаблоны.
Наверное, всем понятно, в чём тут проблема. Чтобы пользоваться std::vector, совершенно не обязательно знать, как устроены шаблоны и даже что это такое.
Момент осознания был оглушительным: мы с самого начала знали, что курс должен быть практическим и давать скилл, а не справку — и всё равно совершили ошибку. Мы пали жертвой собственной экспертизы и стали углубляться во внутреннее устройство С++, вместо того чтобы рассказывать, как легко с его помощью можно решать практические задачи.
Стало понятно, что программу надо переписывать, а бóльшую часть отснятых видео выбросить и снять заново. Это добавило команде преподавателей много работы и привычку всё время думать о практичности курса.
Что получилось
Пока получился первый курс. Предполагается, что в начале курса слушатель может увидеть язык С++ впервые в жизни (но при этом стоит представлять, что такое программирование в целом, и не бояться слов «переменная», «цикл», «список»), а в конце будет способен написать небольшое key-value хранилище с возможностью добавлять туда записи и запрашивать все значения по какому-нибудь известному ключу.
Чтобы человеку было комфортно решать такую задачу, надо рассказать ему про базовые конструкции языка, функции, несколько стандартных контейнеров и алгоритмов, структуры и классы, потоки ввода и вывода, исключения. Рассказывать стоит не слишком глубоко, но так, чтобы всем этим можно было воспользоваться. Ну и конечно, надо выдать побольше задач, чтобы после просмотра видео можно было сразу «потрогать» материал собственными руками.
Отзывы бета-тестеров и слушателей внушают оптимизм. Мы надеемся, что у нас получился хороший вводный курс, к тому же на русском языке, что должно серьёзно облегчить восприятие материала многими людьми.
Остальные плюсы описаны выше: ориентированность на практику, много задач, использование современных возможностей языка. Авторы курса — старшие разработчики Яндекса, которые знают С++ на глубоком уровне и готовы поделиться богатым опытом применения языка в боевых проектах. Поэтому и лекции, и задания учат наиболее эффективному, безопасному и простому программированию на С++.
В планах — более хардкорные курсы, от жёлтого до чёрного пояса. Их мы стараемся готовить так, чтобы даже сведущие в С++ люди могли с интересом послушать и, возможно, узнать что-то новое. А пока советуйте наш первый курс друзьям-новичкам, им понравится.
Что именно рассказываем
Курс длится пять недель. На каждой неделе с первой по четвёртую слушателю предстоит посмотреть 10-20 коротких видео и решить несколько задач. Фрагмент курса для каждой недели содержит как задачи и тесты, необходимые для получения сертификата, так и дополнительные необязательные задачи — для тех, кто хочет потренироваться побольше. Последняя неделя полностью посвящена решению финальной задачи.
Доступ к обязательным заданиям стоит около 1600 рублей, но студенты могут подать в Coursera заявку на финансовую помощь и получить доступ бесплатно. Все видео и необязательные задания — бесплатные по умолчанию.
Программа курса выглядит так:
Неделя 1
Обзор возможностей С++
Hello, worldКомпиляция, запуск, отладка
Обзор типов
Операции с простыми типами
Операции с контейнерами
Языковые конструкции
Установка EclipseОперации
Создание проекта в Eclipse
Отладка в Eclipse
ПрисваиваниеУсловные операторы и циклы
Арифметические
Логические
Неделя 2
Функции
СинтаксисКонтейнеры
Передача параметров по значению
ссылки как способ изменить переданный объект
const-ссылки как способ сэкономить на копировании
const защищает от случайного изменения переменной
std::vector
Std::map
Std::set
Взгляд в будущее: обход словаря с помощью structured bindings
Неделя 3
Алгоритмы и лямбды
min, max, sortВидимость и инициализация переменных
count, count_if, лямбды
современный аналог std::transform — for (auto& x: container)
ООП
Введение в структуры и классы
Неделя 4
ООП: примеры
Работа с текстовыми файлами и потоками
Перегрузка операторов
Встраивание пользовательских типов в контейнеры
Исключения
Неделя 5 — курсовой проект
antoshkka, который участвует в работе группы по стандартизации, помогал нам и с курсом: «Язык C++ красив, быстр, используется большинством крупных IT компаний, а специалисты по этому языку ценятся во всём мире. К несчастью, многие курсы и учебники по C++ на самом деле учебники по «С», а с такими знаниями вам придётся несладко. Поэтому мы подготовили курс по правильному C++, с классами и без утечек памяти. Если ты знаешь любой другой язык программирования и хочешь открыть для себя мир правильного C++, то наш курс для тебя».
Комментарии (0)