Roadmap for learning the C++ programming language for beginners and experienced devs.

C++ Developer Roadmap

Additional languages: Русский

C++ is still one of the most popular development languages. There are quite a number of people that want to start learning it and become a C++ developer. They face with the questions: "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.

Before you start exploring the map, it's recommended to read the articles listed below.

Articles

  1. Why and what for the roadmap has been created?
  2. Are you sure that you need C++?
  3. C++ - It's Not Rocket Science
  4. Application areas of C++
  5. Myths and Legends of C++
  6. Developers grading
  7. How to study?
  8. Books and other resources about C++
  9. Pet-project ideas
  10. Language toolkit
  11. More resources about C++: documentation, community links, etc.

Road map

The link: Miro - C++ Developer Roadmap

License and conditions

The roadmap is published under the license CC BY-NC-SA 4.0: RUS || ENG. In a nutshell:

  • You can share, adopt or copy any chunk of the presented materials only in case you share a link to the original sources
  • It's PROHIBITED to use any chunk of the materials with any commercial reason.

Feedback and communication

In case of any remarks, proposals or ideas don't hesitate to contact us. We really appreciate your support :)

Please use one of the following paths via Github:

  • In case of any proposal or modification in the repository content - create a new PR in Pull Requests
  • In case of any proposal or modification in the repository content - submit a new Issue in Issues (Unfortunately, the Miro framework doesn't support a history tracker and the access to the roadmap is limited. We add all changes manually after their review and acceptance)

Contacts

Creators:

Reviewers:

Owner
Evgeny
C++ Software Engineer
Evgeny
Comments
  • Предлагаю фигануть опенсорсный курс

    Предлагаю фигануть опенсорсный курс

    Ребят, у нас тут есть открытый проект https://ru.code-basics.com/ где дается база по кучке языков. Все это опенсорсное и у нас даже есть заготовка под cpp. Хотите поучаствовать? https://github.com/hexlet-basics/exercises-cpp

  • Roadmap engilsh spelling remarks

    Roadmap engilsh spelling remarks

    There's some Russian characters after "choose one of the popular IDEs"

    • Occam is spelled with two 'C's, not two 'K's.
    • Uint tests should be unit tests.
    • Virualization -> virtualisation (whether you want * British or American English is up to you, but at least put the T there).
  • Which Stroustrup book(s) to avoid? Warning is ambiguous.

    Which Stroustrup book(s) to avoid? Warning is ambiguous.

    On Learn C++ using the book by Stroustrup

    Which states:

    Learn C++ using the book by Stroustrup A highly damaging thesis taking origin from the “Old Guard” or someone born with a keyboard in hand.

    Those who had extensive experience of development in other languages (C, Fortran, Delphi, etc.) and transitioned to C++ are most likely to give this piece of advice. Stroustrup wrote this book like a reference, therefore one needs to use it in the appropriate manner, which requires some knowledge of the language. Better look at the Books section, you’ll find books for any level of language proficiency.

    What book are you referring to? BS has authored several books in the past few years including:

    1. Programming -- Principles and Practice Using C++
    2. A Tour of C++
    3. The C++ Programming Language
  • Translate/prejungrade

    Translate/prejungrade

    Translation of the pre-junior skills. @DmitrievDmitriyA @salmer Doesn't Github allow selecting a reviewer instead of mentioning in the comments? Or maybe I lack the rights?

  • Неопределённое поведение следует включить в первый этап вместе с отладкой

    Неопределённое поведение следует включить в первый этап вместе с отладкой

    С одной стороны, в первый этап включён отладчик:

    изображение

    С этим я согласен: надо уметь получать в итоге работающий код, а с первой попытки код работает редко. Отладчик очень сильно помогает.

    С другой стороны, неопределённое поведение возникает только на третьем этапе, уже даже после ООП, правила трёх/пяти, ссылок, сырых указателей, утечек памяти:

    изображение

    Мне кажется, про неопределённое поведение надо рассказывать сразу же, как обучающийся может написать программу с UB. В противном случае интуитивное ожидание от программы с ошибкой — "произойдёт что-то логичное". Компьютеры же детерминированы и логичны. Да и на JavaScript/Java/Python/HTML/практически любом другом языке программирования ошибочная программа может выдать неверный ответ, зависнуть, упасть с исключением, но в любом случае проблему можно будет логично отследить до точки возникновения, а в подавляющем большинстве случаев укажут на строчку, где ошибка возникла.

    В случае с C++ это категорически не так. Программа может падать, а отладчик может показывать на return 0; в main(), на int x = v.size(), на последнюю } в функции, на случайную } в программе после выхода за границу массива. Это всё сильно сбивают с толку обучающихся. К тому же фразы вроде "нельзя читать из неинициализированной переменной" даже при расскаже об UB первые несколько месяцев воспринимаются не как UB, а как "в неинициализированной переменной, очевидно, лежит просто какой-то случайный мусор". В частности, легко предположить, что если нам неважно, что там за мусор, то программа хотя бы не упадёт, но это неверно. Легко предположить, что если мы прочитали что-то за границей массива, то у нас либо прочитался мусор, либо всё сразу упало, а не упало через десять строк в вообще другой функции.

    И это всё не считая проблем, которые могут возникнуть при висячих ссылках, ручном управлении памятью, reinterpret_cast.

    Я предлагаю передвинуть неопределённое поведение в первый этап и считаю, что без этого отлаживать программы на C++ становится сильно сложнее. Необязательно его изучать досконально, но необходимо перестать считать, что "очевидно же, что выход за границы массива так не проявится". Например, вот здесь есть хорошее введение (исходник).

  • Add an optional field about multithreading using OpenMP

    Add an optional field about multithreading using OpenMP

    In the section about multithreading, in addition to the standard library, you can add a topic about using OpenMP as a multithreaded programming tool in C++. Also tell the reader to read about the difference between the standard library and OpenMP.

  • Create a topic with a list of useful courses about C++ (free or paid)

    Create a topic with a list of useful courses about C++ (free or paid)

    It's nice to have a topic with a list of validated and approved courses where people can start to learn the C++ language for a free or reasonable price.

  • Create a topic with a list of YouTube videos related to C++ basics and common practices (cppcon, boostcon, etc.)

    Create a topic with a list of YouTube videos related to C++ basics and common practices (cppcon, boostcon, etc.)

    It's nice to create a list of videos about common knowledge about C++ for juniors and middle developers. It's nice to have videos that explain the most useful technics and tricks in daily development: for example:

    • Jonathan Boccara - 105 STL Algorithms in Less Than an Hour
    • Herb Sutter - Back to the Basics! Essentials of Modern C++ Style
