Однажды мы с вами уже размышляли, нужно ли учить язык C перед языком C++. Это разные языки, каждый пошёл когда-то своим путём. Но всё-таки многое из C вошло в C++ и уходить, надо сказать, никуда не собирается, поэтому часть, совместимую с C, игнорировать нельзя и, по моему мнению, следует изучать первой.
Сегодня посмотрим выступление Ильи Шишкова (старший разработчик отдела безопасного поиска компании «Яндекс») на конференции C++ Russia 2018. Проанализируем вопрос в целом и это выступление в частности с точки зрения андрагогики (дисциплины, чей предмет — то, как нужно учить взрослых людей) и дидактики (теории обучения — такая дисциплина, которая занимается вопросами «Зачем, чему и как учить?»).
На курсе пять «поясов»: белый, жёлтый, красный, коричневый, чёрный. Заявленные цели: научить «самостоятельно решать практические задачи на языке C++», применять естественные идиомы и конструкции, самостоятельно находить ответы и изучать язык глубже; писать эффективный код без ущерба для качества.
Из выступления: «Чтобы они знали, какие есть источники информации, знали ключевые слова и могли, грубо говоря, нагуглить ответ на свой вопрос. Ой, меня просили не говорить слово „нагуглить“. Поискать в „Яндексе“».
Заявляется, что в основу «массового онлайн-курса, который будут смотреть тысячи людей», заложены работы мэтров (Страуструп, Майерс, Саттер, Александреску). Так выглядел учебный план до того, как они узнали о Кейт Грегори, которая открыто говорит, что готовит лишь пользователей библиотек, то есть людей без глубокого понимания предмета.
Когда они узнали о Кейт Грегори, вдохновились, избавились от всех наработок и начали заново.
И правда странно, что нет многих важных базовых тем, а те, что есть, идут в непонятном порядке. Авторы признаются, что каждая тема с самого начала разбиралась в деталях, map «всплывал» поздно, потому что это шаблон класса, а шаблоны якобы требуют обстоятельного изучения.
На красной плашке на слайде № 14 возле map написано:
И вообще «изучавшим» язык Python почему-то уделяется так много внимания:
Вот что получилось «после перезагрузки».
Какие-то вещи действительно стали лучше:
void PrintSize(const vector<Person>& people) {
cout << people.size() << endl;
}
int main() {
PrintSize(vector<Person>(15'000'000));
}
Что-то ошибочно:
Хоть и говорится, что в основу положены «принципы: понятность вместо полноты, демонстрация проблемы, наглядность», это выглядит как случайный набор красивых слов. Современная дидактика предлагает множество принципов, в том числе, скажем, не только действия со стороны преподавателя, но и собственную инициативу того, кто учится. Где место этому в курсе — не понятно. А ведь в андрагогике особо важными считаются осознанность и главная роль у того, кто учится.
Вероятно, здесь нарушены некоторые принципы: последовательность, систематичность и даже связь с жизнью (юнит-тестирования недостаточно), соответствие уровню подготовки (если материал слишком лёгкий, то и обучение идёт медленно).
Чтобы показать, как важно учить постепенно, шаг за шагом, спикер переливает какую-то жидкость из одной бутылки в другую — тоже постепенно. А затем делает то же самое быстро, так что часть жидкости в бутылку не попадает. Уровень дискуссии об одном из самых сложных языков.
В наших курсах
Пожалуй, странно очень долго откладывать вопрос производительности в языке, который чаще всего выбирают именно ради производительности и в основе которого принцип «вы не платите за то, что не используете». И ещё более странно использовать заведомо плохие практики.
Выступающий критикует классическое определение ссылки как альтернативного имени объекта и описание того, для чего они нужны (аргументы функций, возвращаемые значения, перегрузка операторов — последнее так и вовсе причина того, что ссылки появились в языке).
Слайд № 31:
Решение — принимать по указателю, конечно. А уже затем показать ссылки.
Целочисленные типы изучаются только на втором курсе (что не очень поздно, но и не рано). Проблема кроется в том, что преподаватели должны аккуратно объяснить, зачем нужен каждый тип. Базовые типы вообще — это то, что используется довольно часто, вот почему это важно и часто идёт в начале.
Из ответов на вопросы мы узнаём, что задания проверяются автоматически, стиль никак не проверяется, внимание на этом не заостряют.
Хотя и заявлялась цель научить «самостоятельно находить ответы», не видно, как эта самостоятельность прививается, как к этому мотивируют (как вообще изучают мотивы слушателей).
Если судить по выступлению, используются только видеолекции и задачи — 48 на первом курсе, 33 на втором и 35 на третьем (то есть объяснительно-иллюстративный и репродуктивный методы). Задачи со сложными ситуациями, специфическими идиомами (скажем, перегруженные константный и неконстантный методы без дублирования кода) и задачи исследовательского характера остаются за бортом; такие методы трудно применять, когда курс массовый. Но остаются вопросы. Как можно изучать столь огромный язык без решения сложных ситуаций и самостоятельных поисков? Зачем нужен массовый курс по такой специальной дисциплине? Больше того, задачи, которые обычно решают на C++, связаны с другими сложными дисциплинами (сетевое приложение — компьютерные сети, часто это базы данных, графика — соответствующая математика и т. д.). Андрагогика отдаёт приоритет комплексным (междисциплинарным) занятиям. Нет ответа на вопрос, насколько человек будет готов хоть к чему-то. Много говорится о содержании, но совсем мало — о том, как будут учить, а анализ результата проводится по большей части автоматически.
У курса высокие оценки на платформе Coursera (белый пояс — 4,8/5, жёлтый пояс — 4,95/5), авторы говорят, что «слушателям нравится».
Отзывы на белый пояс:
Относиться к таким отзывам нужно с осторожностью, поскольку в интернете регулярно появляются посты, где простые люди хвалят курсы. Порой они написаны прямо в блоге компании. Как, например, пост кандидата химических наук, который теперь «сочетает науку и разработку на C++» (в этом посте есть ссылка с ключом utm_campaign=pr_content_cpp_tproger). Но химики и не такое могут, мы смотрели «Во все тяжкие».
Зачем нужен массовый курс? Просто чтобы больше людей могли платить за него?
Зачем ориентироваться на «питонистов»? Ответ, наверное, не в дидактике, а в рекламе. Даже названия этапов — пояса — это рекламный ход. Удержать кошелёчек.
Зачем притворяться, что язык простой, когда он действительно сложный? Зачем осознанно нарушать базовые дидактические принципы, а порой давать заведомо неверную информацию?