From a4f7ef12f3dc15d8fdd2b907429959b40aa94716 Mon Sep 17 00:00:00 2001 From: Evgeny Salmer Date: Fri, 3 Dec 2021 10:22:55 +0300 Subject: [PATCH] Fixed "compilers" leaf for the roadmap --- English/Graph/roadmap.graphml | 8 +- English/Graph/roadmap.svg | 6594 +++++++++++++++++---------------- Russian/Graph/roadmap.graphml | 22 +- Russian/Graph/roadmap.svg | 3272 ++++++++-------- 4 files changed, 4952 insertions(+), 4944 deletions(-) diff --git a/English/Graph/roadmap.graphml b/English/Graph/roadmap.graphml index 2a71846..53a87c0 100644 --- a/English/Graph/roadmap.graphml +++ b/English/Graph/roadmap.graphml @@ -2282,10 +2282,10 @@ example: Visual Code, Atom, Sublime Text, etc. - + - Platform dependent compilers + Manufacturer-dependent compilers @@ -2296,7 +2296,7 @@ example: Visual Code, Atom, Sublime Text, etc. - Each platform-dependent compiler has its nuances. It's + 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 @@ -6142,7 +6142,7 @@ at the beginning. - + diff --git a/English/Graph/roadmap.svg b/English/Graph/roadmap.svg index bf3f9cc..0f1e444 100644 --- a/English/Graph/roadmap.svg +++ b/English/Graph/roadmap.svg @@ -1,25 +1,25 @@ - + - + - + - - + + - - + + - + C++ developer @@ -27,11 +27,11 @@ - + - + Soft skills @@ -39,7371 +39,7379 @@ - + - + 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 + + Рефлексия - - + + - - + + - - 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. + + Cпокойно реагировать на то, что люди говорят. + Скорее всего, они учитывают только собственный + контекст, когда что-то пытаются доказать. Это + нормально. Оценивайте полезность их точки зрения. - - + + - - + + - - 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 step + + 1 этап - - + + - - + + - - + + - - Basic operations + + Базовые операции - - + + - - + + - - Arithmetic operations + + Арфиметические операции - - + + - - + + - - Loops: for/while + + Циклы 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 + + Сырые Указатели - - + + - - + + - - Code splitting into headers/cpp files + + Разделение кода на headers/cpp юниты - - + + - - + + - - Scope + + Область видимости - - + + - - + + - - Memory leakage + + Утечки памяти - - + + - - + + - - Forward declaration + + Forward declaration - - + + - - + + - - unique_ptr + + unique_ptr - - + + - - + + - - shared_ptr + + shared_ptr - - + + - - + + - - Lifetime of objects + + Время жизни - - + + - - + + - - new/delete operators + + Операторы new/delete - - + + - - + + - - 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 step + + 2 этап - - + + - - + + - - + + - - 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 step + + 3 этап - - + + - - + + - - + + - - auto (automatic type deduction) + + auto (автоматическое выведение типов) - - + + - - + + - - Language concepts + + Концепции языка - - + + - - + + - - type casting + + type casting - - + + - - + + - - static_cast + + static_cast - - + + - - + + - - const_cast + + const_cast - - + + - - + + - - dynamic_cast + + dynamic_cast - - + + - - + + - - reinterpret_cast + + reinterpret_cast - - + + - - + + - - Undefined Behavior (UB) + + Неопределённое поведение (Undefined Behavior) - - + + - - + + - - Argument-dependent lookup (ADL) + + Поиск, зависящий от аргумента (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 step + + 4 этап - - + + - - + + - - + + - - 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 step + + 1 этап - - + + - - + + - - + + - - Working with source code + + Работа с исходным кодом - - + + - - + + - - Text editors + + Текстовый редактор - - + + - - + + - - IDE + + IDE - - + + - - + + - - Code editors + + Редакторы исходного кода - - + + - - + + - - Debugger + + Отладчик - - + + - - + + - - Linters + + Линтеры - - + + - - + + - - Knowledge of features and abilities (shortcuts, tools, plugins) + + Знание о базовых возможностях (shortcuts, tools, plugins) - - + + - - + + - - Understanding of debugger messages + + Умение читать сообщения отладчика - - + + - - + + - - Debugging symbols + + Отладочные символы - - + + - - + + - - WinDbg + + WinDbg - - + + - - + + - - GDB + + GDB - - + + - - + + - - Choose one of the popular IDEs and study it well: - Eclipse, MS Visual Studio, Qt Creator, JetBrains Clion, - XCode, etc. + + Выберите один из понравившихся популярных IDE + и хорошо освойте его: Eclipse, MS Visual Studio, + Qt Creator, JetBrains Clion, XCode и т.д. - - + + - - + + - - Study how to use a debugger and all its features + + Научитесь пользоваться отладчиком. Изучите его + возможности. - - + + - - + + - - Choose one of the popular editors and study it well. - For example: Notepad++, Atom, etc. + + Выберите один из популярных редакторов и хорошо + освойте его. К примеру: Notepad++, Atom, и т.д. - - + + - - + + - - 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. + + Навык работы с отладчиком в через командную строку - + узконаправленный навык. В регулярной работе достаточно + уметь работать с отладчиком в рамках IDE. - - + + - - + + - - Learn about common errors (segfault, out of memory, - access violation) and undefined behavior concept. + + Ознакомьтесь с самыми распространёнными ошибками + (segfault, out of memory, access violation) и концепцией  + неопределённого поведения (undefined behavior) - - + + - - + + - - Choose one of the popular editors and study it well. For - example: Visual Code, Atom, Sublime Text, etc. + + Выберите один из популярных редакторов и и хорошо + освойте его: Visual Code, Atom, Sublime Text и т.д. - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - 3 step + + 3 этап - - + + - - + + - - + + - - Compilers + + Компиляторы - - + + - - + + - - Basic understanding of compilers stages + + Базовые знания работы компиляторов - - + + - - + + - - Compilation of sources to object files (compilation) + + Компиляция кода в объектные файлы - - + + - - + + - - The object files linkage (linking) + + Компоновка объектных файлов в приложение (линковка) - - + + - - + + - - Working stages of compilers + + Этапы работы компилятора - - + + - - + + - - Platform dependent compilers + + Компиляторы от различных производителей - - + + - - + + - - Each platform-dependent compiler has its nuances. It's - good to know about them to prevent getting any trap:  - Clang++/LLVM, Intel C++, MSVS C++, GCC, MinGW + + У компиляторов есть свои особенности, о которых + хорошо бы знать: 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 step + + 5 этап - - + + - - + + - - + + - - 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 step + + 1 этап - - + + - - + + - - + + - - 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 step + + 4 этап - - + + - - + + - - + + - - 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 + + Межязыковое взаимодействие - - + + - - + + - - Naming conventions, tabs vs spaces, etc. + + Правила именования переменных, пробелы vs табы, + положение фигурных скобок и т.д. - - + + - - + + - - To configure automated code formatting verification with one of - the suitable utilities: clang-format, Resharper - code style, - MSVS - code style. + + Настроить форматирование и автоматически проверять + в одной из утилит: clang-format, Resharper - стиль кода, + MSVS - стиль кода. - - + + - - + + - - - Scripting - - Functional - - SQL like - - NoSQL + + - Скриптовые + - Функциональные + - SQL like + - NoSQL + - Брагилевский :) - - + + - - + + - - 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#. + + Иногда требуется предоставить обертку к библиотеке, написанной + на C++ для другого ЯП, например Python или 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 step + + 2 этап - - + + - - + + - - + + - - Design Patters (GoF) + + Паттерны проектирования (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 ++ 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. + + С++ всё ещё является одним из самых популярных языков разработки. Есть немало желающих начать его изучать + и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке + мне изучать? Какие книги стоить почитать?" Мы попытались ответить на эти вопросы в представленной дорожной + карте. Карта акцентируется на общих компетенциях и навыках, которые встречаются в большинстве проектов. Она + призвана помочь тем, кто только начинает свое обучение или имеет небольшой опыт. Изучив набор перечисленных + материалов, вы сможете составить более продуктивный план обучения, не отвлекаясь на побочную информацию. + Это поможет вам освоить C++ на том уровне, который встречается во многих коммерческих проектах. - - + + - - + + - - How to use: + + Как ориентироваться: - - + + - - + + - - 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 + + Если у вас есть замечания, вопросы или предложения, будем + рады получить любую помощь и поддержку. Мы открыты для + общения :) + + Для этого используйте следующие механизмы Github: + - Предложения/правки по репозиторию - создавайте и + присылайте новый PR в Pull Requests - - + + - - + + - - 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. + + Джуниору важно научиться + писать структурированный + код и не усложнять его без + надобности. Код должен + быть легко читаемым и + поддерживаемым. - - + + - - + + - - The juniors should be aware - of middle/senior skills. It's - enough to have a basic - understanding of them. + + От джуниора ожидается + осведомленность про + категории, которые + относятся к Middle/Senior. + Будет достаточным + поверхностное понимание + темы. - - + + - - + + - - 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 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/Russian/Graph/roadmap.graphml b/Russian/Graph/roadmap.graphml index 6c6cca9..5c3a74a 100644 --- a/Russian/Graph/roadmap.graphml +++ b/Russian/Graph/roadmap.graphml @@ -825,7 +825,7 @@ - Способность предоставлять тот объем информации, + Способность предоставлять тот объем информации, который необходим для общения с людьми разного бекграунда. @@ -1834,7 +1834,7 @@ - Erase-Remove + Erase-Remove @@ -1845,7 +1845,7 @@ - Non-Copyable/Non-Moveable + Non-Copyable/Non-Moveable @@ -1856,7 +1856,7 @@ - Copy and swap + Copy and swap @@ -1867,7 +1867,7 @@ - Copy on write + Copy on write @@ -2284,10 +2284,10 @@ Qt Creator, JetBrains Clion, XCode и т.д. - + - Платформозависимые компиляторы + Компиляторы от различных производителей @@ -2308,7 +2308,7 @@ GCC, MinGW - + Есть несколько этапов работы компилятора, которые @@ -3870,7 +3870,7 @@ MSVS - стиль кода. - Исполняемый файл + Исполняемый файл @@ -4475,7 +4475,7 @@ MSVS - стиль кода. - Графическое вычисление/отображение + Графическое вычисление/отображение @@ -6150,7 +6150,7 @@ MSVS - стиль кода. - + diff --git a/Russian/Graph/roadmap.svg b/Russian/Graph/roadmap.svg index 4c66463..0f1e444 100644 --- a/Russian/Graph/roadmap.svg +++ b/Russian/Graph/roadmap.svg @@ -1,25 +1,25 @@ - + - + - + - - + + - + - + C++ developer @@ -27,11 +27,11 @@ - + - + Soft skills @@ -39,25 +39,25 @@ - + - + Hard skills - + - + - + Сначала может показаться, что некоторые из навыков развивать невозможно. Однако мы считаем иначе. Над каждым из пунктов возможно работать. Всё @@ -67,807 +67,807 @@ - + - + - + Умение учиться - + - + - + Работа с ошибками - + - + - + Мышление - + - + - + Ответственность - + - + - + Управление ресурсами - + - + - + Коммуникация - + - + - + Командная работа - + - + - + Эмоциональный интелект - + - + - + Понимание контекста разработки - + - + - + Клиентоориентированность - + - + - + Технологии - + - + - + Тренды - + - + - + Эмпатия - + - + - + Концентрация - + - + - + Открытость новому - + - + - + Адаптируемость - + - + - + Стрессоустойчивость - + - + - + Работа в неопределённости - + - + - + Понимание распределения ролей в команде - + - + - + Помощь - + - + - + Работа в распределённой команде - + - + - + Предоставление обратной связи - + - + - + Лидерство - + - + - + Наставничество - + - + - + Делегирование - + - + - + Постановка задач сотрудникам - + - + - + Планирование и целеполагание - + - + - + Переговорческие навыки - + - + - + Английский язык - + - + - + Презентация - + - + - + Навык переписки - + - + - + Нетворкинг - + - + - + Умение слушать - + - + - + Убеждение - + - + - + Умение доносить мысль/идеи внутри команды - + - + - + Поиск компромиссов - + - + - + Регулирование споров - + - + - + Подача информации людям вне команды - + - + - + Тайм-менеджмент - + - + - + Приоритезация - + - + - + Принятие решений - + - + - + Слепая печать - + - + - + Многозадачность - + - + - + Дисциплина - + - + - + Упорство - + - + - + Инициативность - + - + - + Самостоятельность - + - + - + Решение проблем - + - + - + Логическое - + - + - + Критическое - + - + - + Креативное - + - + - + Стратегическое - + - + - + Системное - + - + - + Восприятие критики - + - + - + Своевременное сигнализирование об ошибках - + - + - + Признание своих ошибок - + - + - + Анализ ошибок - + - + - + Умение задавать правильные вопросы - + - + - + Экспериментирование - + - + - + Управление знаниями - + - + - + Работа с информацией - + - + - + Умение собирать информацию, анализировать её и выдавать взвешенное  решение. @@ -875,27 +875,27 @@ - + - + - + Рефлексия - + - + - + Cпокойно реагировать на то, что люди говорят. Скорее всего, они учитывают только собственный контекст, когда что-то пытаются доказать. Это @@ -904,14 +904,14 @@ - + - + - + Брать сложные задачи, чтобы развивать свои навыки и компетенции, даже когда недостаточно знаний/опыта (через такие задачи гораздо быстрее @@ -922,14 +922,14 @@ - + - + - + Быть ответственным за профессиональное развитие. Не ждать пока тимлид решит, что изучать. Не стоит забывать, что слепое следование чужому плану заточит под задачи конкретной компании. @@ -942,27 +942,27 @@ - + - + - + Самоорганизация - + - + - + Способность предоставлять тот объем информации, который необходим для общения с людьми разного бекграунда. @@ -970,27 +970,27 @@ - + - + - + Решение конфликтов - + - + - + Достаточно уверенного чтения документации и статей, но для более перспективных вакансий разговорный/письменный навык становится обязательным. @@ -998,42 +998,42 @@ - + - + - + Искать единомышленников и присоединяться/создавать комьюнити для общения и передачи опыта. - + - + - + Чтобы быть конкурентоспособным, стоит изучать и наблюдать за новыми веяниями, а также уметь адаптироваться под них. - + - + - + Опытному разработчику стоит развивать навыки управления и общения с бизнесом для эффективного выполнения задач. Это легче делать, если развит эмоциональный интеллект. @@ -1043,813 +1043,813 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 1 этап - + - + - + - + Базовые операции - + - + - + Арфиметические операции - + - + - + Циклы for/while - + - + - + Логические операции - + - + - + Битовые операции - + - + - + Функции - + - + - + lambda - + - + - + Операторы - + - + - + Типы данных - + - + - + Динамическая типизация - + - + - + Статическая типизация - + - + - + RTTI - + - + - + Указатели и ссылки - + - + - + Организация кодовой базы - + - + - + Ссылки - + - + - + Модель памяти - + - + - + Умные указатели - + - + - + Сырые Указатели - + - + - + Разделение кода на headers/cpp юниты - + - + - + Область видимости - + - + - + Утечки памяти - + - + - + Forward declaration - + - + - + unique_ptr - + - + - + shared_ptr - + - + - + Время жизни - + - + - + Операторы new/delete - + - + - + weak_ptr - + - + - + Пространство имён - + - + - + Перегрузка стандартных операторов для различных типов/структур/классов. - + - + - + Чтобы избежать проблем с управлением памятью, старайтесь писать код используя ссылки и умные указатели. @@ -1857,682 +1857,682 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 2 этап - + - + - + - + Структуры и классы - + - + - + Обработка ошибок - + - + - + Перегрузка методов - + - + - + Таблица вирутальных методов - + - + - + ООП - + - + - + Исключения - + - + - + Access violation - + - + - + Динамический полиморфизм - + - + - + Виртуальные методы - + - + - + Правило нуля/трех/пяти - + - + - + Статический полиморфизм - + - + - + Множественное наследование - + - + - + Ромбовидное наследование - + - + - + Коды возврата - + - + - + Не используйте множественное наследование - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 3 этап - + - + - + - + auto (автоматическое выведение типов) - + - + - + Концепции языка - + - + - + type casting - + - + - + static_cast - + - + - + const_cast - + - + - + dynamic_cast - + - + - + reinterpret_cast - + - + - + Неопределённое поведение (Undefined Behavior) - + - + - + Поиск, зависящий от аргумента (ADL) - + - + - + Макросы - + - + - + Name mangling - + - + - + Стандартная библиотека - + - + - + Поток ввода/вывода - + - + - + Алгоритмы стандартной библиотеки - + - + - + Итераторы - + - + - + Контейнеры - + - + - + Дата/время - + - + - + Многопоточность - + - + - + Языковые конструкции для которых отсутствуют прописанные требования в стандартах. В случае ошибки дальнейшее поведение будет предсказать невозможно, и всецело будет @@ -2542,642 +2542,642 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 4 этап - + - + - + - + Шаблоны - + - + - + Variadic templates - + - + - + Специализация шаблона - + - + - + type traits - + - + - + SFINAE - + - + - + Полная специализация - + - + - + Частичная специализация - + - + - + RAII - + - + - + pimpl - + - + - + Erase-Remove - + - + - + Non-Copyable/Non-Moveable - + - + - + Copy and swap - + - + - + Copy on write - + - + - + CRTP - + - + - + Стандарты - + - + - + C++11/14 - + - + - + C++17 - + - + - + C++20 - + - + - + newest - + - + - + C++0x - + - + - + Идиомы - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 1 этап - + - + - + - + Работа с исходным кодом - + - + - + Текстовый редактор - + - + - + IDE - + - + - + Редакторы исходного кода - + - + - + Отладчик - + - + - + Линтеры - + - + - + Знание о базовых возможностях (shortcuts, tools, plugins) - + - + - + Умение читать сообщения отладчика - + - + - + Отладочные символы - + - + - + WinDbg - + - + - + GDB - + - + - + Выберите один из понравившихся популярных IDE и хорошо освойте его: Eclipse, MS Visual Studio, Qt Creator, JetBrains Clion, XCode и т.д. @@ -3185,42 +3185,42 @@ - + - + - + Научитесь пользоваться отладчиком. Изучите его возможности. - + - + - + Выберите один из популярных редакторов и хорошо освойте его. К примеру: Notepad++, Atom, и т.д. - + - + - + Навык работы с отладчиком в через командную строку - узконаправленный навык. В регулярной работе достаточно уметь работать с отладчиком в рамках IDE. @@ -3228,14 +3228,14 @@ - + - + - + Ознакомьтесь с самыми распространёнными ошибками (segfault, out of memory, access violation) и концепцией  неопределённого поведения (undefined behavior) @@ -3243,214 +3243,214 @@ - + - + - + Выберите один из популярных редакторов и и хорошо освойте его: Visual Code, Atom, Sublime Text и т.д. - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 3 этап - + - + - + - + Компиляторы - + - + - + Базовые знания работы компиляторов - + - + - + Компиляция кода в объектные файлы - + - + - + Компоновка объектных файлов в приложение (линковка) - + - + - + Этапы работы компилятора - - + + - - + + - - Платформозависимые компиляторы + + Компиляторы от различных производителей - + - + - + У компиляторов есть свои особенности, о которых хорошо бы знать: Clang++/LLVM, Intel C++, MSVS C++, GCC, MinGW @@ -3458,1448 +3458,1448 @@ - - + + - - + + - - Есть несколько этапов работы компилятора, которые - хорошо бы знать. Это помогает ошибки решать - проблемы сборки на разных этапах. Достаточно базово - понимать, что происходит. Детали работы нужны - разработчикам компиляторов + + Есть несколько этапов работы компилятора, которые + хорошо бы знать. Это помогает ошибки решать + проблемы сборки на разных этапах. Достаточно базово + понимать, что происходит. Детали работы нужны + разработчикам компиляторов - + - + - + - + - - + + - - - + + + - - - + + + - + - + - + 5 этап - + - + - + - + Системы сборки - + - + - + CMake - + - + - + Makefile - + - + - + ninja - + - + - + Пакетные менеджеры - + - + - + vcpkg - + - + - + spack - + - + - + Conan - + - + - + nuget - + - + - + Библиотеки - + - + - + boost - + - + - + opencv - + - + - + poco - + - + - + Подключение библиотек - + - + - + protobuf - + - + - + gRPC - + - + - + fmt - + - + - + pybindll - + - + - + spdlog - + - + - + ranges_v3 - + - + - + tensorflow - + - + - + opencl - + - + - + Фреймворки - + - + - + gtest/gmock - + - + - + Qt - + - + - + catch2 - + - + - + google profiler - + - + - + pytorch c++ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 1 этап - + - + - + - + Информатика - + - + - + Структуры данных - + - + - + Алгоритмы - + - + - + Булева алгебра - + - + - + Конечные автоматы - + - + - + Также необходимо понимать, как вычислить сложность и потребление памяти у алгоритмов. - + - + - + - + - + - + - + - + 4 этап - + - + - + - + Системы контроля версий - + - + - + Распределенные - + - + - + Централизованные - + - + - + SVN - + - + - + git - + - + - + Mercurial - + - + - + Практики разработки - + - + - + Качество кода - + - + - + Правила оформления кода - + - + - + Принципы разработки - + - + - + KISS (Keep It Simple, Stupid) - + - + - + DRY (Don't Repeat Yourself) - + - + - + YAGNI (You Aren't Gonna Need It) - + - + - + APO (Avoid Premature Optimization) - + - + - + BDUF (Big Design Up Front) - + - + - + Композиция предпочтительнее наследования - + - + - + Бритва Оккама - + - + - + Разделяй и властвуй - + - + - + Логирование и телеметрия - + - + - + Ревью кода - + - + - + Умение читать чужой код - + - + - + Ревью чужого кода - + - + - + Понимание жизненного цикла производства ПО - + - + - + Реализация - + - + - + Тестирование - + - + - + Поддержка - + - + - + Версионирование ПО - + - + - + Юнит тесты - + - + - + Интеграционное - + - + - + Функциональное - + - + - + Производительность - + - + - + Формирование архитектуры и дизайн компонентов - + - + - + Интеграция компонентов - + - + - + Выпуск - + - + - + Сбор требований - + - + - + Окончание жизненного цикла - + - + - + Анализаторы кода - + - + - + Статические - + - + - + Динамические - + - + - + Профайлеры - + - + - + C++ core guidelines - + - + - + Промышленные стандарты - + - + - + MISRA - + - + - + Autosar - + - + - + Работа с командной строкой - + - + - + batch - + - + - + Powershell - + - + - + bash - + - + - + CI/CD - + - + - + Trunk Based Development - + - + - + Zero downtime deployment - + - + - + Создание пакета поставки ПО - + - + - + Документация - + - + - + Инсталлятор - + - + - + Использование других языков программирования - + - + - + Межязыковое взаимодействие - + - + - + Правила именования переменных, пробелы vs табы, положение фигурных скобок и т.д. - + - + - + Настроить форматирование и автоматически проверять в одной из утилит: clang-format, Resharper - стиль кода, MSVS - стиль кода. @@ -4907,14 +4907,14 @@ - + - + - + - Скриптовые - Функциональные - SQL like @@ -4924,14 +4924,14 @@ - + - + - + Иногда требуется предоставить обертку к библиотеке, написанной на C++ для другого ЯП, например Python или C#. Для этого применяют специальные библиотеки/фреймворки. @@ -4939,1705 +4939,1705 @@ - + - + - + Обратная совместимость - + - + - + Проектирование ПО - + - + - + Архитектурные стили - + - + - + Component-based - + - + - + Monolithic application - + - + - + Layered - + - + - + Client-server - + - + - + Microservices architecture - + - + - + Event-driven - + - + - + Plug-ins - + - + - + REST - + - + - + Service-oriented architecture - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 2 этап - + - + - + - + Паттерны проектирования (GoF) - + - + - + Поведенческие - + - + - + Структурные - + - + - + Порождающие - + - + - + ООП - + - + - + SOLID - + - + - + UML - + - + - + Архитектурные паттерны - + - + - + MVC - + - + - + MVVM - + - + - + Three-tier - + - + - + Onion - + - + - + Hexagon - + - + - + Методологии - + - + - + Test Driven Development - + - + - + Behavior Driven Development - + - + - + Domain Driven Design - + - + - + Память - + - + - + Абстракции памяти - + - + - + Выравнивание памяти - + - + - + Управление памятью - + - + - + Бинарные единицы - + - + - + Исполняемый файл - + - + - + Статическая библиотека - + - + - + Динамическая библиотека - + - + - + Стек - + - + - + Глобальная память - + - + - + Куча - + - + - + Память приложения - + - + - + Виртуальная память - + - + - + Операционные системы - + - + - + Многопоточность - + - + - + Ошибки - + - + - + Dead lock - + - + - + Race condition - + - + - + Live lock - + - + - + Starvation - + - + - + Потоки - + - + - + Конкуренция - + - + - + Мьютексы - + - + - + Семафоры - + - + - + Алгоритмы без блокировок (lock-free) - + - + - + Обработка событий - + - + - + Синхронные - + - + - + Асинхронные - + - + - + Процессы - + - + - + Межпроцессное взаимодействие - + - + - + Shared memory - + - + - + Pipes - + - + - + Сериализация - + - + - + json - + - + - + XML - + - + - + Сетевой стек - + - + - + TCP/IP - + - + - + OSI - + - + - + Сокеты - + - + - + HTTP - + - + - + TCP - + - + - + UDP - + - + - + Файловая система - + - + - + Планировщик - + - + - + Виртуализация - + - + - + VirtualBox - + - + - + VMware Workstation - + - + - + Контейнеризация - + - + - + Hyper-V - + - + - + Docker - + - + - + Облачные сервисы - + - + - + Kubernetes - + - + - + Безопасность - + - + - + Шифрование - + - + - + Многопроцессорные системы - + - + - + Multicore CPU - + - + - + NUMA - + - + - + Ввод и вывод информации - + - + - + Драйверы - + - + - + Аудио - + - + - + Графическое вычисление/отображение - + - + - + Печать - + - + - + DirectSound - + - + - + OpenAL - + - + - + DirectX - + - + - + Vulkan - + - + - + OpenGL - + - + - + CUDA - + - + - + Общие навыки - + - + - + Языковые инструменты - + - + - + Синтаксис языка - + - + - + C++ Developer Roadmap - + - + - + О карте: - + - + - + С++ всё ещё является одним из самых популярных языков разработки. Есть немало желающих начать его изучать и стать C++ разработчиками. Перед такими людьми встают вопросы: "С чего мне начать? Что и в каком порядке мне изучать? Какие книги стоить почитать?" Мы попытались ответить на эти вопросы в представленной дорожной @@ -6649,27 +6649,27 @@ - + - + - + Как ориентироваться: - + - + - + Если у вас есть замечания, вопросы или предложения, будем рады получить любую помощь и поддержку. Мы открыты для общения :) @@ -6681,79 +6681,79 @@ - + - + - + Предложения и замечания: - + - + - + Optional - + - + - + Junior - + - + - + Middle - + - + - + Senior - + - + - + Мидл способен создать дизайн и решения для функционала внутри @@ -6764,14 +6764,14 @@ - + - + - + Синиор способен создать дизайн и решение для компонента/приложения с @@ -6780,14 +6780,14 @@ - + - + - + Джуниору важно научиться писать структурированный код и не усложнять его без @@ -6798,14 +6798,14 @@ - + - + - + От джуниора ожидается осведомленность про категории, которые @@ -6817,14 +6817,14 @@ - + - + - + На карте представлены компетенции, которые выделены в "этапы". Мы @@ -6837,580 +6837,580 @@ - + - + - + Репозиторий: - + - + - + https://github.com/salmer/CppDeveloperRoadmap - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +