Открытый вебинар «Cтранно рекурсивный шаблон» 11.09.2018 в 20:00 | OTUS

Курсы

Программирование
PHP Developer. Basic
-20%
Специализация PHP Developer
-25%
C# Developer. Professional
-20%
Team Lead
-20%
Symfony Framework
-20%
PHP Developer. Professional
-20%
C# ASP.NET Core разработчик
-20%
Специализация Python Developer
-25%
Разработчик на Spring Framework
-20%
Kotlin Backend Developer
-20%
Архитектура и шаблоны проектирования
-20%
Highload Architect Java Developer. Professional Android Developer. Basic Специализация Android-разработчик Unity Game Developer. Professional Специализация C++ Developer Cloud Solution Architecture Java Developer. Basic JavaScript Developer. Professional NoSQL Rust Developer Framework Laravel Unity Game Developer. Basic Node.js Developer JavaScript Developer. Basic C# Developer. Basic Специализация C# Unreal Engine Technical Game Design Kotlin Developer. Basic
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02
Проходил 11 сентября 2018 года в 20:00

Открытый вебинар "Разработчик C++"
Cтранно рекурсивный шаблон

Открытый вебинар онлайн

Широко распространённая практика использования виртуальных методов для изменения функциональности во время исполнения может приводить к снижению производительности. Учимся достижению подобной цели без потери производительности и динамического полиморфизма. Также рассмотрим недостатки виртуальных методов с точки зрения производительности, поймём, как устроен статический полиморфизм, и как правильно употреблять аббревиатуру CRTP.
Преподаватель
Дмитрий Шебордаев

Запись

О курсе

C++ Developer. Professional
90 000 ₽
5 месяцев
Начало 30 марта

 

  • Умение писать на С++ правильно.
  • Понимание современных проблем языка и специфики его применения.
  • Освоение паттернов проектирования, принципов написания многопоточного кода.
  • Знание, как взаимодействовать с сетью, хранить и обрабатывать большие объемы данных.
  • Владение нюансами программирования на С++, которые отличают разработчика уровня Middle от Junior.

 


Обучено студентов 400+

37 практических занятий

Программа курса
Модуль 1
Современный C++
Модуль 2
Архитектура
Модуль 3
Параллельные вычисления
Модуль 4
Сеть
Модуль 5
Хранилища
Модуль 6
ML
Модуль 7
Проектная работа
Современный C++
CI/CD. C++11. C++14. C++17. Управление памятью. Шаблонная магия
Система сборки: build, test and deploy.
познакомиться;
объяснить, как будем работать;
обсудить с кем и как общаться;
объяснить зачем нужна автоматизация сборки;
расшифровывать аббревиатуру CI/CD;
подготовить стенд для выполнения самостоятельных работ.
30 марта, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-01. Сборка и публикация пакета.. Что требуется сделать:
1. Выполнить задание, описанное в 01.homework.pdf
2. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com с реализованным проектом и настроенным workflow для github actions с историей успешных сборок;
- ссылку на релиз на github для вашего проекта.
Особенности C++11. auto, lambda, tuple
освежить основы по C++11 (пригодится дальше по курсу);
рассмотреть новые фичи C++11 (тоже пригодится);
обсудить особенности, которые важно учитывать.
6 апреля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Фильтрация IP-адресов. Что требуется сделать:
1. Выполнить задание, описанное в 02.homework.pdf
2. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com с реализованным проектом и настроенным workflow для github actions с историей успешных сборок;
- ссылку на релиз на github для вашего проекта.
Особенности C++11. Move, variadic templates
освежить основы по C++11 (пригодится дальше по курсу);
рассмотреть новые детали;
обсудить особенности, которые стоит учитывать.
8 апреля, 20:00 — 21:30
Сравнение C++11/C++14 с С++ 03
освежить знания по C++14;
рассмотреть новые детали;
обсудить особенности С++ 14, на которые стоит обратить внимание.
13 апреля, 20:00 — 21:30
Реализация умных указателей
рассмотреть правило: "взял память - верни, когда больше не нужна";
объяснить, как следовать этому правилу;
разобраться с разными типами умных указателей.
15 апреля, 20:00 — 21:30
Идея аллокаторов
объяснить важность стратегий аллокации памяти;
использовать разные аллокаторы,
разобраться, как реализовать свой аллокатор;
объяснить, как расширяется std::vector, и почему именно так.
20 апреля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-02. allocator. Что требуется сделать:
1. Выполнить задание описанное в 02.homework.pdf

2. На acm.timus.ru выполнить задачи:
1409, 1877, 2001, 1264, 1787

3. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com с реализованным проектом и настроенным workflow для github actions с историей успешных сборок;
- ссылку на релиз на github для вашего проекта.
- ссылку на аккаунт на acm.timus.ru со списком принятых задач.
Шаблонная магия
перестать бояться шаблонов;
пообещать себе перестать пользоваться макросами;
прочитать STL;
работать с документацией.
22 апреля, 20:00 — 21:30
Обзор C++17. Constexpr lambda. Fold expression. Attributes. Type deduction
разобраться с основными нововведениями С++ 17;
объяснить в каких случаях они используются;
обойти несколько спорных моментов.
27 апреля, 20:00 — 21:30
Обзор C++17. If constexpr. Structured bindings. Statements with initializer. std::filesystem
разобраться с основными нововведениями С++17;
рассмотреть кейсы использования;
обсудить несколько тонких моментов;
пользоваться новым стандартом языка.
29 апреля, 20:00 — 21:30
C++20 - что это и зачем?
открыть для себя дивный мир последнего стандарта, о котором ходят столько легенд и слухов;
объяснить, почему именно такие изменения были добавлены в стандарт;
получить список нововведений для повседневного использования.
4 мая, 20:00 — 21:30
Архитектура
Принципы проектирования ПО, GRASP, шаблоны GoF, STL, Boost
Принципы проектирования ПО
разобраться, зачем нужны принципы;
пользоваться принципами,
прочитать UML диаграммы.
6 мая, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-03. Doxygen. Что требуется сделать:
1. Выполнить задание описанное в 03.homework.pdf

2. Решить первые 15 задач на acm.timus.ru (от простых к сложным). Отсортированный по сложности список:
http://acm.timus.ru/problemset.aspx?space=1&page=all&skipac=False&sort=difficulty

3. Сделать ревью решений ДЗ-01 двух коллег (которые его выполнили)

4. Опционально: предоставить примеры, из своей практики, использования Принципов Проектирования

5. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com;
- ссылку на проект на travis-ci.org;
- ссылку на репозиторий bintray.com;
- ссылку на аккаунт на acm.timus.ru со списком принятых задач;
- ссылки на выполненные ревью.
GRASP
обращать внимание на архитектурные детали кода;
улучшать метрики кода;
находить ошибки в коде коллег.
11 мая, 20:00 — 21:30
Шаблоны GoF. Порождающие
прочитать паттерны проектирования;
использовать паттерны;
объяснить ценность экспериментов.
13 мая, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-04. Editor.. Что требуется сделать:
1. Выполнить задание, описанное в 04.homework.pdf

2. На acm.timus.ru решить любые 3 задачи с уровнем сложности от 100 до 150.
Отсортированный по сложности список:
http://acm.timus.ru/problemset.aspx?space=1&page=all&skipac=False&sort=difficulty
Если выбрать сложно, есть ещё списки задач по темам (ближе к концу страницы):
http://acm.timus.ru/problemset.aspx

3. Сделать ревью решений ДЗ-03 двух коллег (которые его выполнили).

4. Опционально: сделать ревью на ревью ДЗ-02.

5. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com;
- ссылку на проект на travis-ci.org;
- ссылку на репозиторий bintray.com;
- ссылку на аккаунт на acm.timus.ru со списком принятых задач;
- ссылки на выполненные ревью;
- опционально: ссылку на ревью на ревью.
Шаблоны GoF. Структурные
прочитать паттерны проектирования;
использовать паттерны;
объяснить ценность экспериментов.
18 мая, 20:00 — 21:30
Шаблоны GoF. Поведенческие. Command, Interpreter, Iterator, Mediator, Memento, Chain of responsibilily
прочитать паттерны проектирования;
использовать паттерны;
объяснить ценность экспериментов.
20 мая, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-05. Matrix.. Что требуется сделать:
1. Выполнить задание, описанное в 05.homework.pdf

2. На acm.timus.ru решить любые 3 задачи с уровнем сложности от 151 до 200.
Отсортированный по сложности список:
http://acm.timus.ru/problemset.aspx?space=1&page=all&skipac=False&sort=difficulty
Если выбрать сложно, есть ещё списки задач по темам (ближе к концу страницы):
http://acm.timus.ru/problemset.aspx

3. Сделать ревью решений ДЗ-03 двух коллег (которые его выполнили).

4. Опционально: сделать ревью на РЕВЬЮ ДЗ-03.

5. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com;
- ссылку на проект на travis-ci.org;
- ссылку на репозиторий bintray.com;
- ссылку на аккаунт на acm.timus.ru со списком принятых задач;
- ссылки на выполненные ревью;
- опционально: ссылку на ревью на ревью.
Шаблоны GoF. Поведенческие. Observer, State, Strategy, Template method, Visitor
прочитать паттерны проектирования;
использовать паттерны;
объяснить ценность экспериментов.
25 мая, 20:00 — 21:30
STL. Контейнеры
рассмотреть контейнеры STL;
объяснить, какие типы контейнеров есть в STL;
настраивать поведение контейнеров.
27 мая, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-06. cmd. Что требуется сделать:
1. Выполнить задание, описанное в 06.homework.pdf

2. На acm.timus.ru решить 3 любые задачи с уровнем сложности от 201 до 300.
Отсортированный по сложности список:
http://acm.timus.ru/problemset.aspx?space=1&page=all&skipac=False&sort=difficulty
Если выбрать сложно, есть ещё списки задач по темам (ближе к концу страницы):
http://acm.timus.ru/problemset.aspx

3. Сделать ревью решений ДЗ-04 двух коллег (которые его выполнили).

4. Опционально: сделать ревью на ревью ДЗ-04.

5. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com;
- ссылку на проект на travis-ci.org;
- ссылку на репозиторий bintray.com;
- ссылку на аккаунт на acm.timus.ru со списком принятых задач;
- ссылки на выполненные ревью;
- опционально: ссылку на ревью на ревью.
STL. Алгоритмы
разобраться, почему алгоритмов в STL так много;
объяснить, зачем нужны алгоритмы в STL;
использовать алгоритмы.
1 июня, 20:00 — 21:30
Бонус. Красно-чёрные деревья
перечислить правила размещения элементов в красно-чёрном дереве;
выполнить балансировку красно-чёрного дерева;
выполнить удаление элементов из красно-чёрного дерева.
3 июня, 20:00 — 21:30
Boost. Разное
объяснить философию проекта Boost;
прочитать документациию Boost,
выбирать и применять библиотеки7
8 июня, 20:00 — 21:30
Boost. Паттерны проектирования
рассмотреть Boost;
посмотреть на реализацию паттернов проектирования;
расширить знания про библиотеку.
10 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-07. Boost. Что требуется сделать:
1. Выполнить задание, описанное в 07.homework.pdf

2. Опционально: на acm.timus.ru решить 3 любые задачи с уровнем сложности от 401 до 450.
Отсортированный по сложности список:
http://acm.timus.ru/problemset.aspx?space=1&page=all&skipac=False&sort=difficulty
Если выбрать сложно, есть ещё списки задач по темам (ближе к концу страницы):
http://acm.timus.ru/problemset.aspx

3. Опционально. Сделать ревью решений ДЗ-05 двух коллег (которые его выполнили).

4. Опционально: сделать ревью на ревью ДЗ-01.

