❔ «А зачем мне С++?» — слышим мы от каждого второго абитуриента в ШАД. А если честно, то и от каждого второго поступившего. Ответ у школы устойчивый и, как нам кажется, достаточно убедительный: для того чтобы иметь возможность развивать существующие большие МЛ/ИИ системы, чтобы создавать эффективные высоконагруженные сервисы, чтобы разбираться в системных принципах, требуется и стройное алгоритмическое мышление, и умение собрать из разных «кубиков» большую систему, и понимание достаточно низкоуровневых принципов написания программного кода.
С «плюсами» абсолютно все шадовцы встречаются в курсе алгоритмов, а сегодня обсудим отдельный курс по этому языку программирования.
«С++ — мощный язык с богатым наследием. Тем, кто только ступил на путь освоения этого языка, очень просто заблудиться в изобилии техник и приёмов, созданных за последние 30 лет. Курс посвящён современному подмножеству языка — Modern C++ (стандарты 11, 14, 17, 20). Много внимания уделяется инструментам и библиотекам, которые не являются частью языка, но без которых не получится построить большой и сложный проект.» — авторы курса.
Программа обучения:
Часть 1, осенний семестр
1. Введение и основы языка. Стандарты С++. Базовые типы, переменные, выражения, операторы. Область видимости и преобразование типов.
2. Указатели, ссылки и функции. Составные типы. Время жизни. Value categories. Функции.
3. Классы. Пользовательские типы. Методы класса. Перегрузки.
4. Шаблоны и STL. Специализация и инстанцирование. Вывод типов. Разрешение имён. Стандартные контейнеры.
5. Наследование. Полиморфизм и виртуальность. Классы-интерфейсы. Множественное наследование.
6. Управление ресурсами. Динамическое выделение памяти. RAII. Умные указатели.
7. Шаблоны (продолжение). Perfect forwarding, variadic templates. Итераторы.
8. Компиляция. Системы сборки (gnu/clang). Препроцессинг. CMake. Ast, clang tools. LLVM.
9. Компиляция (продолжение). Линковка. Оптимизации. UB.
10. Расположение объектов в памяти. Отладка. Структуры в памяти, Standard layout type (POD, Plain Old Data). Таблицы виртуальных функций. Выравнивание, операторы alignof и alignas. std::aligned_storage. GDB.
11. Работа с исключениями. try/catch/throw. Гарантии.
12. Обзор STL. Адаптеры. Алгоритмы. IO. regex.
13. Строки. Строки в C. std::string, std::string_view. COW.
Часть 2, весенний семестр
1. Метапрограммирование (шаблоны, sfinae, концепты, constexpr, constinit)
2. Многопоточность (jthread, инструменты синхронизации, shared data, atomic types)
3. Сетевое программирование
4. RPC
5. Корутины
6. Clang, llvm, sanitizers
7. Сборка, линковка
8. Профилирование, флеймграфы
9. С++26, модули
Для сдачи заданий используется система manytask (⭐️ it!), развитие которой как раз началось с курса по плюсам. Всех студентов курса ждут еженедельные «короткие» задания и несколько больших заданий проектного типа.
Спасибо, что дочитали до конца! Успехов на пути изучения нового и до скорых встреч в нашей рубрике #курсышад
Ваш ШАД 🥳
