Корпоративные тренинги и консультации
С++ - популярный активно развивающийся язык программирования общего назначения с огромным количеством возможностей.
Цель тренингов - повысить скорость разработки; увеличить производительность, отзывчивость и надёжность ваших приложений; обратить внимание разработчиков на полезные вещи языка и рассказать о подводных камнях и особенностях.
Любые вопросы по тренингам и консультациям можно задавать на почту antoshkka@gmail.com (две буквы 'k'!).
Также возможно создание курсов на интересующие именно вас темы.
Из C в С++
Практический курс для 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
Эффективная стандартная библиотека
Курс посвещён эффективному решению задач средствами стандартной библиотеки и библиотек 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++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
- Какой стандарт лучше сейчас использовать?
- Производительность кода
- Производительность разработки
- Трудозатраты