Программа и содержание

Для кого этот курс?

Для разработчиков, админов и IoT-специалистов, которые:

достигли предела быстродействия используемого языка программирования: например, Python

хотят задействовать в каком-либо языке программирования стороннюю библиотеку на C, но сталкиваются с проблемами взаимодействия между языками

желают лучше разобраться, как программы взаимодействуют с самой ОС и предоставляемыми ей ресурсами

планируют программировать микроконтроллеры и развиваться в IoT-направлении

стремятся заниматься системным программированием

Необходимые знания:

Базовые навыки работы в консоли UNIX-подобных ОС

Знание любого промышленного языка программирования

Что вам даст этот курс?

Вы не только глубоко погрузитесь в возможности языка С, но и изучите низкоуровневые особенности устройства UNIX-совместимых ОС и ОС семейства Windows. Исследуете случаи из практики, поработаете с задачами уровня middle, получите практические советы по написанию классов программ

После обучения вы:

Будете знать синтаксис С, основы архитектуры процессора и памяти, основы ассемблера, структуры данных

Сможете писать низкоуровневые приложения и приложения под UNIX

Сможете писать приложения-клиенты и приложения-серверы, а также быстро находить ошибки

Поймёте, как С используется в играх и веб-приложениях

Поймёте, как пишутся приложения под микроконтроллеры

Поймёте, как язык С интегрируется с PostgreSQL, MySQL, SQLite

Программа:

Основы программирования на С

В модуле будет рассмотрено современное состояние языка С, его возможности и особенности в соответствии со стандартами. Будут разбираться базовые конструкции языка С, работа с наиболее распространёнными структурами данных, а так же основы практической разработки под Windows и UNIX-подобные ОС.

Тема 1: Инструментарии разработки

Тема 2: Основы языка C //ДЗ

Тема 3: Стандарты C

Тема 4: Best practices программирования

Тема 5: Препроцессор

Тема 6: Библиотеки / ДЗ

Тема 7: Основы ассемблера / ДЗ

Тема 8: Консультация по вопросам ДЗ (Q&A)

Подготовительный блок: основы C и алгоритмы

Эти занятия помогут освежить базовые знания, которые понадобятся в первом модуле курса. Материалы не входят в обязательную программу. Используйте их: до старта курса, если давно не работали с C; параллельно с первым модулем, если чувствуете, что не хватает базовых знаний; точечно — можно смотреть только те темы, которые необходимо повторить.

Тема 1: Типы данных

Тема 2: Типы данных (продолжение)

Тема 3: Динамические структуры данных

Тема 4: Алгоритмы поиска и сортировки

Современный С

В модуле будут рассмотрены элементы сборки программы на языке С: статические и динамические библиотеки. Будут приведены примеры поиска, обнаружения и обработки ошибок в коде, а также методики ООП в языке C.

Тема 1: История, философия и основы работы в UNIX / ДЗ

Тема 2: Программирование под UNIX / ДЗ

Тема 3: Программирование под Windows, интерфейс WinAPI

Тема 4: ООП в C / ДЗ

Тема 5: Обработка ошибок / ДЗ

Процессы в UNIX

Будут рассмотрены особенности программирования под UNIX подобные операционные системы и существующие для этого инструментальные средства. Будет разбираться понятие программ демонов и механизмы их создания.

Тема 1: Введение в процессы

Тема 2: Демоны UNIX

Тема 3: Взаимодействие между процессами / ДЗ

Тема 4: Разделяемая память / ДЗ

Механизмы многопоточности

В модуле рассматриваются принципы создания потоков, что это такое и для чего они нужны. Будут рассмотрены механизмы синхронизации для обеспечения целостности данных.

Тема 1: Введение в потоки / ДЗ

Тема 2: Механизмы синхронизации

Тема 3: Функции в многопоточных приложениях

Тема 4: Консультация по вопросам ДЗ (Q&A)

Сетевое программирование

В модуле будут рассмотрены методы и технологии взаимодействия программ по сети с помощью кода на языке С. Будут показаны примеры создания серверных и клиентских приложений.

Тема 1: Сетевое взаимодействие / ДЗ

Тема 2: Асинхронные сетевые интерфейсы

Тема 3: Веб-сервисы / ДЗ

Введение в ядро Linux

Тема 1: Современные архитектуры ОС

Тема 2: Ядро Linux

Тема 3: Инструментарий для программистов ядра //ДЗ

Тема 4: Система драйверов //ДЗ

Микроконтроллеры

В модуле рассматриваются вопросы применения языка С для работы с микроконтроллерами. В качестве примера будет рассмотрена архитектура Ардуино и показаны примеры программирования на С с использованием микросхемы Ардуино.

Тема 1: Введение в микроконтроллеры

Тема 2: Введение в Ардуино

Тема 3: Разработка приложений на Ардуино

Базы данных

Познакомимся с основными направлениями развития современных СУБД и научимся писать запросы на С к базам данных, реализованным на СУБД PostgreSQL, MySQL и SQLite.

Тема 1: Современные СУБД

Тема 2: Работа с СУБД из C / ДЗ

Создание игр

В модуле представлены основные принципы разработки игр на С. Будут рассмотрены библиотеки DirectX и OpenGL для работы с графикой. Научимся создавать функции работы с устройствами ввода/вывода и создавать интерактивность в играх.

Тема 1: Графические интерфейсы / ДЗ

Тема 2: Игровые фреймворки на С

Тема 3: Современные паттерны / ДЗ

Проектная работа

Заключительный месяц курса посвящен проектной работе. Свой проект - это то, что интересно писать студенту. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

Тема 1: Выбор темы и организация проектной работы

Тема 2: Консультация по проектам и домашним заданиям

Тема 3: Защита проектных работ

Тема 4: Подведение итогов курса

Преподаватели

Эксперты-практики делятся опытом, разбирают кейсы студентов и дают развернутый фидбэк на домашние задания

Виктор Коробков. Консультант команды технологического обеспечения ИТ ИКС 5 Технологии

Андрей Кравчук. C/Python Developer

Виктор Легкоступ. DSP system developer

Ольга Плисенко. Зав. сектором разработки ЦИГИТ АГУ