Программа курса «Разработчик C++»
Вы можете выбрать между базовой и расширенной программой: освоить только самое необходимое junior разработчику или получить больше навыков, расширить резюме и быстрее вырасти до уровня middle. Мы регулярно обновляем материалы — вы учите только то, что точно пригодится на практике.
Бесплатный опциональный модуль10 часовБазовые понятия программирования
Вы узнаете об основах программирования и научитесь писать простые программы на C++
Знакомство с С++
Переменные и ввод
Условные конструкции, цикл for
Функции
Этот модуль необязательный для прохождения, но он поможет вам познакомиться с нашим форматом обучения
1 модуль 20 часов
Введение в C++
Вы познакомитесь с основными возможностями языка С++ и напишете на нём более 25 программ.
Спринт 0. Основы C++.
• Числа и строки. Операции над ними. Ввод и вывод
• Условие и циклы
• V — значит вектор
• Функции
• Контейнер set
• Глубокое копирование, ссылки и константность
• Контейнер map
• Git
Проект «Поисковый сервер»
Создадите основу для собственной поисковой системы.
2 модуль120 часов
Базовые понятия языка С++ и его стандартной библиотеки
Вы освоите понятия, важные для полноценной разработки на С++:
• итераторы — чтобы работать со всеми стандартными алгоритмами,
• конструкторы — чтобы создавать объекты стало проще,
• шаблоны функций — чтобы писать универсальный код.
А еще научитесь обращаться со сложными программами: разбивать код на несколько файлов и тестировать его.
Спринт 1. Изучаем базовые алгоритмы, структуры и классы данных. Погружаемся в детали и избегаем дублирования кода.
• Простые алгоритмы
• Структуры и классы
• Лямбда-функции
Спринт 2. Подробнее знакомимся с целочисленными типами С++, а также с кортежами и шаблонами функций. Узнаем, насколько самоотверженно C++ экономит ресурсы, и учимся избегать связанных с этим ошибок.
• Работа со средой Visual Studio Code
• Числовые типы
• Пары и кортежи
• Шаблоны функций
• Видимость и инициализация переменных
Спринт 3. Тестируем код и осваиваем мощь и гибкость классов.
• Введение в тестирование
• Инструменты тестирования и отладки
• Жизненный цикл объекта
• Перегрузка операторов
• Обработка ошибок. Исключения
Спринт 4. Разбиваем код на несколько файлов и углубляем знания о стандартных алгоритмах.
• Итераторы
• Алгоритмы поиска
• Стек, очередь, дек
• Распределение кода по файлам
Проект «Поисковый сервер»
Сделаете код объектно-ориентированным, напишете фреймворк для юнит-тестов, разделите код на файлы.
3 модуль130 часов
Производительность и оптимизация
Вы научитесь оценивать эффективность высокопроизводительного приложения до и после его разработки. Изучите работу с файлами и регулярными выражениями. Познакомитесь с внутренним устройством контейнеров. Это позволит понять, как настраивать элементы языка на эффективную работу. Чтобы избегать лишних копирований в коде, освоите move-семантику.
Спринт 5. Работаем над скоростью кода и с файлами.
• Профилируем и ускоряем
• Потоковые хитрости
• Просто о сложности. Теория быстродействия
• Работа с файлами
Спринт 6. Учимся управлять памятью.
• Модель памяти в C++
• Односвязный список
Спринт 7. Постигаем внутреннее устройство контейнеров и осваиваем семантику перемещения.
• Эффективные линейные контейнеры
• Семантика перемещения
Проект «Свой препроцессор»
Вы самостоятельно реализуете часть C++, а именно препроцессор, который проходит исходный код до компилятора и обрабатывает директивы.
Проект «Односвязный список»
Вы создадите собственную версию односвязного списка — контейнера, поддерживающего эффективное добавление и удаление элементов.
Проект «Простой вектор»
Вы напишете собственную версию вектора — контейнера, который обеспечивает эффективный доступ к элементам.
4 модуль120 часов
Качество кода
Вы изучите инструменты, которые делают код опрятным и защищают его от человеческих ошибок: пространство имён, константность, RAII. Узнаете, как избавить программу от проблем роста. Освоите динамический полиморфизм.
Спринт 8. Изучаем ассоциацивные контейнеры и пространства имён.
• Ассоциативные контейнеры
• Имена и пространства имён
Спринт 9. Упрощаем код благодаря умным указателям и разбираемся в концепции Undefined Behavior.
• Умные указатели
• Undefined Behavior
Спринт 10. Продолжаем упрощать код с помощью наследования и полиморфизма.
• Наследование и полиморфизм
Спринт 11. Осваиваем практики проектирования программ.
• Константность как элемент проектирования программ
• Идиома RAII
Спринт 12. Достигаем элегантности кода.
• Философия хороших функций
• Передаём данные в функцию
• Получаем данные из функции
• Рефакторинг
Проект «Транспортный справочник»
Напишете программу, позволяющую строить автобусные маршруты в городе.
5 модуль140 часов
Проектирование сложных программ
Вы напишете полноценный вектор, познакомитесь с variadic templates и гарантиями безопасности исключений.
Спринт 13. Пробуем себя в роли разработчиков библиотек и рассматриваем размещение объектов в памяти.
• Vector своими руками
• Хранение объектов в памяти
Спринт 14. Смотрим изнутри, как работает полиморфизм, изучаем популярную систему сборки CMake, учимся пользоваться сторонними библиотеками и пишем свои.
• Таблица виртуальных методов
• Собираем по-новому. CMake
Проект «Контейнер vector»
Разработаете вектор, который автоматически увеличивает свой размер, эффективно работает с памятью и не копирует объекты зря.
Проект «Транспортный справочник»
Разделите транспортный справочник на две программы: одна строит базы данных, другая обрабатывает запросы.
6 модуль40 часов
Проект «Электронная таблица»
Вы закрепите навыки написания понятного и масштабируемого кода: разработаете крупную программу, которую сможете развивать в будущем.
Спринт 15. Дипломный проект
Дипломный проект «Электронная таблица»
Дипломный проект «Электронная таблица»
Сначала вы защитите дизайн-проект таблицы с ячейками и формулами, затем напишете код.
7 модуль148 часов (только в расширенном курсе)
С++ для бэкенда
После основной программы вы можете освоить дополнительную специализацию, чтобы использовать C++ для разработки на бэкенде.
За 3 месяца вы:
• Разработаете программное обеспечение под Linux.
• Получите навык нагрузочного тестирования.
• Научитесь работать с Docker и СУБД PostgreSQL.
• Расширите свои знания о библиотеках разработки на С++ и используете в проекте boost::asio и boost::beast.
Проект «Игра в курьера»
Напишете код для бэкенда небольшой игры. В ней игроки-курьеры соревнуются, кто оптимальнее пройдёт по лабиринту улиц и доставит максимальное количество заказов.