5. Отправить на проверку в "Чат с преподавателем":
- ссылку на свой репозиторий на guthub.com;
- ссылку на аккаунт на acm.timus.ru со списком принятых задач;
- ссылки на выполненные ревью;
- опционально: ссылку на ревью на ревью.
Бонус. Хэш-функции и хэш-таблицы
создавать хэш-функции;
вычислять хэш-значения для строк;
добавлять данные в хэш-таблицы.
15 июня, 20:00 — 21:30
Параллельные вычисления
Использование многопоточности, паттерны многопоточных приложений, асинхронный подход к решению задач, LockFree техника, особенности атомарных операций в C++.
Многопоточность
использовать потоки в своих приложениях;
решать основные проблемы многопоточности;
использовать инструменты стандартной библиотеки.
17 июня, 20:00 — 21:30
Шаблоны 5
объяснить многопоточные паттерны;
использовать для решения задач.
22 июня, 20:00 — 21:30
Асинхронное программирование
объяснить разницу между многопоточностью, параллельностью и асинхронностью;
выбрать подходящее решение для своей задачи;
использовать возможности стандартной библиотеки.
24 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-08. Многопоточная асинхронная обработка команд. 1. Выполнить задание описанное в 08.homework.pdf
2. Опционально. На acm.timus.ru решить 3 любые задачи с уровнем сложности от 501 до 550.
3. Опционально. Предоставить своё ревью на решения ДЗ-06 от двух коллег (которые его сделали).
4. Опционально: Предоставить ревью на РЕВЬЮ ДЗ-04.
Lockfree DS
разобраться в том, что такое lock-free подход;
видеть сценарии его использования;
прочитать lock-free код.
29 июня, 20:00 — 21:30
Атомарные типы данных
использовать атомарные операции в своём коде;
разобраться в принципах и стоимости их работы.
1 июля, 20:00 — 21:30
Сеть
Основные принципы сетевого взаимодействия, использование библиотеки Boost.Asio
Сетевое взаимодействие
объяснить, зачем нужна сеть в программах на C++,
объяснить, как решать возникающие проблемы.
6 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-09. Асинхронная сетевая обработка команд. 1. Выполнить задание описанное в 09.homework.pdf
2. Опционально. На acm.timus.ru решить 2 любые задачи с уровнем сложности от 551 до 600.
3. Опционально. Предоставить своё ревью на решения ДЗ-07 от двух коллег (которые его сделали).
4. Опционально: Предоставить ревью на РЕВЬЮ ДЗ-05.
Асинхронный ввод/вывод
использовать библиотеки для работы с сетью;
выбирать подходящие инструменты.
8 июля, 20:00 — 21:30
Хранилища
Различные системы хранения данных - РСУБД и NoSQL системы, схема mapreduce для обработки большого количества данных, ORM системы для автоматизации.
РСУБД
использовать хранилища данных в своих проектах.
13 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-10. outer join. 1. Выполнить задание описанное в 10.homework.pdf
2. Опционально. На acm.timus.ru решить 2 любые задачи с уровнем сложности от 601 до 650.
3. Опционально. Предоставить своё ревью на решения ДЗ-8 от двух коллег (которые его сделали).
Key Value
разобраться в том, что же такое NoSQL;
выбирать решение под задачу.
15 июля, 20:00 — 21:30
Много данных
разобраться в идеологии map reduce;
немного поэкспериментировать.
20 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-11. mapreduce. 1. Выполнить задание описанное в 11.homework.pdf
2. Опционально. На acm.timus.ru решить 2 любые задачи с уровнем сложности от 651 до 700.
3. Выложить свою реализацию на ревью.
4. Опционально. Предоставить два своих ревью на ДЗ-09.
ORM
разобраться, зачем нужны ORM,
применять их в своих приложениях.
22 июля, 20:00 — 21:30
ML
Задачи, которые решаются с помощью алгоритмов машинного обучения.
Dlib. Кластеризация и классификация
разобраться, зачем нужно машинное обучение;
решать базовые задачи ML;
прочитать документацию Dlib.
27 июля, 20:00 — 21:30
Dlib. Регрессия
разобраться с формулировкой и решение задачи регрессии.
29 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-12. Недвижимость. 1. Выполнить задание описанное в 12.homework.pdf
2. Выложить свою реализацию на ревью.
3. Да и хватит на этом. Пора приступать к проекту.
Проектная работа
Заключительная часть курса о программировании на С++ посвящена проектной работе.
Мало что доставляет столько же удовольствия, как самостоятельно реализованный проект на выбранную самостоятельно тему на основе знаний, полученных на курсе.
В процессе написания (и даже в процессе выбора темы) можно получить консультации преподавателей.

При удачном стечении обстоятельств (в основном, при наличии должного усердия со стороны студента) проект станет достойным примером кода, который можно будет показывать потенциальным работодателям в качестве портфолио. Таким образом обучение программированию завершится большой практической работой, и вы будете гордиться тем, что сделали своими руками.
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом.
3 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Проектная работа. Преполагаемые этапы выполнения:
1. Проработанные требования к реализации
2. Планируемая архитектура
3. Полная итоговая реализация.
Сдавать можно как по частям, так и сразу итоговый вариант.

Не обязательно придерживаться указанному плану.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
5 августа, 20:00 — 21:30
Защита проектных работ
защитить проект и получить рекомендации экспертов.
10 августа, 20:00 — 21:30
Подведение итогов курса
узнать, как получить сертификат об окончании курса, как взаимодействовать после окончания курса с OTUS и преподавателями, какие вакансии и позиции есть для выпускников (опционально - в России и за рубежом) и на какие компании стоит обратить внимание.
12 августа, 20:00 — 21:30

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

Дмитрий Шебордаев
Rambler&Co
Руководитель отдела разработки технологий в Rambler&Co
Получил образование по специальности «Прикладная математика» в Московском государственном университете экономики статистики и информатики.
Начинал рядовым разработчиком в компании, автоматизирующей процессы розничной торговли. Автор одной из самых популярных систем в РФ и бывших республиках. Не прекращая активной деятельности в разработке, прошёл путь до руководителя. Последние несколько лет работает в области информационного поиска в крупной российской ИТ-компании. Остаётся верен своей профессии свыше 20 лет. Читает образовательные курсы по специальности.
Преподаватель курсов:
C++ Developer. Professional