Введение в промышленное программирование и структуры данных. Часть II, язык С++

обучить слушателей современным методам программирования и разработки программных систем на языках С и С++, привить навыки надежного промышленного программирования, работы в команде, подготовить студентов к участию в тематических проектах других курсов Технотрека. Как показывает практика, студенты с олимпиадным прошлым привыкли работать не над проектами, а над отдельными задачами, и таких навыков, как правило, не имеют.
15 занятий, 82 ак.часа
Хочу учиться
Что дает курс

- Изучение теоретического материала и отработка его на практических задачах.
- Формирование современной методологии разработки программ и профессиональной системы ценностей, что позволит студентам как успешно разрабатывать системные программные продукты, так и участвовать в дальнейших курсах Технотрека.

Неформально говоря, до прохождения этого курса студенты обычно имеют навыки написания небольших задач, автоматически тестирующихся, не обладающих избыточной надежностью, не связанных с другими частями проекта, уже разработанными или планирующимися к разработке, не предназначенных для использования, прочтения и изменения коллегами, не предназначенных для работы в таких средах, о которых автор в момент написания не имел даже никакого понятия :)

После прохождения этого курса студенты должны получить все эти навыки и начать оттачивать их месяцами и годами - "правило десяти тысяч часов" никто не отменял. Но профессиональные качества программиста зависит от того, как именно провести эти десять тысяч часов.

Какие знания нужны

Преподавание курса ведется в предположении, что студенты уже знают язык Паскаль, или Си (да-да), или ассемблер, или иной процедурный или объектно-ориентированный язык, имеют серьезный опыт логического мышления и решения алгоритмических задач. Необходима гиперактивная позиция на лекциях и семинарах - если что-то хоть минимально непонятно, надо немедленно спрашивать, если стало интересно и хочется углубиться - надо спрашивать! Курс весьма нагруженный, поэтому нужны навыки активной конструктивной коммуникации и взаимопомощи. Опыт разработки больших проектов, знание письменного английского языка, ясное владение родным языком приветствуются.

Как проходят занятия

Автор курса ставит целью концентрированно передать не только свои академические знания, но прежде всего свой опыт разработчика-профессионала.

Ранее этот курс читался в рамках известного проекта Ilab ("Айлаб", образовательной лаборатории МФТИ-Intel) и был доступен только для студентов ФРТК. Теперь он доступен для всех физтехов.

Несколько замечаний:

1. Те, кто уже занимался C, C++ и их потомками - Java, C# и т.п. - найдут много нового в нюансах языков, но главное - в том, как применять языковые средства грамотно.

2. Те, кто считают, что C - уже мертвый язык, а в C++ "легко выстрелить себе в ногу", возможно, в чем-то правы, но "гарантированно не выстрелить себе в ногу" можно только на языке, которым никто не пользуется. А языки семейства С/С++ и их потомки - абсолютные лидеры по применению. К сожалению, на любом языке можно писать плохо и выстрелить в эту самую ногу. Наша цель - научиться не делать так.

3. Те, кто активно занимался алгоритмами и олимпиадами, могут заметить, что алгоритмически курс не супер-нагружен. Это сделано специально, чтобы сфокусироваться на том, что в олимпиадах вообще не рассматривается. А не рассматривается там 90% от необходимых навыков профессионального программиста, так как олимпиады - это лишь только спорт, и большинство навыков программиста-профессионала там просто не нужны. А в профессии - нужны.

Курсов, посвященных только алгоритмам, очень много, - как и литературы по ним в Интернете. Наш курс фокусируется на том, как грамотно реализовать алгоритмы и структуры данных и соединить их вместе в надежно работающий объемный проект, "чтобы не было мучительно стыдно" за бесцельно потраченное время, нервы коллег и свои собственные. История, увы, обычная для каждого олимпиадника, пытающегося прикоснуться к профессии. А вот об этом уже нет курсов, мало книг и немного систематизированной информации в сети.

Важно: этот курс не рассчитан на обучение "с нуля", он предполагает знание какого-либо языка программирования и алгоритмический опыт, олимпиадный или проектный.

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

Lifehack: материал этого курса автор читает в своих академических группах МФТИ для первого курса, поэтому те, кто учатся в этих группах, могут получить за эту работу еще и зачет в зачетку. 

May the Source be with you! :)

Первая часть курса (5-6 занятий) – быстрое практическое введение в C через разбор и решение небольших задач, но с упором на принципы промышленного программирования.

