Проходил 27 ноября 2017 года в 20:00

День открытых дверей
Разработчик С++

День открытых дверей онлайн

Хотите узнать, почему OTUS – больше, чем просто образовательный портал?
Как OTUS дает возможность стать частью сообщества профессионалов и сделать новый шаг по карьерной лестнице?
Почему учиться – не обязанность, а удовольствие и почему тесное сплетение теории и практики в обучении дает эффект синергии?
Приходите к нам на День Открытых Дверей. Формат проведения – онлайн – подключиться можно из любой точки мира!

Запись

О курсе

Разработчик C++
40 000 ₽
5 месяцев
Начало 21 июня
Курс предназначен для разработчиков на языке С++ уровня junior и выше. Если Вы уже занимались разработкой на языке C++, но всё ещё сомневаетесь, что делаете это правильно - курс Вам понравится. Оценки junior, middle и senior довольно субъективны. Очень приблизительно мы бы оценили требуемый уровень в один год разработки на язке C++. Попробуйте пройти входной тест - это поможет получить ...
Программа курса
Модуль 1
Модуль 2
Модуль 3
Модуль 4
Модуль 5
Модуль 6
Модуль 7
Введение
Система сборки: build, test and deploy.
Поиск распространяемых пакетов. Кастомный модуль для наших пакетов.
21 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Сборка и публикация пакета. Написать программу выводящую на консоль единственную строку

Hello, World!

Сформировать готовый для установки deb-пакет со скомпилированной программой и выложить его в репозиторий.
Прислать ссылку на репозиторий в github и ссылку на репозиторий с
пакетом.
Будет здорово, но не обязательно
Добавить версионность в пакет и сообщение.
Запустить на этапе сборки тесты.
Может пригодиться
Выложить исходные тексты в репозиторий на github.
Залогиниться на https://travis-ci.org/ и включить для своего репозитория
автоматическую сборку.
Залогиниться на https://bintray.com/ (For an Open Source Account и аккаунт
github). Создать новый репозиторий - имя произвольное, тип Debian, Default
Licenses любая. После создания отредактировать включив GPG sign.
Создать в созданном репозитории новый пакет - имя произвольное,
ссылка на контроль версии может быть указана как - (просто чтобы было
заполнено).
По ссылке https://bintray.com/profile/edit в пункте API Key скопировать
ключ. В настройках репозитория в https://travis-ci.org создать переменную,
например BINTRAY_API_KEY, и в качестве значения API Key. Это
позволит не указывать явно ключ в исходниках.


Пример на github:
https://github.com/vvz-otus/hw02.cpp01_2
Только ваш проект называться будет helloworld (а не cpp01_2:)
Широкоиспользуемые фичи C++11 стандарта. auto. Замыкание - Лямбда-функции. Кортежи.
Некоторые небольшие, на первый взгляд, нововведения настолько меняют язык, что диву даешься :)
25 июня, 20:00 — 21:30
Широкоиспользуемые фичи C++11 стандарта. rvalue и lvalue ссылки. Move semantic. Variadic Templates. POD. Лямбда-функции. Кортежи.
28 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-02. C++14. 1.
Выполнить задание описанное в ip_filter.pdf

2.
Зарегистрироваться в http://acm.timus.ru
Решить первые пять простых задач:
1001 1000 1785 1293 2012

3. Опционально!
Реализовать constexpr-функцию нахождения ближайшей большей степени двойки
https://goo.gl/CBfjE9
Рассмотрим полезные нововведения 14 стандарта.
2 июля, 20:00 — 21:30
Обзор C++17 - а чего же там эдакого? Часть 1.
На дворе 21-й век, и как-то уже не модно заниматься разработкой на C++98 из прошлого века.
Однако C++11 и даже C++14 также больше не являются финальной точкой развития. Пора приступать к изучению C++17!

На этом занятии мы рассмотрим нововведения стандарта C++17. Даже не будем стараться охватить своим взором абсолютно все нововведения, но всё-таки посмотрим довольно много всего.

Итак, по окончанию этого занятия слушатели получат представление о следующих фишках C++17.

Сначала посмотрим в сторону шаблонов. Как попытались облегчить жизнь разработчиков обобщённого кода?
1. Свёртка списка параметров теперь стала гораздо проще. Появился соответствующий синтаксис - отставить написание промежуточных функций или создания массивов.
2. Теперь можно писать auto в параметры шаблона. Да, раньше было нельзя. Да, это действительно удобно. Покажем на примерах.
3. Автоматический вывод параметров шаблонов сделает код короче и (есть надежда) понятнее. Однако, правила автоматического вывода понятными не стали. Посмотрим на реализацию deduction guide и ужаснёмся. А потом сделаем это самостоятельно.

