- Изучение теоретического материала и отработка его на практических задачах.
- Формирование современной методологии разработки программ и профессиональной системы ценностей, что позволит студентам как успешно разрабатывать системные программные продукты, так и участвовать в дальнейших курсах Технотрека.
Неформально говоря, до прохождения этого курса студенты обычно имеют навыки написания небольших задач, автоматически тестирующихся, не обладающих избыточной надежностью, не связанных с другими частями проекта, уже разработанными или планирующимися к разработке, не предназначенных для использования, прочтения и изменения коллегами, не предназначенных для работы в таких средах, о которых автор в момент написания не имел даже никакого понятия :)
После прохождения этого курса студенты должны получить все эти навыки и начать оттачивать их месяцами и годами - "правило десяти тысяч часов" никто не отменял. Но профессиональные качества программиста зависит от того, как именно провести эти десять тысяч часов.
Преподавание курса ведется в предположении, что студенты уже знают язык Паскаль, или Си (да-да), или ассемблер, или иной процедурный или объектно-ориентированный язык, имеют серьезный опыт логического мышления и решения алгоритмических задач. Необходима гиперактивная позиция на лекциях и семинарах - если что-то хоть минимально непонятно, надо немедленно спрашивать, если стало интересно и хочется углубиться - надо спрашивать! Курс весьма нагруженный, поэтому нужны навыки активной конструктивной коммуникации и взаимопомощи. Опыт разработки больших проектов, знание письменного английского языка, ясное владение родным языком приветствуются.
Автор курса ставит целью концентрированно передать не только свои академические знания, но прежде всего свой опыт разработчика-профессионала.
Ранее этот курс читался в рамках известного проекта 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-компилятора.
Сложность задач курса легко регулируется их функциональным наполнением (простейший вариант – транслятор формул, используемый для построения графиков элементарных функций).
Поступить могут студенты и аспиранты всех курсов и факультетов МФТИ, знающие
Компьютер, возможность подключиться к беспроводной сети для выхода в сеть Internet.
4 ак. часа в неделю без учета времени на выполнение домашнего задания.
МФТИ.
Обучение бесплатно.
Другие вопросы можно посмотреть здесь.
Понятие класса в С++, отличие от структур С. Верификация данных. Поиск ошибок. Работа с GitHub.
Реализация контейнерных классов в С++.
Статическая и динамическая память. Понятие ссылки. Константные ссылки и указатели. Копирование и перемещение объектов.
Ссылки на rvalue. Семантика перемещения. Реализация конструктора перемещения и оператора перемещения.
Введение в метапрограммирование при помощи шаблонов. Шаблоны классов и функций. Полная и частичная специализация шаблонов. Шаблоны с переменным числом аргументов.
Обработка ошибок с помощью исключений. Создание собственного класса исключений. Логгирование ошибок.
Основные коллекции данных и алгоритмы в STL.
Реализация модели тьюринг-полного стекового вычислителя
Работа с графической библиотекой SFML.
Наследование в С++. Отличия от агрегирования, отличия публичного и приватного наследования. Построение иерархии классов.
Разбор архитектуры игрового движка.
Разбор и сдача работ.
Разбор и сдача работ.
Разбор и сдача работ.
Разбор и сдача работ