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

в 13:09, , рубрики: c++, c++11, coursera, Блог компании Яндекс, контейнеры, курсы, курсы программирования, новичкам, онлайн-курсы, основы программирования, Программирование, Совершенный код

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

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

Недавно Физтех, Яндекс и ШАД запустили ещё один курс на платформе 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++, то наш курс для тебя».

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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js