diff --git a/English/Graph/roadmap.graphml b/English/Graph/roadmap.graphml index 53a87c0..d0d6750 100644 --- a/English/Graph/roadmap.graphml +++ b/English/Graph/roadmap.graphml @@ -1237,7 +1237,7 @@ also useful to better interact with colleagues. - + The overloading of regular set of operators for @@ -1249,7 +1249,7 @@ regular or custom types (structures/classes). - + To prevent memory leakage problems it is better @@ -1258,6 +1258,18 @@ to use smart pointers rather than raw pointers. + + + + + + + Do not ignore warnings from compiler and static analyzer. +They are your friends, not enemies + + + + @@ -2285,7 +2297,7 @@ example: Visual Code, Atom, Sublime Text, etc. - Manufacturer-dependent compilers + Features of a particular compiler @@ -8691,7 +8703,7 @@ at the beginning. - + @@ -8701,7 +8713,7 @@ at the beginning. - + @@ -8719,9 +8731,7 @@ at the beginning. - - - + @@ -9063,9 +9073,7 @@ at the beginning. - - - + @@ -9617,6 +9625,18 @@ at the beginning. + + + + + + + + + + + + diff --git a/English/Graph/roadmap.svg b/English/Graph/roadmap.svg index 48d95ef..de9eef3 100644 --- a/English/Graph/roadmap.svg +++ b/English/Graph/roadmap.svg @@ -1,25 +1,25 @@ - + - + - + - - + + - + - + C++ developer @@ -27,11 +27,11 @@ - + - + Soft skills @@ -39,25 +39,25 @@ - + - + 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 @@ -67,807 +67,807 @@ - + - + - + 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. @@ -875,27 +875,27 @@ - + - + - + 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 @@ -904,14 +904,14 @@ - + - + - + Take challenging tasks in order to develop your skills and competencies, even when there is not enough knowledge/experience (skills will develop much faster @@ -922,14 +922,14 @@ - + - + - + 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 @@ -942,27 +942,27 @@ - + - + - + Self-organization - + - + - + The ability to provide the amount of information that is necessary to communicate to people with different backgrounds. @@ -970,27 +970,27 @@ - + - + - + Conflict solving - + - + - + If you read this it means you already understand why it is so important :) @@ -1001,42 +1001,42 @@ - + - + - + 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 @@ -1045,1165 +1045,1185 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 1 step - + - + - + - + Basic operations - + - + - + Arithmetic operations - + - + - + Loops: for/while - + - + - + Logical operations - + - + - + Bitwise operations - + - + - + Functions - + - + - + 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 - + - + - + Scope - + - + - + Memory leakage - + - + - + Forward declaration - + - + - + unique_ptr - + - + - + shared_ptr - + - + - + Lifetime of objects - + - + - + new/delete operators - + - + - + weak_ptr - + - + - + Namespaces - - + + - - + + - - The overloading of regular set of operators for - regular or custom types (structures/classes). + + 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. + + To prevent memory leakage problems it is better + to use smart pointers rather than raw pointers. + + + + + + + + + + + + + Do not ignore warnings from compiler and static analyzer. + They are your friends, not enemies - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + + - + - + - + 2 step - + - + - + - + Structures and classes - + - + - + Exception handling - + - + - + Overloading of functions - + - + - + Virtual table (vtbl) - + - + - + Object Oriented programming (OOP) - + - + - + Exceptions - + - + - + 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 @@ -2211,330 +2231,330 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 3 step - + - + - + - + auto (automatic type deduction) - + - + - + Language concepts - + - + - + type casting - + - + - + static_cast - + - + - + const_cast - + - + - + dynamic_cast - + - + - + reinterpret_cast - + - + - + Undefined Behavior (UB) - + - + - + Argument-dependent lookup (ADL) - + - + - + Macros - + - + - + 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. @@ -2542,642 +2562,642 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 4 step - + - + - + - + Templates - + - + - + Variadic templates - + - + - + The template specialization - + - + - + type traits - + - + - + SFINAE - + - + - + The full template specialization - + - + - + The partial template specialization - + - + - + RAII - + - + - + pimpl - + - + - + Erase-Remove - + - + - + Non-Copyable/Non-Moveable - + - + - + Copy and swap - + - + - + Copy on write - + - + - + CRTP - + - + - + Standards - + - + - + C++11/14 - + - + - + C++17 - + - + - + C++20 - + - + - + newest - + - + - + C++0x - + - + - + Idioms - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 1 step - + - + - + - + Working with source code - + - + - + Text editors - + - + - + IDE - + - + - + Code editors - + - + - + Debugger - + - + - + Linters - + - + - + Knowledge of features and abilities (shortcuts, tools, plugins) - + - + - + Understanding of debugger messages - + - + - + Debugging symbols - + - + - + WinDbg - + - + - + GDB - + - + - + Choose one of the popular IDEs and study it well: Eclipse, MS Visual Studio, Qt Creator, JetBrains Clion, XCode, etc. @@ -3185,41 +3205,41 @@ - + - + - + 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. - + - + - + 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. @@ -3227,228 +3247,228 @@ - + - + - + Learn about common errors (segfault, out of memory, access violation) and undefined behavior concept. - + - + - + Choose one of the popular editors and study it well. For example: Visual Code, Atom, Sublime Text, etc. - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 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 + + Features of a particular compiler - + - + - + 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 @@ -3456,14 +3476,14 @@ - + - + - + 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 @@ -3472,1430 +3492,1430 @@ - + - + - + - + - + - + - + - + - + - + 5 step - + - + - + - + Build systems - + - + - + CMake - + - + - + Makefile - + - + - + ninja - + - + - + Package managers - + - + - + vcpkg - + - + - + spack - + - + - + Conan - + - + - + nuget - + - + - + Libraries - + - + - + boost - + - + - + opencv - + - + - + poco - + - + - + Libraries inclusion - + - + - + protobuf - + - + - + gRPC - + - + - + fmt - + - + - + pybindll - + - + - + spdlog - + - + - + ranges_v3 - + - + - + tensorflow - + - + - + opencl - + - + - + Frameworks - + - + - + gtest/gmock - + - + - + Qt - + - + - + catch2 - + - + - + google profiler - + - + - + pytorch c++ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 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 step - + - + - + - + Version control software - + - + - + Distributed - + - + - + Centralized - + - + - + SVN - + - + - + git - + - + - + Mercurial - + - + - + Best practices - + - + - + Code quality - + - + - + Code guidelines - + - + - + Principles of development - + - + - + 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) - + - + - + 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 - + - + - + Industrial standards - + - + - + MISRA - + - + - + Autosar - + - + - + Command line - + - + - + batch - + - + - + Powershell - + - + - + bash - + - + - + CI/CD - + - + - + Trunk Based Development - + - + - + 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. - + - + - + To configure automated code formatting verification with one of the suitable utilities: clang-format, Resharper - code style, MSVS - code style. @@ -4903,14 +4923,14 @@ - + - + - + - Scripting - Functional - SQL like @@ -4919,14 +4939,14 @@ - + - + - + 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#. @@ -4934,1705 +4954,1705 @@ - + - + - + Backward compatibility - + - + - + Software design - + - + - + Architecture styles - + - + - + Component-based - + - + - + Monolithic application - + - + - + Layered - + - + - + Client-server - + - + - + Microservices architecture - + - + - + Event-driven - + - + - + Plug-ins - + - + - + REST - + - + - + Service-oriented architecture - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 2 step - + - + - + - + Design Patters (GoF) - + - + - + Behavioral - + - + - + Structural - + - + - + Creational - + - + - + OOP - + - + - + SOLID - + - + - + UML - + - + - + Architecture patterns - + - + - + MVC - + - + - + MVVM - + - + - + Three-tier - + - + - + Onion - + - + - + Hexagon - + - + - + Methodologies of development - + - + - + Test Driven Development - + - + - + Behavior Driven Development - + - + - + 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 - + - + - + Race condition - + - + - + Live lock - + - + - + Starvation - + - + - + Threads - + - + - + Concurrency - + - + - + Mutexes - + - + - + Semaphores - + - + - + lock-free - + - + - + Event handling - + - + - + Sync - + - + - + Async - + - + - + Process - + - + - + Interprocess communication - + - + - + Shared memory - + - + - + Pipes - + - + - + Serialization - + - + - + json - + - + - + XML - + - + - + Network - + - + - + TCP/IP - + - + - + OSI - + - + - + Sockets - + - + - + HTTP - + - + - + TCP - + - + - + UDP - + - + - + File system - + - + - + Task scheduler - + - + - + Virtualization - + - + - + VirtualBox - + - + - + VMware Workstation - + - + - + Containers - + - + - + Hyper-V - + - + - + Docker - + - + - + Cloud Services - + - + - + Kubernetes - + - + - + Security - + - + - + Encryption - + - + - + MultiCPU systems - + - + - + Multicore CPU - + - + - + NUMA - + - + - + Input/output - + - + - + Drivers - + - + - + Audio - + - + - + Graphics - + - + - + Printers (printing) - + - + - + DirectSound - + - + - + OpenAL - + - + - + DirectX - + - + - + Vulkan - + - + - + OpenGL - + - + - + CUDA - + - + - + Common skills - + - + - + Language tools - + - + - + Language syntax - + - + - + 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?" @@ -6645,27 +6665,27 @@ - + - + - + How to use: - + - + - + If you have any feedback or remarks don't hesitate to contact us. We really appreciate it. :) @@ -6676,79 +6696,79 @@ - + - + - + Feedback: - + - + - + Optional - + - + - + Junior - + - + - + Middle - + - + - + Senior - + - + - + The middle developer has the skills to create a design for new functionality as a part of @@ -6760,14 +6780,14 @@ - + - + - + The senior developer has the skills to create a design and make decisions for a @@ -6778,14 +6798,14 @@ - + - + - + The junior must acquire the following skill as soon as possible: to write @@ -6795,14 +6815,14 @@ - + - + - + The juniors should be aware of middle/senior skills. It's enough to have a basic @@ -6811,14 +6831,14 @@ - + - + - + The "steps" are presented on this map. They're intended to show an easy for newbies to @@ -6829,580 +6849,580 @@ - + - + - + Repository: - + - + - + https://github.com/salmer/CppDeveloperRoadmap - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/Russian/Graph/roadmap.graphml b/Russian/Graph/roadmap.graphml index 5c3a74a..aac302f 100644 --- a/Russian/Graph/roadmap.graphml +++ b/Russian/Graph/roadmap.graphml @@ -1125,7 +1125,7 @@ - + Разделение кода на headers/cpp юниты @@ -1136,7 +1136,7 @@ - + Область видимости @@ -1158,7 +1158,7 @@ - + Forward declaration @@ -1224,7 +1224,7 @@ - + Пространство имён @@ -1235,7 +1235,7 @@ - + Перегрузка стандартных операторов для @@ -1257,6 +1257,19 @@ + + + + + + + Не игнорируйте предупреждения компилятора +и статического анализатора. Они вам друзья, +а не враги + + + + @@ -2203,14 +2216,14 @@ Qt Creator, JetBrains Clion, XCode и т.д. - + - 3 этап + 3 этап - + @@ -2284,10 +2297,10 @@ Qt Creator, JetBrains Clion, XCode и т.д. - + - Компиляторы от различных производителей + Особенности работы конкретного компилятора @@ -2308,7 +2321,7 @@ GCC, MinGW - + Есть несколько этапов работы компилятора, которые @@ -6150,7 +6163,7 @@ MSVS - стиль кода. - + @@ -8703,7 +8716,7 @@ MSVS - стиль кода. - + @@ -9629,6 +9642,18 @@ MSVS - стиль кода. + + + + + + + + + + + + diff --git a/Russian/Graph/roadmap.svg b/Russian/Graph/roadmap.svg index 0f1e444..97c5fc7 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,1496 +1043,1517 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 1 этап - + - + - + - + Базовые операции - + - + - + Арфиметические операции - + - + - + Циклы for/while - + - + - + Логические операции - + - + - + Битовые операции - + - + - + Функции - + - + - + lambda - + - + - + Операторы - + - + - + Типы данных - + - + - + Динамическая типизация - + - + - + Статическая типизация - + - + - + RTTI - + - + - + Указатели и ссылки - + - + - + Организация кодовой базы - + - + - + Ссылки - + - + - + Модель памяти - + - + - + Умные указатели - + - + - + Сырые Указатели - - + + - - + + - - Разделение кода на headers/cpp юниты + + Разделение кода на headers/cpp юниты - - + + - - + + - - Область видимости + + Область видимости - + - + - + Утечки памяти - - + + - - + + - - Forward declaration + + Forward declaration - + - + - + unique_ptr - + - + - + shared_ptr - + - + - + Время жизни - + - + - + Операторы new/delete - + - + - + weak_ptr - - + + - - + + - - Пространство имён + + Пространство имён - - + + - - + + - - Перегрузка стандартных операторов для - различных типов/структур/классов. + + Перегрузка стандартных операторов для + различных типов/структур/классов. - + - + - + Чтобы избежать проблем с управлением памятью, старайтесь писать код используя ссылки и умные указатели. + + + + + + + + + + Не игнорируйте предупреждения компилятора + и статического анализатора. Они вам друзья, + а не враги + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - - + + - - - + + + - + - + - + + + + + + + - + - + - + 2 этап - + - + - + - + Структуры и классы - + - + - + Обработка ошибок - + - + - + Перегрузка методов - + - + - + Таблица вирутальных методов - + - + - + ООП - + - + - + Исключения - + - + - + Access violation - + - + - + Динамический полиморфизм - + - + - + Виртуальные методы - + - + - + Правило нуля/трех/пяти - + - + - + Статический полиморфизм - + - + - + Множественное наследование - + - + - + Ромбовидное наследование - + - + - + Коды возврата - + - + - + Не используйте множественное наследование - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + 3 этап - + - + - + - + auto (автоматическое выведение типов) - + - + - + Концепции языка - + - + - + type casting - + - + - + static_cast - + - + - + const_cast - + - + - + dynamic_cast - + - + - + reinterpret_cast - + - + - + Неопределённое поведение (Undefined Behavior) - + - + - + Поиск, зависящий от аргумента (ADL) - + - + - + Макросы - + - + - + Name mangling - + - + - + Стандартная библиотека - + - + - + Поток ввода/вывода - + - + - + Алгоритмы стандартной библиотеки - + - + - + Итераторы - + - + - + Контейнеры - + - + - + Дата/время - + - + - + Многопоточность - + - + - + Языковые конструкции для которых отсутствуют прописанные требования в стандартах. В случае ошибки дальнейшее поведение будет предсказать невозможно, и всецело будет @@ -2542,642 +2563,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 +3206,42 @@ - + - + - + Научитесь пользоваться отладчиком. Изучите его возможности. - + - + - + Выберите один из популярных редакторов и хорошо освойте его. К примеру: Notepad++, Atom, и т.д. - + - + - + Навык работы с отладчиком в через командную строку - узконаправленный навык. В регулярной работе достаточно уметь работать с отладчиком в рамках IDE. @@ -3228,14 +3249,14 @@ - + - + - + Ознакомьтесь с самыми распространёнными ошибками (segfault, out of memory, access violation) и концепцией  неопределённого поведения (undefined behavior) @@ -3243,214 +3264,214 @@ - + - + - + Выберите один из популярных редакторов и и хорошо освойте его: Visual Code, Atom, Sublime Text и т.д. - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - 3 этап + + 3 этап - - + + - + - + - + Компиляторы - + - + - + Базовые знания работы компиляторов - + - + - + Компиляция кода в объектные файлы - + - + - + Компоновка объектных файлов в приложение (линковка) - + - + - + Этапы работы компилятора - - + + - - + + - - Компиляторы от различных производителей + + Особенности работы конкретного компилятора - + - + - + У компиляторов есть свои особенности, о которых хорошо бы знать: Clang++/LLVM, Intel C++, MSVS C++, GCC, MinGW @@ -3458,1448 +3479,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 +4928,14 @@ - + - + - + - Скриптовые - Функциональные - SQL like @@ -4924,14 +4945,14 @@ - + - + - + Иногда требуется предоставить обертку к библиотеке, написанной на C++ для другого ЯП, например Python или C#. Для этого применяют специальные библиотеки/фреймворки. @@ -4939,1705 +4960,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 +6670,27 @@ - + - + - + Как ориентироваться: - + - + - + Если у вас есть замечания, вопросы или предложения, будем рады получить любую помощь и поддержку. Мы открыты для общения :) @@ -6681,79 +6702,79 @@ - + - + - + Предложения и замечания: - + - + - + Optional - + - + - + Junior - + - + - + Middle - + - + - + Senior - + - + - + Мидл способен создать дизайн и решения для функционала внутри @@ -6764,14 +6785,14 @@ - + - + - + Синиор способен создать дизайн и решение для компонента/приложения с @@ -6780,14 +6801,14 @@ - + - + - + Джуниору важно научиться писать структурированный код и не усложнять его без @@ -6798,14 +6819,14 @@ - + - + - + От джуниора ожидается осведомленность про категории, которые @@ -6817,14 +6838,14 @@ - + - + - + На карте представлены компетенции, которые выделены в "этапы". Мы @@ -6837,580 +6858,580 @@ - + - + - + Репозиторий: - + - + - + https://github.com/salmer/CppDeveloperRoadmap - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +