Введение в С++
Этот модуль дает ученикам базовое представление о том, что такое язык программирования C++, его историю, какими преимуществами и недостатками обладает этот язык. Также в этом модуле, используя примеры, ученики узнают о различиях между данным языком и его конкурентами и о том, почему компании все чаще выбирают именно язык C++ для разработки продуктов.
Вы научитесь:
- Указывать на преимущества и недостатки языка
- Различать стандарты С++
- Понимать преимущества высокоуровневого языка программирования
- Понимать философию языка С++
Методический план модуля:
Студенты поймут, что из себя представляет язык С++, его преимущества и недостатки, сферы применения, смогут настроить среду разработки для удобной работы, разберутся со структурой программы.
Итог модуля:
После прохождения данного модуля студент приобретет базовое понимание языка программирования С++. Он сможет определить преимущества и недостатки этого языка, различать стандарты С++, а также понимать философию и преимущества высокоуровневого программирования. Студенты также научатся настраивать среду разработки и разбираться со структурой программы, что поможет им в дальнейшей работе и разработке продуктов.
Базовый синтаксис языка
После завершения этого модуля, ученики смогут полностью читать и разрабатывать код средней сложности, используя современные языковые технологии.
Вы научитесь:
- Разрабатывать процедурный код
- Разрабатывать отказоустойчивый код
- Разрабатывать оптимизированный код
- Правильно обрабатывать исключения
- Использовать собственные структуры данных
- Использовать выравнивание данных для оптимизации кода
- Предотвращать неявные преобразования в избежании неявного поведения
- Определять задачу и методы ее решения
- Переключаться между Debug и Release режимами разработки
- Использовать правильные области действия
- Взаимодействовать с интерфейсом системы UNIX
- Определять моменты наилучшего использования указателей, вместо ссылок
- Работать с файлами
- Работать с низкоуровневым вводом-выводом
Методический план модуля:
Студенты изучат как можно разрабатывать различный код и обрабатывать исключения.
Итог модуля:
По завершении данного модуля студенты будут способны читать и разрабатывать код средней сложности, используя современные языковые технологии. Они приобретут навыки разработки процедурного кода, отказоустойчивого кода и оптимизированного кода, а также правильной обработки исключений. Студенты также узнают, как использовать собственные структуры данных, выравнивание данных для оптимизации кода, предотвращать неявные преобразования и взаимодействовать с интерфейсом системы UNIX. Они овладеют навыками работы с файлами и низкоуровневым вводом-выводом.
Хранение и сборка проекта
Помимо написания кода проекта, для запуска приложения также требуется его последующая сборка. Этот модуль предоставляет основные методологии и рекомендации для выполнения успешной сборки проекта и его последующей установки. В дополнение к сборке, для улучшения качества написания кода и устранения ошибок, этот модуль также предоставляет информацию о методологиях хранения версий проекта, что немаловажно при разработке средних/крупных проектов, разрабатываемых 1 или более программистами.
Вы научитесь:
- Собирать статические библиотеки
- Собирать динамические библиотеки
- Определять последовательность процесса компиляции проекта
- Разрабатывать свою логику процесса сборки проекта, установки и обновления
- Определять зависимости приложений используя инструменты операционной системы
- Использовать динамические переменные при сборке проекта
- Дефинировать собственные макросы
- Откатывать свой проект до более старой версии
- Ввести разработку над одним проектом и сохранять внесенные изменения независимо друг от друга
- Работать с централизованными системами контроля версий
- Просматривать историю изменения кода проекта
Методический план модуля:
На уроках ученики смогут написать простейшие строки кода, разобрать популярные ошибки. Изучат способы сборки проекта.
Итог модуля:
По завершении данного модуля студенты приобретут навыки успешной сборки проекта и его установки. Они научатся собирать статические и динамические библиотеки, определять последовательность процесса компиляции проекта, разрабатывать свою логику сборки, установки и обновления. Студенты также овладеют умением определять зависимости приложений, использовать динамические переменные, дефинировать собственные макросы и работать с централизованными системами контроля версий. Полученные знания будут полезными для работы с кодом и процессом сборки проекта.
Базовые алгоритмы
Для написания эффективных и оптимизированных проектов одного знания синтаксиса языка будет недостаточно. Для этого требуются знания алгоритмов, направленных на оптимизацию выполнения различных задач. Но и этого будет недостаточно, потому что зачастую необходимо использовать определенный алгоритм из выбранной группы алгоритмов, так как неправильно выбранный алгоритм также может негативно повлиять на выполнение работы.
Вы научитесь:
- Определять и вычислять сложность алгоритма
- Находить проблемные участки кода, требующие оптимизации
- Различать семейства производительности алгоритмов
- Разрабатывать псевдокод будущего алгоритма оптимизации
- Использовать разложения задачи на подзадачи
- Находить правильную структуру данных под определенный алгоритм
- Находить компромиссы между скоростью и использованием памяти
- Тестировать алгоритмы и математически доказывать их работоспособность
Методический план модуля:
Этот модуль познакомит учеников с различными группами алгоритмов, которые различаются по назначению, сложности, использованию памяти и времени выполнения. Ученики смогут тестировать алгоритмы, определять и вычислять сложность алгоритма.
Итог модуля:
По завершении данного модуля студенты научатся разрабатывать и оптимизировать эффективные проекты, используя знания алгоритмов. Они смогут определить и вычислить сложность алгоритма, находить проблемные участки кода, требующие оптимизации, а также различать семейства производительности алгоритмов. Этот модуль поможет студентам разобраться с различными группами алгоритмов, их назначением, сложностью, использованием памяти и временем выполнения.
ООП
Благодаря этому модулю, ученики получат знания в области разработки программного обеспечения с использованием инструментов объектно-ориентированного программирования (ООП).
Вы научитесь:
- Использовать объектно-ориентированные концепции в написание кода
- Инкапсулировать данные для защиты критических данных от несанкционированного доступа
- Разделять проект на отдельные модули и подмодули
- Разрабатывать проекты с учетом будущей расширяемости
- Разрабатывать приложения с асинхронными взаимодействиями
- Разрабатывать приложения с уменьшенным количеством межмодульных вызовов
- Использовать гибкость полиморфизма по максимуму
- Обрабатывать разнородные структуры данных
- Локализовать код и данные для улучшения обслуживания программного обеспечения
- Изменять поведения объекта по время выполнения
- Разрабатывать приложения в виде каркаса
Методический план модуля:
Ученики узнают, как разрабатывать код, используя такие современные методологии, как структурирование кода/приложения, разделение кода на модули (модульность) и разделение проекта на абстракции. На уроках будут рассмотрены основные понятия и основные принципы ООП. Как ООП применяется на практике.
Итог модуля:
По завершении данного модуля студенты получат знания и навыки в области разработки программного обеспечения с применением объектно-ориентированного программирования (ООП). Этот модуль позволит студентам разрабатывать качественное и гибкое программное обеспечение, применяя принципы ООП и современные методологии разработки.
Стандартная библиотека + STL
Этот модуль предназначен для демонстрации возможностей C++ “из-под капота”. Этот модуль предоставит информацию о существующих стандартных библиотеках C++ и их назначении. В качестве примера также выступит очень популярная библиотека STL.
Вы научитесь:
- Применять структурированные привязки для распаковки набора возвращаемых значений
- Ограничивать область видимости переменных
- Использовать идиому erase-remove для контейнеров
- Создавать собственные итерабельные диапазоны данных
- Обеспечивать совместимость собственных итераторов с категориями итераторов STL
- Реализовывать алгоритмы с помощью итераторов
- Динамически определять функции с помощью лямбда-выражений
- Создавать сложные предикаты с помощью логической конъюнкции
- Работать с реализованными алгоритмами STL
- Создавать строки, конкатенировать и преобразовывать их
- Безопасно извещать о сбое, используя std::optional
- Быстро создавать структуры данных с использованием std::tuple
- Хранение разных типов с использованием std::variant
- Автоматически распараллеливать код, используя стандартные алгоритмы
Методический план модуля:
Студенты изучат основы сериализации объектов и библиотек. Они помогут вашим программам обмениваться данными, а плотная упаковка сэкономит память. В данном модуле вы научитесь импортировать и работать с различными библиотеками.
Итог модуля:
Этот модуль поможет студентам углубить свои знания С++ и использовать мощные инструменты языка для разработки программного обеспечения.
Архитектура операционных систем
В дополнение к знанию синтаксиса языка, ООП и алгоритмов, ученику придется взаимодействовать с операционной системой, на которой будут запускаться разработанные им приложения.
Вы научитесь:
- Использовать системные функции операционной системы
- Обрабатывать системные ошибки, возникающие при системных вызовах и вызовах библиотечных функций
- Открывать, записывать, читать и изменять смещение указателя в файле
- Структурировать память процесса
- Обрабатывать аргументы командной строки
- Работать со временем
- Устанавливать системные ограничения и возможности
- Получать информацию о процессе
- Буферизировать данные файлового ввода-вывода
- Устанавливать, изменять и расширять атрибуты файлов
- Обрабатывать сигналы
- Использовать таймеры
- Создавать процессы, завершать процессы и мониторить процессы
- Синхронизировать потоки
- Устанавливать приоритеты потокам
- Создавать демонов
- Создавать безопасные программы с повышенными привилегиями
- Работать с каналами
Методический план модуля:
Этот модуль предназначен для ознакомления студента с основами работы с операционной системой, ее подводными камнями, архитектурой и предоставляемыми инструментами, которые будут использоваться в будущих проектах.
Итог модуля:
После прохождения данного модуля студенты научатся взаимодействовать с операционной системой, на которой будут запускаться их приложения. Этот модуль поможет студентам получить основные навыки и понимание взаимодействия между их приложениями и операционной системой, что будет важным для успешного развития их будущих проектов.
Многопоточность
Этот модуль является одним из самых сложных, обширных и интересных для изучения. Освоив этот модуль, ученики смогут разрабатывать многопоточные приложения начальной и средней сложности. Помимо разработки многопоточных приложений, студенты получат практические знания о нюансах использования многопоточности, распространенных ошибках при разработке многопоточных приложений, а самое главное - когда стоит, а когда не стоит переводить разработанное приложение на многопоточную архитектуру.
Вы научитесь:
- Разрабатывать код под использование многоядерных процессоров
- Эффективно использовать ресурсы системы
- Разрабатывать код с эфективной организацией межзадачных обменов сообщениями
- Запускать участки кода в фоновом режиме
- Разрабатывать приложение под асинхронную работу
- Обрабатывать исключения в потоках
- Ассоциировать задачи с будущим результатом
- Разрабатывать собственные пулы потоков
- Переконфигурировать алгоритмы под многопоточное выполнение
Методический план модуля:
В этом модуле студенты изучат как устроен процесс, его потоки, как ими управлять, каким образом в программе реализуется многопоточность. Разберутся как использовать инструменты управления синхронизацией потоков для доступа к общим ресурсам. Студенты узнают, что такое многопоточность. Как и зачем она была придумана. Каким образом с помощью многопоточности модно добиться безопасности программы и увеличить скорость работы.
Итог модуля:
После прохождения данного модуля студенты приобретут навыки разработки многопоточных приложений, а также понимание особенностей и нюансов использования многопоточности. Они научатся эффективно использовать ресурсы системы, организовывать обмен сообщениями между задачами, работать с асинхронными задачами, обрабатывать исключения в потоках, создавать собственные пулы потоков и переконфигурировать алгоритмы для многопоточного выполнения.
Полезные навыки и рекомендации
Этот модуль содержит практические рекомендации, следуя которым, ученики будут разрабатывать более чистый и качественный – код, минимизируя написания ошибок, как синтетических, так и логических.
Вы научитесь:
- Использовать готовые паттерны проектирования
- Быстро понимать проект благодаря используемого им паттерна проектирования
- Ввести логирование приложения для будущего анализа ошибок
- Сбор телеметрии приложения и будущая аналитика
- Использование статических анализаторов кода
- Работа с VSC
Методический план модуля:
Этот модуль необходим для построения правильных привычек учеников при разработке кода. На уроках будут рассмотрены паттерны. Разберемся, где и как их можно применять, выясним их плюсы и минусы.
Итог модуля:
После прохождения данного модуля студенты освоят практические рекомендации, которые помогут им разрабатывать более качественный код с минимальным количеством ошибок. Они научатся использовать готовые паттерны проектирования, логирование и сбор телеметрии приложений, а также применять статические анализаторы кода и работать с средой разработки VSC.
Фреймворки и библиотеки
Этот модуль предоставляет список и краткое описание популярных фреймворков, которые могут быть использованы в проектах для решения различных задач. Каждый из представленных фреймворков решает определенные задачи и оптимизирует процесс разработки приложений.
Вы научитесь:
- Работать с фреймворками GTest/GMock, gRPT, CUDA/OpenGl, Catch2, Silicon, PyTorch, TensorFlow и различными библиотеками
Методический план модуля:
Ученики получат общее представление о популярных фреймворках, различиях между фреймворками, их назначении и примерах, демонстрирующих их преимущества. Проработают основные методы и функции каждого фреймворка.
Итог модуля:
После прохождения данного модуля студенты получат общее представление о популярных фреймворках, используемых для разработки приложений. Этот модуль поможет студентам понять различия между фреймворками, их назначение и преимущества, что позволит им оптимизировать процесс разработки приложений и выбирать подходящие инструменты для решения конкретных задач.
IDE
Этот модуль является информативным и предназначен только для демонстрации существующих платформ для разработки приложений. Благодаря этому модулю учащиеся получат полное представление о существующих IDE, их различиях и преимуществах, что, в свою очередь, поможет при выборе конкретной IDE.
Вы научитесь:
- Работать в существующих IDE, разбираться в их различиях и преимуществах
Методический план модуля:
В этом модуле будет показано как производить установку и настройку среды разработки (IDE), как создавать и запускать проект.
Итог модуля:
После прохождения данного модуля студенты получат полное представление о существующих интегрированных средах разработки (IDE), их различиях и преимуществах. Они научатся работать в различных IDE и разбираться в их особенностях, что поможет им принять осознанные решения при выборе конкретной IDE для своих проектов. Этот модуль позволит студентам освоить практические навыки работы с существующими IDE и быть готовыми к эффективной разработке приложений.