My journey through learning C following the "The ANSI C programming language" book

The ANSI C programming language: Some of the exercises This is a repo containing my attempts at some of the exercices present in the "The ANSI C progr

May 24, 2022
cpp fundamentals and questions for beginners and intermediates
cpp fundamentals and questions for beginners and intermediates

DSA 60 days Hi people! So we have started grasping dsa concepts and solving problems from 12 July. And we shall continue till September 10 Starting fr

Jun 20, 2022
C - A repository containing C code samples and concepts for beginners.
 C - A repository containing C code samples and concepts for beginners.

C - A repository containing C code samples and concepts for beginners. A repository containing C concepts I made when I was bored. You can also use th

Nov 1, 2021
Programming Language T#. Compiled language. In development.

Programming Language T# WARNING! THIS LANGUAGE IS A WORK IN PROGRESS! ANYTHING CAN CHANGE AT ANY MOMENT WITHOUT ANY NOTICE! $ make func main() {

Feb 1, 2022
T# Programming Language. Interpreted language. In development. I will make this compilable later.

The T# Programming Language WARNING! THIS LANGUAGE IS A WORK IN PROGRESS! ANYTHING CAN CHANGE AT ANY MOMENT WITHOUT ANY NOTICE! Install Install $ make

Jun 24, 2022
A gtk4 tutorial for beginners

This tutorial illustrates how to write C programs with Gtk4 library. It focuses on beginners so the contents are limited to basic things such as widgets, GObject, signal, menus and build system. Please refer Gnome API reference for further topics.

Jun 18, 2022
IoT for Beginners - 12 Weeks, 24 Lessons, IoT for All!
IoT for Beginners - 12 Weeks, 24 Lessons, IoT for All!

Azure Cloud Advocates at Microsoft are pleased to offer a 12-week, 24-lesson curriculum all about IoT basics. Each lesson includes pre- and post-lesson quizzes, written instructions to complete the lesson, a solution, an assignment and more. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.

Jun 23, 2022
Zephyr Tutorial for Beginners
Zephyr Tutorial for Beginners

Zephyr: Tutorial for Beginners This repository contains a step-by-step guide that teaches you how to use Zephyr RTOS. It assumes: no previous experien

Jun 14, 2022
Small beginners C program examples.
Small beginners C program examples.

Small beginner C programs.

Feb 18, 2022
A project uses for beginners, who wants to learn basic Cpp.

Learning Basic Cpp The basic project for who wants to learn Cpp. Notes: All the files are coded using Microsoft Visual Studio 2019. If you want to cod

Jan 28, 2022
A comprehensive catalog of modern and classic books on C++ programming language
A comprehensive catalog of modern and classic books on C++ programming language

A comprehensive catalog of modern and classic books on C++ programming language

Jun 19, 2022
A minimal, toy programming language implemented in C++ and STL.

od Programming Language Mod (or ModLang) is a minimal, toy programming language implemented in C++ and STL (Standard Template Library) with no other e

Apr 28, 2022
A modern dynamically typed programming language that gets compiled to bytecode and is run in a virtual machine called SVM (Strawbry Virtual Machine).

Strawbry A bytecode programming language. Here is what I want Strawbry to look like: var a = 1 var b = 2 var c = a + b print(c) func sqrt(x) { re

Jan 5, 2022
Teach the C programming language using a collection of super beginner friendly tutorials and challenges.
Teach the C programming language using a collection of super beginner friendly tutorials and challenges.

TeachMeCLikeIm5 You are welcome to contribute to this repo. See the CONTRIBUTING.md for more info ?? About this repo ?? A collection of super beginner

Feb 4, 2022
General purpose and statically typed programming language

Synthium Synthium is designed to be a systems programming language. It takes inspiration from existing systems programming languages, but also from so

Oct 16, 2021
Colang - Programming language and compiler —WORK IN PROGRESS—

Co programming language Building Initial setup: ./init.sh will install the following into deps/: ckit build tool and rbase library ckit-jemalloc memor

Jun 5, 2022
Programming-Basics - This Repository Contains source codes of various programming languages. Please Contribute to make this Useful.
Programming-Basics - This Repository Contains source codes of various programming languages. Please Contribute to make this Useful.

Programming-Basics About ❓ Want To Start your Open-Source Journey Without Facing Difficulties?,If Yes, Then You Are at The Right Place! ?? Don't Know

Jun 11, 2022
Competitive Programming Language MM

MM Language MM Languageは、競技プログラミングのために開発中のプログラミング言語です。 どんなことが可能なのかは、examplesおよびexamples_outputsを参照ください。 まだ開発中の言語であるため、諸々不備があり、コンパイルエラーの行数表示さえまともに出せない状

May 13, 2022
the kyanite programming language

Kyanite Kyanite is a small passion-project programming language intended to be light-weight and simple to use. You can read more on the language itsel

Aug 19, 2021