diff --git a/English/Graph/roadmap.svg b/English/Graph/roadmap.svg index 0f1e444..48d95ef 100644 --- a/English/Graph/roadmap.svg +++ b/English/Graph/roadmap.svg @@ -1,25 +1,25 @@ - + - + - + - - + + - - + + - + C++ developer @@ -27,11 +27,11 @@ - + - + Soft skills @@ -39,7379 +39,7371 @@ - + - + Hard skills - - + + - - + + - - Сначала может показаться, что некоторые из навыков - развивать невозможно. Однако мы считаем иначе. - Над каждым из пунктов возможно работать. Всё - упирается в желание и внутренние блоки. Всё - индивидуально, и зависит от вас. :) + + At first, some of the skills may seem impossible to + develop. However, we think differently. It is possible to + work on each of the skills. Everything depends on your + desire and internal blocks. Everything is individual, and + it's up to you to decide. :) - - + + - - + + - - Умение учиться + + Ability to learn - - + + - - + + - - Работа с ошибками + + Manage mistakes - - + + - - + + - - Мышление + + Thinking - - + + - - + + - - Ответственность + + Responsibility - - + + - - + + - - Управление ресурсами + + Manage resources - - + + - - + + - - Коммуникация + + Communication - - + + - - + + - - Командная работа + + Team work - - + + - - + + - - Эмоциональный интелект + + Emotional intelligence - - + + - - + + - - Понимание контекста разработки + + Understanding the development context - - + + - - + + - - Клиентоориентированность + + Customer focus - - + + - - + + - - Технологии + + Technology - - + + - - + + - - Тренды + + Trends - - + + - - + + - - Эмпатия + + Empathy - - + + - - + + - - Концентрация + + Concentration - - + + - - + + - - Открытость новому + + Open-mindedness - - + + - - + + - - Адаптируемость + + Adaptability - - + + - - + + - - Стрессоустойчивость + + Stress resistance - - + + - - + + - - Работа в неопределённости + + Working in uncertainty - - + + - - + + - - Понимание распределения ролей в команде + + Understanding the distribution of roles in a team - - + + - - + + - - Помощь + + Support team members - - + + - - + + - - Работа в распределённой команде + + Work in a distributed team - - + + - - + + - - Предоставление обратной связи + + Providing feedback - - + + - - + + - - Лидерство + + Leadership - - + + - - + + - - Наставничество + + Mentoring - - + + - - + + - - Делегирование + + Delegation - - + + - - + + - - Постановка задач сотрудникам + + Assigning and clarifying tasks to employees - - + + - - + + - - Планирование и целеполагание + + Planning and goal setting - - + + - - + + - - Переговорческие навыки + + Negotiation - - + + - - + + - - Английский язык + + English - - + + - - + + - - Презентация + + Presentation - - + + - - + + - - Навык переписки + + Written communication skill - - + + - - + + - - Нетворкинг + + Networking - - + + - - + + - - Умение слушать + + Ability to listen - - + + - - + + - - Убеждение + + Persuasion - - + + - - + + - - Умение доносить мысль/идеи внутри команды + + Ability to communicate ideas and thoughts within the team - - + + - - + + - - Поиск компромиссов + + Finding compromises - - + + - - + + - - Регулирование споров + + Dispute resolution - - + + - - + + - - Подача информации людям вне команды + + Providing information to people outside the team - - + + - - + + - - Тайм-менеджмент + + Time management - - + + - - + + - - Приоритезация + + Prioritization - - + + - - + + - - Принятие решений + + Taking decisions - - + + - - + + - - Слепая печать + + Blind typing - - + + - - + + - - Многозадачность + + Multitasking - - + + - - + + - - Дисциплина + + Discipline - - + + - - + + - - Упорство + + Persistence - - + + - - + + - - Инициативность + + Initiative - - + + - - + + - - Самостоятельность + + Independence - - + + - - + + - - Решение проблем + + Problem solving - - + + - - + + - - Логическое + + Logical - - + + - - + + - - Критическое + + Critical - - + + - - + + - - Креативное + + Creative - - + + - - + + - - Стратегическое + + Strategic - - + + - - + + - - Системное + + Systems - - + + - - + + - - Восприятие критики + + Accept criticism - - + + - - + + - - Своевременное сигнализирование об ошибках + + Notify about mistakes in time - - + + - - + + - - Признание своих ошибок + + Admitting your mistakes - - + + - - + + - - Анализ ошибок + + Analyze mistakes - - + + - - + + - - Умение задавать правильные вопросы + + Ask the right questions - - + + - - + + - - Экспериментирование + + Experimenting - - + + - - + + - - Управление знаниями + + Manage knowledge - - + + - - + + - - Работа с информацией + + Process information - - + + - - + + - - Умение собирать информацию, - анализировать её и выдавать - взвешенное  решение. + + Ability to gather, analyze, evaluate + information and make decisions + based on it. - - + + - - + + - - Рефлексия + + Reflection - - + + - - + + - - Cпокойно реагировать на то, что люди говорят. - Скорее всего, они учитывают только собственный - контекст, когда что-то пытаются доказать. Это - нормально. Оценивайте полезность их точки зрения. + + Calmly react to what people say. Most likely that they + only consider their own context when they try to prove + something. This is fine. Evaluate the usefulness of their + point of view. - - + + - - + + - - Брать сложные задачи, чтобы развивать свои - навыки и компетенции, даже когда недостаточно - знаний/опыта (через такие задачи гораздо быстрее - развиваются навыки). Главное отличить реально - полезную сложную задачу, которая прокачает, - от задачи, на которую ищут крайнего. + + Take challenging tasks in order to develop your skills and + competencies, even when there is not enough + knowledge/experience (skills will develop much faster + through such tasks). The main thing is to distinguish a + really useful complex task that will help you to boost your + skills from a dumb task that requires a scapegoat. - - + + - - + + - - Быть ответственным за профессиональное развитие. Не ждать - пока тимлид решит, что изучать. Не стоит забывать, что слепое - следование чужому плану заточит под задачи конкретной компании. - Стоит обсуждать и встраивать свои интересы в план. Если этого - не сделать - высокий риск получить "непереносимые" компетенции, - что ударит по карьерным возможностям. Но и не стоит ударятся в - крайности: изучать абсолютно всё подряд или пассивно ждать, пока - выдадут план развития. + + You should be responsible for your professional development. Don't wait + for the team lead to decide for you what to study. Do not forget that blind + adherence to someone else's plan will sharpen your skills according to + requirements of a particular company. It is better to discuss and build in + your interests into the plan. If this is not done, there is a high risk of getting + irrelevant skills, which will hit career opportunities. But don't overdo it: don't + study absolutely everything or don't passively wait until a development plan + will be created for you. - - + + - - + + - - Самоорганизация + + Self-organization - - + + - - + + - - Способность предоставлять тот объем информации, - который необходим для общения с людьми разного - бекграунда. + + The ability to provide the amount of information that is + necessary to communicate to people with different + backgrounds. - - + + - - + + - - Решение конфликтов + + Conflict solving - - + + - - + + - - Достаточно уверенного чтения документации и статей, - но для более перспективных вакансий - разговорный/письменный навык становится обязательным. + + If you read this it means you already understand why it is so + important :) + + Usually, it is required at least to read because you would need to + understand technical documentation. But as you move up the career + ladder, you will need to speak and write more confidently in English. - - + + - - + + - - Искать единомышленников и присоединяться/создавать - комьюнити для общения и передачи опыта. + + Look for like-minded people and join/create a community for + experience exchange. - - + + - - + + - - Чтобы быть конкурентоспособным, стоит изучать и наблюдать - за новыми веяниями, а также уметь адаптироваться под них. + + You should study and observe contemporary trends to be + competitive, as well as being able to adapt to them. - - + + - - + + - - Опытному разработчику стоит развивать навыки управления и - общения с бизнесом для эффективного выполнения задач. - Это легче делать, если развит эмоциональный интеллект. - Для джуниора навык также полезен, чтобы лучше - взаимодействовать с коллегами. + + Experienced developers should develop management skills and business + communication skills to complete tasks efficiently. It is easier to do if you + have developed emotional intelligence. For a junior developer, the skill is + also useful to better interact with colleagues. - + - + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - 1 этап + + 1 step - - + + - - + + - - + + - - Базовые операции + + Basic operations - - + + - - + + - - Арфиметические операции + + Arithmetic operations - - + + - - + + - - Циклы for/while + + Loops: for/while - - + + - - + + - - Логические операции + + Logical operations - - + + - - + + - - Битовые операции + + Bitwise operations - - + + - - + + - - Функции + + Functions - - + + - - + + - - lambda + + lambda - - + + - - + + - - Операторы + + Operators - - + + - - + + - - Типы данных + + Data types - - + + - - + + - - Динамическая типизация + + Dynamic typing - - + + - - + + - - Статическая типизация + + Static typing - + - + - + RTTI - - + + - - + + - - Указатели и ссылки + + Pointers & References - - + + - - + + - - Организация кодовой базы + + Codebase structuring - - + + - - + + - - Ссылки + + References - - + + - - + + - - Модель памяти + + Memory model - - + + - - + + - - Умные указатели + + Smart pointer - - + + - - + + - - Сырые Указатели + + Raw pointers - - + + - - + + - - Разделение кода на headers/cpp юниты + + Code splitting into headers/cpp files - - + + - - + + - - Область видимости + + Scope - - + + - - + + - - Утечки памяти + + Memory leakage - - + + - - + + - - Forward declaration + + Forward declaration - - + + - - + + - - unique_ptr + + unique_ptr - - + + - - + + - - shared_ptr + + shared_ptr - - + + - - + + - - Время жизни + + Lifetime of objects - - + + - - + + - - Операторы new/delete + + new/delete operators - - + + - - + + - - weak_ptr + + weak_ptr - - + + - - + + - - Пространство имён + + Namespaces - - + + - - + + - - Перегрузка стандартных операторов для - различных типов/структур/классов. + + The overloading of regular set of operators for + regular or custom types (structures/classes). - - + + - - + + - - Чтобы избежать проблем с управлением памятью, - старайтесь писать код используя ссылки и умные - указатели. + + To prevent memory leakage problems it is better + to use smart pointers rather than raw pointers. - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - 2 этап + + 2 step - - + + - - + + - - + + - - Структуры и классы + + Structures and classes - - + + - - + + - - Обработка ошибок + + Exception handling - - + + - - + + - - Перегрузка методов + + Overloading of functions - - + + - - + + - - Таблица вирутальных методов + + Virtual table (vtbl) - - + + - - + + - - ООП + + Object Oriented programming (OOP) - - + + - - + + - - Исключения + + Exceptions - - + + - - + + - - Access violation + + Access violation - - + + - - + + - - Динамический полиморфизм + + Dynamic polymorphism - - + + - - + + - - Виртуальные методы + + Virtual methods - - + + - - + + - - Правило нуля/трех/пяти + + The rule of zero/three/five - - + + - - + + - - Статический полиморфизм + + Static polymorphism - - + + - - + + - - Множественное наследование + + Multiple inheritance - - + + - - + + - - Ромбовидное наследование + + Diamond inheritance - - + + - - + + - - Коды возврата + + Error codes - - + + - - + + - - Не используйте - множественное наследование + + It's preferred to avoid multiple inheritance + (excepting abstract classes) to prevent + runtime issues - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - 3 этап + + 3 step - - + + - - + + - - + + - - auto (автоматическое выведение типов) + + auto (automatic type deduction) - - + + - - + + - - Концепции языка + + Language concepts - - + + - - + + - - type casting + + type casting - - + + - - + + - - static_cast + + static_cast - - + + - - + + - - const_cast + + const_cast - - + + - - + + - - dynamic_cast + + dynamic_cast - - + + - - + + - - reinterpret_cast + + reinterpret_cast - - + + - - + + - - Неопределённое поведение (Undefined Behavior) + + Undefined Behavior (UB) - - + + - - + + - - Поиск, зависящий от аргумента (ADL) + + Argument-dependent lookup (ADL) - - + + - - + + - - Макросы + + Macros - - + + - - + + - - Name mangling + + Name mangling - - + + - - + + - - Стандартная библиотека + + Standard library - - + + - - + + - - Поток ввода/вывода + + iostream - - + + - - + + - - Алгоритмы стандартной библиотеки + + Algorithms - - + + - - + + - - Итераторы + + Iterators - - + + - - + + - - Контейнеры + + Containers - - + + - - + + - - Дата/время + + Date/time - - + + - - + + - - Многопоточность + + Multithreading - - + + - - + + - - Языковые конструкции для которых отсутствуют прописанные - требования в стандартах. В случае ошибки дальнейшее - поведение будет предсказать невозможно, и всецело будет - зависеть от контекста выполнения или платформы, где запущено - приложение. + + Some of language constructions have non-declared behavior according to + the ISO standard. In case of any error, it's not possible to predict further + behavior. It depends on a platform environment, runtime context, etc. - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - 4 этап + + 4 step - - + + - - + + - - + + - - Шаблоны + + Templates - - + + - - + + - - Variadic templates + + Variadic templates - - + + - - + + - - Специализация шаблона + + The template specialization - - + + - - + + - - type traits + + type traits - - + + - - + + - - SFINAE + + SFINAE - - + + - - + + - - Полная специализация + + The full template specialization - - + + - - + + - - Частичная специализация + + The partial template specialization - + - + - + RAII - + - + - + pimpl - - + + - - + + - - Erase-Remove + + Erase-Remove - - + + - - + + - - Non-Copyable/Non-Moveable + + Non-Copyable/Non-Moveable - - + + - - + + - - Copy and swap + + Copy and swap - - + + - - + + - - Copy on write + + Copy on write - - + + - - + + - - CRTP + + CRTP - - + + - - + + - - Стандарты + + Standards - - + + - - + + - - C++11/14 + + C++11/14 - + - + - + C++17 - - + + - - + + - - C++20 + + C++20 - - + + - - + + - - newest + + newest - - + + - - + + - - C++0x + + C++0x - - + + - - + + - - Идиомы + + Idioms - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - 1 этап + + 1 step - - + + - - + + - - + + - - Работа с исходным кодом + + Working with source code - - + + - - + + - - Текстовый редактор + + Text editors - - + + - - + + - - IDE + + IDE - - + + - - + + - - Редакторы исходного кода + + Code editors - - + + - - + + - - Отладчик + + Debugger - - + + - - + + - - Линтеры + + Linters - - + + - - + + - - Знание о базовых возможностях (shortcuts, tools, plugins) + + Knowledge of features and abilities (shortcuts, tools, plugins) - - + + - - + + - - Умение читать сообщения отладчика + + Understanding of debugger messages - - + + - - + + - - Отладочные символы + + Debugging symbols - - + + - - + + - - WinDbg + + WinDbg - - + + - - + + - - GDB + + GDB - - + + - - + + - - Выберите один из понравившихся популярных IDE - и хорошо освойте его: Eclipse, MS Visual Studio, - Qt Creator, JetBrains Clion, XCode и т.д. + + Choose one of the popular IDEs and study it well: + Eclipse, MS Visual Studio, Qt Creator, JetBrains Clion, + XCode, etc. - - + + - - + + - - Научитесь пользоваться отладчиком. Изучите его - возможности. + + Study how to use a debugger and all its features - - + + - - + + - - Выберите один из популярных редакторов и хорошо - освойте его. К примеру: Notepad++, Atom, и т.д. + + Choose one of the popular editors and study it well. + For example: Notepad++, Atom, etc. - - + + - - + + - - Навык работы с отладчиком в через командную строку - - узконаправленный навык. В регулярной работе достаточно - уметь работать с отладчиком в рамках IDE. + + The ability to work with a debugger via command line is a not + common skill. It's sufficient to work with it via IDE. For example: + set conditional breakpoints, etc. - - + + - - + + - - Ознакомьтесь с самыми распространёнными ошибками - (segfault, out of memory, access violation) и концепцией  - неопределённого поведения (undefined behavior) + + Learn about common errors (segfault, out of memory, + access violation) and undefined behavior concept. - - + + - - + + - - Выберите один из популярных редакторов и и хорошо - освойте его: Visual Code, Atom, Sublime Text и т.д. + + Choose one of the popular editors and study it well. For + example: Visual Code, Atom, Sublime Text, etc. - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - 3 этап + + 3 step - - + + - - + + - - + + - - Компиляторы + + Compilers - - + + - - + + - - Базовые знания работы компиляторов + + Basic understanding of compilers stages - - + + - - + + - - Компиляция кода в объектные файлы + + Compilation of sources to object files (compilation) - - + + - - + + - - Компоновка объектных файлов в приложение (линковка) + + The object files linkage (linking) - - + + - - + + - - Этапы работы компилятора + + Working stages of compilers - - + + - - + + - - Компиляторы от различных производителей + + Manufacturer-dependent compilers - - + + - - + + - - У компиляторов есть свои особенности, о которых - хорошо бы знать: Clang++/LLVM, Intel C++, MSVS C++, - GCC, MinGW + + Each compiler has its nuances. It's + good to know about them to prevent getting any trap:  + Clang++/LLVM, Intel C++, MSVS C++, GCC, MinGW - - + + - - + + - - Есть несколько этапов работы компилятора, которые - хорошо бы знать. Это помогает ошибки решать - проблемы сборки на разных этапах. Достаточно базово - понимать, что происходит. Детали работы нужны - разработчикам компиляторов + + The compiler performs several stages of code compilation. + It's good to know about all of them to better understand + compilation issues. Deep knowledge is needed for compiler + creators only. - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - 5 этап + + 5 step - - + + - - + + - - + + - - Системы сборки + + Build systems - - + + - - + + - - CMake + + CMake - - + + - - + + - - Makefile + + Makefile - + - + - + ninja - - + + - - + + - - Пакетные менеджеры + + Package managers - - + + - - + + - - vcpkg + + vcpkg - - + + - - + + - - spack + + spack - - + + - - + + - - Conan + + Conan - - + + - - + + - - nuget + + nuget - - + + - - + + - - Библиотеки + + Libraries - + - + - + boost - - + + - - + + - - opencv + + opencv - + - + - + poco - - + + - - + + - - Подключение библиотек + + Libraries inclusion - - + + - - + + - - protobuf + + protobuf - - + + - - + + - - gRPC + + gRPC - + - + - + fmt - - + + - - + + - - pybindll + + pybindll - - + + - - + + - - spdlog + + spdlog - - + + - - + + - - ranges_v3 + + ranges_v3 - - + + - - + + - - tensorflow + + tensorflow - - + + - - + + - - opencl + + opencl - - + + - - + + - - Фреймворки + + Frameworks - - + + - - + + - - gtest/gmock + + gtest/gmock - + - + - + Qt - - + + - - + + - - catch2 + + catch2 - - + + - - + + - - google profiler + + google profiler - - + + - - + + - - pytorch c++ + + pytorch c++ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - 1 этап + + 1 step - - + + - - + + - - + + - - Информатика + + Computers Science - - + + - - + + - - Структуры данных + + Data structures - - + + - - + + - - Алгоритмы + + Algorithms - - + + - - + + - - Булева алгебра + + Boolean algebra - - + + - - + + - - Конечные автоматы + + Finite-state machines - - + + - - + + - - Также необходимо понимать, как вычислить сложность - и потребление памяти у алгоритмов. + + It's also good to know how to calculate algorithm complexity + and memory consumption. - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - 4 этап + + 4 step - - + + - - + + - - + + - - Системы контроля версий + + Version control software - - + + - - + + - - Распределенные + + Distributed - - + + - - + + - - Централизованные + + Centralized - - + + - - + + - - SVN + + SVN - - + + - - + + - - git + + git - - + + - - + + - - Mercurial + + Mercurial - - + + - - + + - - Практики разработки + + Best practices - - + + - - + + - - Качество кода + + Code quality - - + + - - + + - - Правила оформления кода + + Code guidelines - - + + - - + + - - Принципы разработки + + Principles of development - - + + - - + + - - KISS (Keep It Simple, Stupid) + + KISS (Keep It Simple, Stupid) - - + + - - + + - - DRY (Don't Repeat Yourself) + + DRY (Don't Repeat Yourself) - - + + - - + + - - YAGNI (You Aren't Gonna Need It) + + YAGNI (You Aren't Gonna Need It) - - + + - - + + - - APO (Avoid Premature Optimization) + + APO (Avoid Premature Optimization) - - + + - - + + - - BDUF (Big Design Up Front) + + BDUF (Big Design Up Front) - - + + - - + + - - Композиция предпочтительнее наследования + + Composition is preferably than the inheritance - - + + - - + + - - Бритва Оккама + + Occam's razor - - + + - - + + - - Разделяй и властвуй + + Divide and Conquer - - + + - - + + - - Логирование и телеметрия + + Logging and telemetry - - + + - - + + - - Ревью кода + + Code review - - + + - - + + - - Умение читать чужой код + + Skill to read existing code sources - - + + - - + + - - Ревью чужого кода + + Skill to review code - - + + - - + + - - Понимание жизненного цикла производства ПО + + Lifecycle stages of a software - - + + - - + + - - Реализация + + Implementation - - + + - - + + - - Тестирование + + Testing - - + + - - + + - - Поддержка + + Maintanance - - + + - - + + - - Версионирование ПО + + Versioning - - + + - - + + - - Юнит тесты + + Unit tests - - + + - - + + - - Интеграционное + + Integration tests - - + + - - + + - - Функциональное + + Functional tests - - + + - - + + - - Производительность + + Performance tests - - + + - - + + - - Формирование архитектуры и дизайн компонентов + + Software architecture and components design - - + + - - + + - - Интеграция компонентов + + Components integration - - + + - - + + - - Выпуск + + Deployment - - + + - - + + - - Сбор требований + + Collecting requirements - - + + - - + + - - Окончание жизненного цикла + + End of a software lifecycle - - + + - - + + - - Анализаторы кода + + Code analyzers - - + + - - + + - - Статические + + Static analyzers - - + + - - + + - - Динамические + + Dynamic analyzers - - + + - - + + - - Профайлеры + + Profilers - - + + - - + + - - C++ core guidelines + + C++ core guidelines - - + + - - + + - - Промышленные стандарты + + Industrial standards - - + + - - + + - - MISRA + + MISRA - - + + - - + + - - Autosar + + Autosar - - + + - - + + - - Работа с командной строкой + + Command line - + - + - + batch - - + + - - + + - - Powershell + + Powershell - - + + - - + + - - bash + + bash - + - + - + CI/CD - - + + - - + + - - Trunk Based Development + + Trunk Based Development - - + + - - + + - - Zero downtime deployment + + Zero downtime deployment - - + + - - + + - - Создание пакета поставки ПО + + Creation of a software deployment package - - + + - - + + - - Документация + + Documentation - - + + - - + + - - Инсталлятор + + Installer package - - + + - - + + - - Использование других языков программирования + + Usage of other programming languages - - + + - - + + - - Межязыковое взаимодействие + + Language interoperability - - + + - - + + - - Правила именования переменных, пробелы vs табы, - положение фигурных скобок и т.д. + + Naming conventions, tabs vs spaces, etc. - - + + - - + + - - Настроить форматирование и автоматически проверять - в одной из утилит: clang-format, Resharper - стиль кода, - MSVS - стиль кода. + + To configure automated code formatting verification with one of + the suitable utilities: clang-format, Resharper - code style, + MSVS - code style. - - + + - - + + - - - Скриптовые - - Функциональные - - SQL like - - NoSQL - - Брагилевский :) + + - Scripting + - Functional + - SQL like + - NoSQL - - + + - - + + - - Иногда требуется предоставить обертку к библиотеке, написанной - на C++ для другого ЯП, например Python или C#. Для этого - применяют специальные библиотеки/фреймворки. + + Sometimes it's needed to provide an ability to reuse a library written in + a different language from another one. For example: to call C++ + libraries in C#. - - + + - - + + - - Обратная совместимость + + Backward compatibility - - + + - - + + - - Проектирование ПО + + Software design - - + + - - + + - - Архитектурные стили + + Architecture styles - - + + - - + + - - Component-based + + Component-based - - + + - - + + - - Monolithic application + + Monolithic application - - + + - - + + - - Layered + + Layered - - + + - - + + - - Client-server + + Client-server - - + + - - + + - - Microservices architecture + + Microservices architecture - - + + - - + + - - Event-driven + + Event-driven - - + + - - + + - - Plug-ins + + Plug-ins - - + + - - + + - - REST + + REST - - + + - - + + - - Service-oriented architecture + + Service-oriented architecture - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - 2 этап + + 2 step - - + + - - + + - - + + - - Паттерны проектирования (GoF) + + Design Patters (GoF) - - + + - - + + - - Поведенческие + + Behavioral - - + + - - + + - - Структурные + + Structural - - + + - - + + - - Порождающие + + Creational - - + + - - + + - - ООП + + OOP - + - + - + SOLID - - + + - - + + - - UML + + UML - - + + - - + + - - Архитектурные паттерны + + Architecture patterns - - + + - - + + - - MVC + + MVC - - + + - - + + - - MVVM + + MVVM - - + + - - + + - - Three-tier + + Three-tier - - + + - - + + - - Onion + + Onion - - + + - - + + - - Hexagon + + Hexagon - - + + - - + + - - Методологии + + Methodologies of development - - + + - - + + - - Test Driven Development + + Test Driven Development - - + + - - + + - - Behavior Driven Development + + Behavior Driven Development - - + + - - + + - - Domain Driven Design + + Domain Driven Design - - + + - - + + - - Память + + Memory - - + + - - + + - - Абстракции памяти + + Memory abstractions - - + + - - + + - - Выравнивание памяти + + Memory alignment - - + + - - + + - - Управление памятью + + Memory management - - + + - - + + - - Бинарные единицы + + Binary units - - + + - - + + - - Исполняемый файл + + Executable file - - + + - - + + - - Статическая библиотека + + Static library - - + + - - + + - - Динамическая библиотека + + Dynamic library - - + + - - + + - - Стек + + Stack - - + + - - + + - - Глобальная память + + Global memory - - + + - - + + - - Куча + + Heap - - + + - - + + - - Память приложения + + Application memory - - + + - - + + - - Виртуальная память + + Virtual memory - - + + - - + + - - Операционные системы + + Operating systems - - + + - - + + - - Многопоточность + + Multithreading - - + + - - + + - - Ошибки + + Errors - - + + - - + + - - Dead lock + + Dead lock - - + + - - + + - - Race condition + + Race condition - - + + - - + + - - Live lock + + Live lock - - + + - - + + - - Starvation + + Starvation - - + + - - + + - - Потоки + + Threads - - + + - - + + - - Конкуренция + + Concurrency - - + + - - + + - - Мьютексы + + Mutexes - - + + - - + + - - Семафоры + + Semaphores - - + + - - + + - - Алгоритмы без блокировок (lock-free) + + lock-free - - + + - - + + - - Обработка событий + + Event handling - - + + - - + + - - Синхронные + + Sync - - + + - - + + - - Асинхронные + + Async - - + + - - + + - - Процессы + + Process - - + + - - + + - - Межпроцессное взаимодействие + + Interprocess communication - - + + - - + + - - Shared memory + + Shared memory - - + + - - + + - - Pipes + + Pipes - - + + - - + + - - Сериализация + + Serialization - - + + - - + + - - json + + json - - + + - - + + - - XML + + XML - - + + - - + + - - Сетевой стек + + Network - + - + - + TCP/IP - + - + - + OSI - - + + - - + + - - Сокеты + + Sockets - + - + - + HTTP - + - + - + TCP - + - + - + UDP - - + + - - + + - - Файловая система + + File system - - + + - - + + - - Планировщик + + Task scheduler - - + + - - + + - - Виртуализация + + Virtualization - - + + - - + + - - VirtualBox + + VirtualBox - - + + - - + + - - VMware Workstation + + VMware Workstation - - + + - - + + - - Контейнеризация + + Containers - - + + - - + + - - Hyper-V + + Hyper-V - - + + - - + + - - Docker + + Docker - - + + - - + + - - Облачные сервисы + + Cloud Services - - + + - - + + - - Kubernetes + + Kubernetes - - + + - - + + - - Безопасность + + Security - - + + - - + + - - Шифрование + + Encryption - - + + - - + + - - Многопроцессорные системы + + MultiCPU systems - - + + - - + + - - Multicore CPU + + Multicore CPU - - + + - - + + - - NUMA + + NUMA - - + + - - + + - - Ввод и вывод информации + + Input/output - - + + - - + + - - Драйверы + + Drivers - - + + - - + + - - Аудио + + Audio - - + + - - + + - - Графическое вычисление/отображение + + Graphics - - + + - - + + - - Печать + + Printers (printing) - - + + - - + + - - DirectSound + + DirectSound - - + + - - + + - - OpenAL + + OpenAL - - + + - - + + - - DirectX + + DirectX - - + + - - + + - - Vulkan + + Vulkan - - + + - - + + - - OpenGL + + OpenGL - - + + - - + + - - CUDA + + CUDA - - + + - - + + - - Общие навыки + + Common skills - - + + - - + + - - Языковые инструменты + + Language tools - - + + - - + + - - Синтаксис языка + + Language syntax - - + + - - + + - - C++ Developer Roadmap + + C++ Developer Roadmap - - + + - - + + - - О карте: + + About: - - + + - - + + - - С++ всё ещё является одним из самых популярных языков разработки. Есть немало желающих начать его изучать - и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке - мне изучать? Какие книги стоить почитать?" Мы попытались ответить на эти вопросы в представленной дорожной - карте. Карта акцентируется на общих компетенциях и навыках, которые встречаются в большинстве проектов. Она - призвана помочь тем, кто только начинает свое обучение или имеет небольшой опыт. Изучив набор перечисленных - материалов, вы сможете составить более продуктивный план обучения, не отвлекаясь на побочную информацию. - Это поможет вам освоить C++ на том уровне, который встречается во многих коммерческих проектах. + + C ++ is still one of the most popular development languages. There is quite a number of people that want to start learning it + and become a C++ developer. They face questions like: "Where should I start? What and in what order should I study? What + books should I read?" + + We tried to answer these questions in the presented roadmap. The map focuses on general competencies and skills that + could be found in most projects. It is designed to help those who are just starting their education or have little experience. + You can create a more productive learning plan without being distracted by side information if you study the set of listed + materials. It will help you to master C++ at the level that is used in many commercial projects. - - + + - - + + - - Как ориентироваться: + + How to use: - - + + - - + + - - Если у вас есть замечания, вопросы или предложения, будем - рады получить любую помощь и поддержку. Мы открыты для - общения :) - - Для этого используйте следующие механизмы Github: - - Предложения/правки по репозиторию - создавайте и - присылайте новый PR в Pull Requests + + If you have any feedback or remarks don't hesitate to contact us. + We really appreciate it. :) + + To contact us choose one of the following Github approaches: + - For any remarks related to repository content - go to Pull + Requests and submit a new one - - + + - - + + - - Предложения и замечания: + + Feedback: - + - + - + Optional - + - + - + Junior - + - + - + Middle - + - + - + Senior - - + + - - + + - - Мидл способен создать - дизайн и решения для - функционала внутри - компонента/приложения - даже в случае неполноты - требований. + + The middle developer has the + skills to create a design for + new functionality as a part of + a component/application if + even there're not enough + requirements or information + presented. - - + + - - + + - - Синиор способен создать - дизайн и решение для - компонента/приложения с - учётом бизнес-контекста. + + The senior developer has the + skills to create a design and + make decisions for a + solution/component taking + into account business area + context. - - + + - - + + - - Джуниору важно научиться - писать структурированный - код и не усложнять его без - надобности. Код должен - быть легко читаемым и - поддерживаемым. + + The junior must acquire the + following skill as soon as + possible: to write + easy-readable and + well-structured code. - - + + - - + + - - От джуниора ожидается - осведомленность про - категории, которые - относятся к Middle/Senior. - Будет достаточным - поверхностное понимание - темы. + + The juniors should be aware + of middle/senior skills. It's + enough to have a basic + understanding of them. - - + + - - + + - - На карте представлены - компетенции, которые - выделены в "этапы". Мы - считаем, что джуниору - стоит начинать изучение - в данном порядке, чтобы - выстроить прочный - фундамент. + + The "steps" are presented on + this map. They're intended to + show an easy for newbies to + be able to get confident base + knowledge about the language + at the beginning. - - + + - - + + - - Репозиторий: + + Repository: - - + + - - + + - - https://github.com/salmer/CppDeveloperRoadmap + + https://github.com/salmer/CppDeveloperRoadmap - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +