О курсе
Первый (осенний) семестр предназначен для начинающих разработчиков на C++.
Второй (весенний) семестр даёт углублённое понимание тонкостей языка и раскрывает особенности возможностей новых стандартов. Подойдёт как для тех, у кого C++ является первым опытом программирования, так и для тех, кто переходит на C++ с других языков.
Важной особенностью курса является то, что упор делается на большое количество практики, код-ревью и устные сдачи. Данный подход позволяет выстроить сильный фундамент для дальнейшего профессионального развития как C++-разработчика, так и в любой другой IT-специальности.
Команда курса
Руководитель курса и лектор: Попов Павел Александрович
Семинаристы:
- Барсуков Сергей Евгеньевич
- Драгун Константин Юрьевич
- Гарбузов Николай Алексеевич
- Русецкий Дмитрий Сергеевич
- Вашкевич Егор Сергеевич
- Лунга Артём Романович
- Погадаев Никита Максимович
Ассистенты:
- Информация будет опубликована позднее.
Программа курса
Формы контроля
Осенний семестр — дифференцированный зачёт.
Весенний семестр — экзамен.
Осенний семестр
| Лекция
|
Тема
1
Введение. Простейшая программа. Объявления и определения, области видимости.
-
2
Основные типы и операции над ними. Выражения и операторы.
-
3
Control statements. Compile-time errors, runtime errors. Undefined behavior и unspecified behavior.
-
4
Указатели. Виды памяти.
-
5
Динамическая память. Массивы. Указатели на функции.
-
6
Ссылки. Константы. Константные указатели и ссылки.
-
7
Приведения типов. Классы и структуры. Модификаторы доступа.
-
8
Конструкторы и деструкторы. Оператор присваивания. Правило трёх.
-
9
Перегрузка операторов. Const-, static-, explicit-методы. Указатели на члены.
-
10
Наследование и его виды. Видимость и доступность методов при наследовании. Конструкторы и деструкторы при наследовании.
-
11
Приведения типов при наследовании. Множественное наследование. Виртуальные функции и полиморфные типы.
-
12
Абстрактные классы. Pure virtual функции. RTTI и dynamic_cast. Таблицы виртуальных функций.
-
13
Виртуальные функции (продолжение). Шаблоны. Перегрузка и специализация шаблонов.
-
14
Вычисления на шаблонах. Метафункции. Зависимые имена.
-
15
Вариативные шаблоны. Исключения. Идиома RAII.
}
Весенний семестр
| Лекция
|
Тема
16
Исключения в конструкторах и деструкторах. noexcept. Exception-safety.
-
17
Контейнеры. Внутреннее устройство vector и deque.
-
18
Устройство deque. Итераторы, виды итераторов, инвалидация итераторов. Внутреннее устройство list.
-
19
Внутреннее устройство map. Классы string_view и span. Идея аллокаторов.
-
20
Внутреннее устройство unordered_map. Allocator traits. Allocator-aware контейнеры.
-
21
Выравнивания. Перегрузка new/delete. Идея move-семантики. Move-конструкторы и move-assignment операторы.
-
22
Определения lvalue и rvalue. Rvalue-ссылки. Reference qualifiers. Perfect forwarding. Универсальные ссылки. std::forward.
-
23
Реализация std::move и std::forward. xvalues, RVO, copy elision, temporary materialization. Функция move_if_noexcept.
-
24
Вывод типов auto, decltype. CTAD, template deduction guides. Tuples, structured bindings, tuple-like types.
-
25
unique_ptr, shared_ptr, weak_ptr, make_shared, enable_shared_from_this. Type erasure. std::any.
-
26
Стирание типов в shared_ptr. Шаблонное метапрограммирование. Идиома SFINAE. Реализация is_class. Метафункция enable_if.
-
27
Реализация has_method_construct, is_base_of. Спецификатор и оператор requires. Концепты.
-
28
Лямбды. Замыкания. Списки захвата. Захват с инициализацией. Захват this. Обобщённые лямбды.
-
29
Шаблонные лямбды. std::function, std::bind, std::reference_wrapper, std::invoke. Идея реализации std::function.
-
30
Constexpr-переменные и функции. Compile-time вычисления.
}
Активности
На каждую задачу:
срок сдачи в контест — 3 недели (2 недели без штрафа);
срок прохождения ревью — 4 недели с момента релиза задачи;
устная сдача входит в ревью;
на устную сдачу даётся ровно 3 попытки.
Задачи первого семестра
| Неделя
|
Задача
5–6
Stack
-
7
String
-
9
BigInteger
-
10
Rational
-
12
Geometry
-
14
Matrix
}
Задачи второго семестра
| Неделя
|
Задача
1
Residue
-
3
Deque
-
6
List and StackAllocator
-
9
Unordered Map
-
11
SharedPtr
-
13
Tuple
-
15
Function
}
Коммуникация
Ссылка на чат курса в мессенджере (будет опубликована ближе к старту семестра).
Прогресс студентов
Ссылка на таблицу студентов с оценками (будет опубликована ближе к старту семестра).
Критерии оценивания и формы контроля успеваемости
Осенний семестр
Задачи
Итоговая оценка по задачам вычисляется по формуле:
Контрольная работа
Финальная контрольная работа является блокирующей.
Даёт от 0 до 3 баллов.
При результате ниже установленного порога зачёт считается не сданным и переходит в статус пересдачи.
Итоговая оценка
Складывается из:
до 7 баллов за задачи;
до 3 баллов за контрольную работу;
до 1 балла от семинариста.
Итоговая оценка округляется вниз.
Весенний семестр
Подсчёт баллов
Учитываются:
6 основных задач с коэффициентом;
баллы за задачу Residue.
Коэффициенты:
| Количество задач
|
Коэффициент
1
×1.0
-
2
×1.1
-
3
×1.2
-
4
×1.3
-
5
×1.4
-
6
×1.5
}
Ограничения на оценки
Для оценки удовлетворительно:
1–2 задачи (без учёта Residue);
250–449 баллов.
Для оценки хорошо:
3–4 задачи (без учёта Residue);
450–749 баллов.
Для оценки отлично:
5–6 задач (без учёта Residue);
750+ баллов.
Перевод баллов в оценку:
Например:
740 баллов → 7;
755 баллов → 8.
Экзамен
На удовлетворительно:
2 билета уровня «уд».
На хорошо:
2 билета уровня «уд»;
2 билета уровня «хор».
На отлично:
2 билета уровня «хор»;
2 билета уровня «отл».
Возможность повышения оценки
2 задачи (без Residue) и более 500 баллов:
- можно претендовать на оценку 5;
- требуется дополнительно ответить 2 билета уровня «хор».
4 задачи (без Residue) и более 800 баллов:
- можно претендовать на оценку 8;
- требуется дополнительно ответить 2 билета уровня «отл».
Дополнительные льготы
При успешной сдаче 4–6 задач (без Residue) билеты на удовлетворительно отвечать не обязательно.
При успешной сдаче 5–6 задач (без Residue) можно вытянуть 3 билета уровня «хор» и 3 билета уровня «отл», выбрав по 2 билета из каждого набора для ответа.
Пример расчёта
Сиксевенов Пабло Ильич решил:
Residue — 90 баллов;
List — 180 баллов;
Tuple — 200 баллов.
Подсчёт:
В этом случае студент может сдавать экзамен на оценку «удовлетворительно». При успешной сдаче билетов уровня «уд» он также может претендовать на оценку 5, поскольку набрал более 500 баллов.
Материалы курса
Видеолекции
|
|
|
|
|