Giter VIP home page Giter VIP logo

cppdeveloperroadmap's Introduction

C++ Developer Roadmap

💬 Additional languages: Русский 中文

C++ is still one of the most popular development languages in 2021 and 2022. There are quite a few people who want to start learning C++ and become a developer. They face the questions: "Where should I start? What and in what order should I study? What books should I read?

We have tried to answer these questions through the presented roadmap. The roadmap focuses on the general competencies and skills that are commonly found in most projects. It is designed to assist those who are just beginning their education or have limited experience. You can create a more effective learning plan without being sidetracked by irrelevant information if you study the materials listed. It will aid you in mastering C++ to the level commonly used in many commercial projects.

It is recommended that you read the articles listed below before starting to explore the map.

📑 Articles

  1. 🔦 Why was the roadmap created and for what purpose?
  2. 🔍 Are you certain that you require knowledge of 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.

🌌 Roadmap

The roadmap is available in the following formats:

Instructions on how to view and edit a graphML file can be found here

🔑 License and conditions

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

  • You may only share, adopt, or copy any portion of the presented materials if you provide a link to the original sources.
  • It's PROHIBITED to use any portion of the materials for any commercial purposes.

📫 Feedback and communication

In the event of any comments, proposals, or ideas, please do not hesitate to contact us. We truly value your support.

You can reach us through one of the following channels 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 does not have a history tracker and access to the roadmap is restricted. All changes are added manually after they have been reviewed and approved)

☎️ Contacts

Creators:

Reviewers:

cppdeveloperroadmap's People

Contributors

albrt-dev avatar anvartdinovtimurlinux avatar beeblerox avatar capoyon avatar dmitrievdmitriya avatar lusipad avatar marleeeeeey avatar mpstv avatar romanwrites avatar salmer avatar sd57 avatar stenbone avatar uberchili avatar wngtk avatar yaroslavche avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cppdeveloperroadmap's Issues

[mistranslation] Occam's Razor

«Бритва Оккама» по-английски — это "occam's razor", а в карте сейчас "Okkama blade"

Function programming paradigm should be added to the roadmap

Hello,
First of all, great work!
I think that you should add FP (functional programming) paradigm to software design, mainly side-effect-less functions and immutability. I even think that those principles should be learnt prior to OOP. [https://www.manning.com/books/functional-programming-in-c-plus-plus](Ivan Cukic's book) is a great resource, but it's probably more for middle to expert level. There is also [https://www.packtpub.com/product/hands-on-functional-programming-with-c/9781789807332](Alexandru Bolboaca's book) which is less advance.

Вопрос

Привет.
Видимо, это единственный способ связаться по поводу созданной Mind-карты по изучению С++, так что пишу здесь. Рассчитываю на ответ :)
Я новичок в С++. Можно сказать, знаю базу языка, общепредоставленные основы, одинаковые от сайта к сайту и от книги к книге. От типов данных до классов.

Просмотрел всю вашу карту. Условно понятно, что чтобы быть разработчиком С++, надо понимать все перечисленные вещи. Даже указан порядок изучения. Однако совсем непонятно, а что собственно делать, что именно программировать, чтобы набираться опыта, какие задачи реализовывать на языке, чтобы осваивать навыки с mind-mapa. То есть на карте показано, ЧТО нужно знать, но не КАК это узнать, в каких ситуациях ЭТО нужно и нужно ли вообще. В целом-то не ясно даже, с чего начать.

Вот, и я, как новичок, в небольшом тупике. Базу усвоил, с алгоритмами и алгеброй поигрался. И хочется как-то развиваться дальше, в последствии трудоустраиваться. А что пытаться программировать-то.... И как эта карта вообще может мне помочь.
Mind-карта составлена вроде как и для новичков, а вроде и совсем никак неопределённость не уменьшает.
Может, будут какие-то общие советы, как использовать собранную карту с пользой? И как быть новоиспечённому зачатку программиста на С++? :(

Этап "Алгоритмы и структуры данных"

Добрый день, предлагаю подсказать "как измерить" знания по алгоритмам и структурам данных. Например, указать на ваш взгляд примерное кол-во решенных задач на leetcode.com (для junior/middle/senior свои числа), или рэндж по цветам codeforces.com (например, junior это серый-фиолетовый и тп)

Надеюсь, это поможет адекватно и прозрачно оценивать начинающим свои силы, что от них ждут на собесе:)

Spelling error

Spelling error in the translation into Russian. The screenshot shows everything.
image

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

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

изображение

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

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

изображение

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

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

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

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

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).

Демонстрационные примеры

Добрый день. Предлагаю для каждого "дорожного пункта", где это возможно, добавить ссылку на godbolt, где будет приведен демонстрационный пример. Например, человек открывает карту, идет по пунктам Hard skills - Синтаксис языка - Базовые операции - Циклы for/while, щелкает на последний пункт и видит примеры живого применения циклов с комментариями.
Так же можно добавить ссылки на статьи по теме "дорожного пункта".

"Return to main page" button

I believe, that this is a good idea to add button in the end of the articles, so the user can return to page with other articles and links.

Add a databases topic

I think it will be great to add databases for juniors-level. This skill is actually necessary nowadays.

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.

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.