Корпоративные тренинги и консультации

С++ - популярный активно развивающийся язык программирования общего назначения с огромным количеством возможностей.

Цель тренингов - повысить скорость разработки; увеличить производительность, отзывчивость и надёжность ваших приложений; обратить внимание разработчиков на полезные вещи языка и рассказать о подводных камнях и особенностях.

Любые вопросы по тренингам и консультациям можно задавать на почту antoshkka@gmail.com (две буквы 'k'!).

Также возможно создание курсов на интересующие именно вас темы.


Из C в С++

Library

Практический курс для C разработчиков и людей знающих основы C или C++, желающих выучить современный C++. Приблизительный план:

  • Введение:
    • Пример С кода и типичные проблемы
    • Тот же пример на С++
    • RAII и деструкторы
  • Основы языка
    • ссылки и константные ссылки
    • переменные
    • функции
    • передача параметров в функции
    • возврат параметров из функции (упрощённо)
    • перегрузка функций
    • вывод значения
  • Классы (основы 1)
    • переменные класса
    • member initialization
    • private/public
    • функции/операторы члены классы
    • константные функции/операторы члены классы
    • конструктор по умолчанию
    • перегрузка операторов
  • Классы (основы 2)
    • конструктор копирования
    • конструктор перемещения
    • =deleted;/=default;
    • деструктор
    • оператор явного преобразования
  • std::string
    • примеры работы
    • производительность
    • range based for
    • вывод в поток
  • std::vector
    • Примеры работы
    • initilizer list
    • Производительность и подводные камни
    • Вывод в поток
    • auto
    • итераторы
  • Лямбды
    • "функции без имени"
    • capture
    • capture expressions (C++14)
    • mutable
  • Алгоритмы и итераторы
    • O-большое
    • O-большое на практике
    • функциональный объект
    • алгоритмы на каждый день
    • подводные камни <algorithm> (аллокации памяти)
  • Классы (наследование)
    • приватное наследование
    • protected
    • публичное наследование + protected деструктор
    • срезка
    • static методы
    • static переменные
    • оператор вывода в поток
  • Классы (полиморфизм)
    • чисто виртуальные функции
    • виртуальные функции
    • final/override
    • виртуальный деструктор
    • static_cast, dynamic_cast, const_cast, reinterpret_cast
  • Обработка ошибок
    • исключения
    • noexcept
    • std::error_code
    • Комбинированный подход
  • Шаблоны
    • Шаблонные функции
    • Шаблонные классы
    • template aliases
    • Шаблонные функции члены класса
    • <type_traits> и static_assert
  • Контейнеры
    • std::string
    • std::vector
    • std::unordered_map/set
    • std::map/set
    • гетерогенный поиск
    • std::deque
    • std::list
    • std::forward_list
  • C++11 и C++14
    • std::move
    • rvalue & lvalue
    • forwarding/universal reference
    • возврат значений из функции
    • move-only типы данных
    • move_iterator
    • "pinned" типы данных
    • unique_ptr
    • shared_ptr и make_shared
    • pair
    • tuple
    • constepxr
  • Многопоточночть
    • thread (detach, join)
    • mutex + lock
    • atomic
    • thread_local
    • memory models
    • hardware destructive size + alignas
    • подводные камни (multiple locks, RAII)
    • magic statics + call_once
    • shared_mutex (C++17)
  • Очереди
    • conditional_variable (эффективный notify())
    • function

Эффективная стандартная библиотека

Library

Курс посвещён эффективному решению задач средствами стандартной библиотеки и библиотек Boost. Приблизительный план:

  • Алгоритмы:
    • O-большое
    • O-большое на практике
    • Алгоритмы на каждый день, о которых мало кто знает
    • Подводные камни <algorithm> (аллокации памяти, move семантика и итераторы)
  • Структуры данных:
    • string (SSO, пустые строчки, cache friendliness)
    • string_view (пустые строчки, нуль терминация, cache friendliness)
    • vector (аллокации, cache friendliness)
    • list/deque (аллокации, многопоточность)
    • unordered_map (производительность, ограничения, более эффективные решения)
    • map
    • Разновидности векторов (small, stack)
    • Плоские ассоциативные контейнеры
    • Подводные камни (noexcept, move construction)
    • Советы по оптимизации (move, move_iterator)
  • Многопоточность:
    • thread (detach, join)
    • mutex
    • atomic (memory model)
    • conditional_variable (эффективный notify())
    • call_once
    • Подводные камни (multiple locks, RAII)
    • Советы по оптимизации (размер критической секции, эффекты от роста числа ядер процессора)
  • На каждый день:
    • variant
    • optional
    • unique_ptr
    • shared_ptr
    • ProgramOptions
    • Filesystem
    • LexicalCast
    • function

C++11, C++14 и C++17

C++ проект и современная архитектура

Лучшие практики использования новинок стандартной библиотеки и языка C++ для решения продуктовых задач. Приблизительный план:

  • C++11:
    • move семантика
    • auto
    • range based for
    • initilizer list
    • lambda
    • final/override
    • member initialization
    • static_assert
    • noexcept
    • constexpr
    • =default/=delete
    • unordered_map
    • tuple
    • unique_ptr
    • shared_ptr
    • function
    • Псевдослучайные и другие генераторы чисел
    • thread (detach, join)
    • mutex
    • atomic (memory model)
    • conditional_variable (эффективный notify())
    • call_once
  • C++14:
    • generic lambda
    • lambda capture expressions
    • [[deprecated]]
    • shared_mutex
    • Гетерогенный поиск
  • C++17:
    • string_view
    • optional
    • variant
    • filesystem
    • any
    • nodes
    • byte
    • parallel algorithms
    • special math
    • structured bindings
    • if constexpr
    • if/switch with initialization
    • deduction guides
  • Миграция на новые стандарты:
    • C++?? -> C++11
    • C++?? -> C++14
    • C++?? -> C++17
    • Какой стандарт лучше сейчас использовать?
    • Производительность кода
    • Производительность разработки
    • Трудозатраты