- PVSM.RU - https://www.pvsm.ru -

Как Яндекс создавал курс по C++, или Почему нам всё пришлось переписать

В Яндексе C++ — один из основных языков, на нём написан наш поиск. Его развитие нам настолько важно, что больше года назад по инициативе Яндекса была создана российская рабочая группа [1] по стандартизации «плюсов». Через неё у всех разработчиков [2] русскоязычного пространства есть возможность влиять на развитие языка.

Как Яндекс создавал курс по C++, или Почему нам всё пришлось переписать - 1

Недавно Физтех, Яндекс и ШАД запустили ещё один курс на платформе Coursera — «Основы разработки на C++: белый пояс [3]». Он посвящён знакомству с С++. Я расскажу, для кого этот курс, как мы его готовили, что получилось в итоге и каковы наши дальнейшие планы.

Как всё началось, было выброшено и началось снова

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

Мы успели снять почти половину первого курса, но тут Илья, лидер команды преподавателей, посмотрел доклад Кейт Грегори [4] о типичных ошибках обучения 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 [5], который участвует в работе группы по стандартизации, помогал нам и с курсом: «Язык C++ красив, быстр, используется большинством крупных IT компаний, а специалисты по этому языку ценятся во всём мире. К несчастью, многие курсы и учебники по C++ на самом деле учебники по «С», а с такими знаниями вам придётся несладко. Поэтому мы подготовили курс по правильному C++, с классами и без утечек памяти. Если ты знаешь любой другой язык программирования и хочешь открыть для себя мир правильного C++, то наш курс для тебя».

Автор: Яндекс

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/259763

Ссылки в тексте:

[1] рабочая группа: https://stdcpp.ru

[2] у всех разработчиков: https://habrahabr.ru/company/yandex/blog/327080/

[3] Основы разработки на C++: белый пояс: https://www.coursera.org/learn/c-plus-plus-white/

[4] доклад Кейт Грегори: https://www.youtube.com/watch?v=YnWhqhNdYyk&t=1920s

[5] antoshkka: https://habrahabr.ru/users/antoshkka/

[6] Источник: https://habrahabr.ru/post/332556/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best