Вторая часть курса (11-12 занятий) – введение в структуры данных и алгоритмы. Практическая часть содержит меньшее число задач, но большего объема. Задачи второй части подобраны по большей части таким образом, что в конце курса каждый студент самостоятельно реализует примитивную модель вычислительной системы, инструментальные средства низкоуровневой разработки, а также небольшой высокоуровневый транслятор в байт-код, совместимый с трансляторами других студентов на уровне AST. Это дает возможность использовать кросс-компиляцию программ одного студента для виртуальной машины другого и затем на ней, а также перевод в исходный текст в формате языка другого студента. Студентам предстоит разработать общие стандарты взаимодействия компонентов системы.

Третья часть курса (второй семестр, 6-10 занятий) представляет собой введение в язык С++ в терминах различий С и С++ методом рефакторинга ряда решений на языке С, рассматривавшихся в первом семестре.

Четвертая часть курса (второй семестр, 6-10 занятий) посвящена технологии применения С++ (ООД, ООП, компонентное программирование) в многомодульном проекте, использующем программный код группы разработчиков в виде динамически подключаемых библиотек. Здесь, используя материал курса языка Ассемблера кафедры информатики МФТИ, появляется возможность устроить продолжение тематики второй части курса в виде реализации простейшего JIT-компилятора.

Сложность задач курса легко регулируется их функциональным наполнением (простейший вариант – транслятор формул, используемый для построения графиков элементарных функций).

Как поступить?

Регистрация
Заполни заявку и регистрируйся на курс до 10:00 13-го сентября
Тестирование
Ссылка на тест придет на почту 14-го сентября. Пройди тест до 10:00 16-го сентября
Зачисление
Письмо о зачислении придет на почту каждому студенту 16-го сентября
Начало обучения
Обучение начнется на неделе с 17-го сентября согласно расписанию

Вопросы по обучению

Отборочный тест

 

Требования к поступающим

Поступить могут студенты и аспиранты всех курсов и факультетов МФТИ, знающие какой-либо язык программирования.

Оборудование для обучения

Компьютер, возможность подключиться к беспроводной сети для выхода в сеть Internet.

Нагрузка в неделю

4 ак. часа в неделю без учета времени на выполнение домашнего задания.

Место проведения

МФТИ.

Стоимость обучения

Обучение бесплатно.

Моего вопроса тут нет :(

Другие вопросы можно посмотреть здесь.

Программа

Лекция № 1. Введение в курс «Программирование на C++»

Понятие класса в С++, отличие от структур С. Верификация данных. Поиск ошибок. Работа с GitHub.

Смешанное занятие № 1. Контейнерные классы в C++

Реализация контейнерных классов в С++.

Смешанное занятие № 2. Контейнерные классы. Проблема владения

Статическая и динамическая память. Понятие ссылки. Константные ссылки и указатели. Копирование и перемещение объектов.

Смешанное занятие № 3. Копирование и перемещение объектов (продолжение)

Ссылки на rvalue. Семантика перемещения. Реализация конструктора перемещения и оператора перемещения.

Смешанное занятие № 4. Шаблоны

Введение в метапрограммирование при помощи шаблонов. Шаблоны классов и функций. Полная и частичная специализация шаблонов. Шаблоны с переменным числом аргументов.

Смешанное занятие № 5. Исключения

Обработка ошибок с помощью исключений. Создание собственного класса исключений. Логгирование ошибок.

Смешанное занятие № 6. Основные коллекции данных и работа с ними

Основные коллекции данных и алгоритмы в STL.

Семинар № 1. Основные коллекции данных и работа с ними (продолжение)

Реализация модели тьюринг-полного стекового вычислителя

Смешанное занятие № 7. Работа с графикой в С++

Работа с графической библиотекой SFML.

Смешанное занятие № 8. Наследование в С++

Наследование в С++. Отличия от агрегирования, отличия публичного и приватного наследования. Построение иерархии классов.

Смешанное занятие № 9. Архитектура игрового движка

Разбор архитектуры игрового движка.

Семинар № 2. Разбор и сдача работ

Разбор и сдача работ.

Семинар № 3. Разбор и сдача работ

Разбор и сдача работ.

Рубежный контроль № 1. Разбор и сдача работ

Разбор и сдача работ.

Рубежный контроль № 2. Разбор и сдача работ

Разбор и сдача работ