Не только шаблоны и стандартная библиотека были обновлены. Также изменения коснулись некоторых общих конструкций языка.
1. Долой ifdef, даёшь constexpr if! Достаточно нескольких примеров, чтобы восхититься.
2. inline переменные как попытка избежать проблем extern. Редкая проблема, посмотрим, поймём, забудем до востребования.
3. Раньше было нельзя, а теперь можно - constexpr с лямбдами.
4. Может, пригодится - инициализаторы внутри операторов if и switch.
5. Порядок вычислений стал более упорядочен. Мелочь, а приятно. Теперь не всё UB, что таковым кажется.
6. Вложенные пространства имён экономят бумагу (и табуляции).
7. Старый добрый alignas теперь с новыми гарантиями.
8. Structured bindings или что-то вроде std::tie, но не совсем.
9. __has_include в помощь разработчикам библиотек.
10. Атрибуты. Новые атрибуты. Не знали, что есть старые? Ничего - рассмотрим все.
11. Надоело писать банальные сообщения об ошибках? Теперь можно не писать. Встречайте static_assert с одним аргументом.
5 июля, 20:00 — 21:30
Обзор C++17 - а чего же там эдакого? Часть 2.
На дворе 21-й век... Но это Вы уже знаете и так.

На этом занятии продолжим рассмотрение нововведений стандарта C++17. Впереди ещё много много интересного - не переключайтесь :).

Над стандартной библиотекой трудятся лучшие умы сообщества. Поэтому и изменений довольно много.
1. Посмотрим на std::filesystem. Что-то напоминает? Или нет? Для тех, кто раньше использовал boost - самое то.
2. std::shared_ptr с массивами теперь работает также прекрасно, как и std::unique_ptr. Не поняли, о чём речь? Объясним в деталях.
3. std::scoped_lock как альтернатива довольно неудобному std::lock. Достаточно одного простого примера, чтобы понять суть.
4. std::optional - нечто, чего может и не быть.
5. std::any - нечто, что может быть чем угодно.
6. std::variant - нечто, что знает, чем оно является. И тоже что-то напоминает...
7. std::string_view - классная штука или новая опасность?
8. std::byte на замену uint8_t при работе с памятью. Семантика улучшена.
9. std::invoke и std::is_invocable - ценителям шаблонов.
10. Мало им было std::to_string и itoa, теперь есть ещё и std::to_chars и std::from_chars. Посмотрим, что изменилось. И почему вообще цифры буквами записать так сложно.
11. std::as_const - тоже для любителей шаблонов. Постараемся придумать кейс использования.
12. Уже оценили std::begin, std::end? Нет? Самое время! Встречайте - std::size, std::data и std::empty. Попробуем пообещать себе использовать.
13. Логические метафункции - поймут только знатоки. Посмотрим, восхитимся и забудем. Довольно узкая тема.
14. emplace_back теперь возвращает ссылку. Отставить emplace_back + back! Наконец-то.
15. Searcher functors - для тех, кто знает, что такое алгоритм Бойера – Мура или алгоритм Бойера — Мура – Хорспула. Немного погрузимся, но совсем чуть-чуть.
16. Даёшь больше математики! Не знаете, что такое Дзета-функция Римана? А стандарт C++17 знает. Чисто для информации - на занятиях использовать не будем.
17. try_emplace и insert_or_assign в std::map - оценят только те, кто наступал на грабли. Покажем на примере.
18. Хотите узнать, чем std::apply отличается от std::invoke? Приходите - поговорим об этом.
19. Много проблем с std::initializer_list? Их решить призван метод std::make_from_tuple.
20. Кто-нибудь пользовался std::not1 и std::not2? Теперь можно пользоваться ещё одной функцией - std::not_fn. Не пользовались? Попробуем на занятии.
21. Пересадка элементов контейнеров гораздо проще пересадки органов - std::extract спешит на помощь! Заодно посмотрим на merge-метод.
22. std::is_integral<T>::value - теперь можно короче: std::is_integral_v<T>. Шаблоны становятся чуть менее страшными.
23. Параллельные алгоритмы теперь не только в параллельных вселенных. Больше не нужно изобретать велосипедов (хотя бы части).


Есть также возможности языка, которые больше таковыми не являются. Кое-что было безжалостно выпилено из стандарта.
1. Попрощаемся с триграфами (а кто-то узнает о том, что они были).
2. Простимся с std::auto_ptr (надеюсь, никто и не пользовался).
3. Незаслуженно забудем std::random_shuffle.
4. Узнаем, что теперь нельзя делать перфиксный и постфиксный инкременты для типа bool (да, раньше можно было).
5. Больше не будем использовать спецификацию исключений.
9 июля, 20:00 — 21:30
Вглубь реализации умных указателей.
Подводные камни и оптимизации.
12 июля, 20:00 — 21:30
Идея аллокаторов.
Стандартный аллокатор и его недостатки. Различные методы управлением памятью: достоинства и недостатки.
16 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-03. allocator. 1. Выполнить задание описанное в 03.homework.pdf
2. На acm.timus.ru выполнить 1409, 1877, 2001, 1264, 1787
Что это и зачем? Как выглядит в C++: макросы и шаблонная магия. Примеры. Type traits в STL. SFINAE
19 июля, 20:00 — 21:30
Архитектура
Принципы проектирования ПО
UML. Принципы: SoC, DRY, YAGNI, KISS, TDA, LoD, SOLID
23 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
ДЗ-04.doxygen. 1. Выполнить задание описанное в 04.homework.pdf
2. Решить первые 15 задач на acm.timus.ru (от простых к сложным)
3. Предоставить РЕВЬЮ ДЗ-02 от двух коллег (которые его выполнили)
4. Опционально: предоставить примеры, из своей практики, использования Принципов Проектирования
GRASP. Часть 1
Рассмотрим: Indirection, Low Coupling, Polymorphism, Protected Variations.

Дополним всё это безобразие: Creator, Controller, Pure Fabrication, Information Expert, High Cohesion
26 июля, 20:00 — 21:30
Шаблоны GoF. Часть 1.
Порождающие шаблоны проектирования.
30 июля, 20:00 — 21:30
Шаблоны GoF. Часть 2.
Структурные шаблоны проектирования.
2 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Решаем фрагмент прикладной задачи используя изученные подходы..
Шаблоны GoF. Часть 3.
Поведенческие шаблоны проектирования. 1 часть
6 августа, 20:00 — 21:30
Шаблоны GoF. Часть 4.
Поведенческие шаблоны проектирования. 2 часть
9 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Решаем фрагмент прикладной задачи используя изученные подходы..
Антипаттерны
Разберем антипаттерны программирования (кодирования), ООП, проектирования и антипаттерны в других областях
13 августа, 20:00 — 21:30
STL. Часть 1.
Структуры данных STL
16 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализуем алгоритм используя разные структуры. Оцениваем читаемость и эффективность..
STL. Часть 2
Алгоритмы
20 августа, 20:00 — 21:30
Boost. Часть 1
Контейнеры
23 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Создаем набор повседневных утилит..
Boost. Часть 2
Алгоритмы
27 августа, 20:00 — 21:30
Параллельные вычисления
Многопоточность
Потоки. Критические секции и методы синхронизации: мьютексы, семафор, условные переменные, барьеры. Пулы потоков.
30 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализуем алгоритм максимально задействовав все имеющиеся ядра CPU..
Шаблоны 5
Concurrency pattern. Active Object, Balking, Barrier, Double-checked locking, Guarded suspension, Leaders/followers, Monitor Object, Reactor, Read write lock, Scheduler, Thread pool, Thread-local storage.
3 сентября, 20:00 — 21:30
Асинхронное программирование
Архитектура асинхронных сервисов. Низкоуровневая поддержка асинхронного выполнения кода.
6 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Читаем RSS нескольких сервисов..
Lockfree DS
Неблокирующие структуры данных и алгоритмы. BOOST Lockfree
10 сентября, 20:00 — 21:30
Сеть
Сетевое взаимодействие
Сокеты. Протоколы: TCP и UDP. Сериализация. HTTP. Json. Zmq. Protobuf.
13 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Клиент и сервер для реализации внешнего kv хранилища..
Асинхронный ввод/вывод
Библиотеки и практики работы с неблокирующей передачей данных
17 сентября, 20:00 — 21:30
Хранилища
РСУБД
Использование РСУБД. Подключение и работа с БД
20 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Высокоуровневый клиент для работы с pg.
Key Value
Идея NoSQL. Aerospike, redis, leveldb
24 сентября, 20:00 — 21:30
Много данных
Map reduce
27 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
На реальном примере выявить навигационные запросы..
ORM
ООП при работе с базами данных. Паттерны DAO и Repository
1 октября, 20:00 — 21:30
ML
Dlib. Часть 1.
Кластеризация, тематическое моделирование.
4 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разбить заголовки прочитанных rss на группы.
Dlib. Часть 2.
Регрессия
8 октября, 20:00 — 21:30
Dlib. Часть 3.
Классификация
11 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
На реальном примере выявить поведение характерное для ботов..
Проектная работа
Заключительная часть курса посвящена проектной работе.
Мало что доставляет столько же удовольствия, как самостоятельно реализованный проект на выбранную самостоятельно тему на основе знаний, полученных на курсе.
В процессе написания (и даже в процессе выбора темы) можно получить консультации преподавателей.

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

F.A.Q.: Наиболее часто задаваемые вопросы:

Могу ли я принять участие в розыгрыше, если я уже оплатил обучение?
В розыгрыше принимают участие все пользователи, успешно прошедшие вступительное тестирование. Если вы уже оплатили обучение и выиграли в розыгрыше, то мы компенсируем вам затраты.
Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару. Если вы хотите принять участие в розыгрыше бесплатных мест – до начала мероприятия необходимо зарегистрироваться на сайте и успешно пройти вступительное тестирование
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы