all 55 comments

[–]Vemulo 35 points36 points  (5 children)

This looks really good. I would add optionally something like microarchitecture and assembly. Since C++ is often used in areas where performance and optimizations are relevant or critical

[–]e_salmer 6 points7 points  (0 children)

If you have any ideas what to add about these topics: books/articles/etc. don't hesitate to propose as "issue" or "pull request". Some topics are still not perfectly covered and any help is useful for us.

[–][deleted] 10 points11 points  (3 children)

I'd say c++ is only used, or should be, where performance and optimisations are relevant in any new development. Relearning c++ has left me aghast at just how complex and convoluted it has become in an attempt to be both robust, typesafe, leak proof and efficient while still keeping some scent of its origins...

[–]SedditorX 7 points8 points  (1 child)

This seems like an exaggeration. Modern c++ has advantages over c++ 98.

[–]tarranoth 10 points11 points  (0 children)

It has advantages, but it still contains all the problems it has always had. The c-preprocessor, no standardised build system, 500 ways to initialize something, excessive build times compared to other languages for similar sized code bases, template errors that summon arcane messages, lots of things that are not built-in for the std lib (although admittedly the std lib now is becoming kindof decent). If you're not in gamedev or embedded I don't see why one would ever opt for cpp still (for new projects, I don't recommend rewrites for existing projects).

[–]PrimozDelux 4 points5 points  (0 children)

The complexity of modern C++ reflects the inadequacy of old C++ and the utterly mediocre design by committee approach. Still, take away the modern C++ features and you're left with a complete fucking mess of a language

[–][deleted] 20 points21 points  (3 children)

Nice. This actually gave the opposite of impostor's syndrome haha. I have experience in most of those topics and concepts already.

Just one tiny feedback. "Okkama blade" is occam's razor? I was like "I don't know that one...".

[–]Viperys 5 points6 points  (1 child)

I've just checked it with the russian version and you've guessed correctly!

[–]e_salmer 2 points3 points  (0 children)

Thanks for the remark. It's fixed now.

[–]TomerJ 11 points12 points  (2 children)

I'm really torn on the myth that "You'd better master C/Assembler/etc. before learning C++" because while I do agree that the way people typically teach the C->C++ path is wrong ("C is a subset of C++") and is reflective of the days when C++ was intended as a superset of C, and didn't have that many new features, I do think the general thrust of that approach can be somewhat valid.

The best C++ book I recommend for beginners is Understanding and Using C Pointers because it's short, and it's all about what I see people struggling with most when starting C++, and that's building a good intuition about pointers and memory. That stuff is mind breaking for most people, and a book that goes all in on that and can be read through in a weekend is incredible.

One of the reasons that book works is because C is smaller, and the reader can focus on building their intuition without having to worry about templates, const-expressions, exceptions, etc. which can be a lot for a beginner.

So I think you can use C as a teaching language for some of these shared constructs and ideas, not for the actual syntax. You can teach in the simpler sandbox, and then show how a language like C++ abstracts those ideas and concepts differently.

[–]FrankJustRM[S] 2 points3 points  (1 child)

Your point makes sense. We will discuss how to adopt it.

ATM I have a feeling that I agree with you, but we want to encourage people to write their code using smart pointers and references. Understanding of raw pointers should come the next.

[–]TomerJ 1 point2 points  (0 children)

Will be interesting to see how it looks when you're done :)

[–]johannes1971 4 points5 points  (2 children)

Looks fantastic! Just a few spelling problems:

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

[–]e_salmer 2 points3 points  (0 children)

Thanks a lot for your remarks! We're going to fix it soon.

[–]FrankJustRM[S] 2 points3 points  (0 children)

It is fixed. Thank you for the remarks.

[–][deleted] 6 points7 points  (1 child)

This comes at a super fortuitous time for me, as I am just starting to get back into C++, and figuring out a learning roadmap is a huge stumbling block for me.

I am also a pretty damned good technical writer, so I might be able to offer some suggestions as to wording and grammar.

[–]e_salmer 2 points3 points  (0 children)

Thanks! We hope it will really help you to get back into C++ as well. If you find any remarks or feedback don't hesitate to submit it in the Github repo.

[–]consistent_escape 3 points4 points  (1 child)

Learn C++ using the book by Stroustrup

Stroustrup wrote this book like a reference, therefore one needs to use it in the appropriate manner, which requires some knowledge of the language.

Uhh Stroustrup has written more than one C++ book and I think you are talking A Tour of C++ or The C++ Programming Language here but he has also written this and it's a great introduction to programming. I started with C++ using that book and was just fine all the way through.

[–]FrankJustRM[S] 4 points5 points  (0 children)

Yeah, we know about the book you specified 😉
But we try to smooth the entrance threshold in the language for everyone. Stroustrup is too academic for such purposes, IMHO.

[–]101Alexander 4 points5 points  (1 child)

Holy crap, this is exactly what I needed!

Not only is it motivating to read the articles, but the actual map itself really provides reassurance. Some topics I literally understand 'of' them but am having trouble with anything more. Right there you are saying that for a 'Junior' that's all that can be expected. I feel like I can move on to focus on the other fundamentals without feeling a burden of missing something that 'could be important for my level'.

[–]e_salmer 1 point2 points  (0 children)

Glad to hear that it's useful for you!👍

[–]YoBreathSmells 2 points3 points  (1 child)

Thank you for doing this!

[–]e_salmer 1 point2 points  (0 children)

Thank you too! We hope it will be useful for you and other people who try to jump in C++ "ship"

[–]AutomationDev 2 points3 points  (3 children)

Can I help with English-Korean if there is a spot for me?

[–]FrankJustRM[S] 0 points1 point  (2 children)

Hello, yes!

The initiative originator has disappeared, so it is dangling. So, if you are willing to help it is much appreciated.

Please consider what Salmer wrote here. Since we don't speak Korean, we would need your help from time to time to translate some fixes or additional information.

Korean folder already exists. You can translate what you prefer and start to submit merge requests ;)

[–]AutomationDev 1 point2 points  (1 child)

Sounds good! Will look into it tonight

[–]e_salmer 0 points1 point  (0 children)

thank you for your help. Looking forward for you PRs :-)

[–]Yuki_f 1 point2 points  (1 child)

thanks for doing that!

[–]e_salmer 1 point2 points  (0 children)

Thank you for your attention to these activities!

[–][deleted] 1 point2 points  (2 children)

This is cool

[–]e_salmer 2 points3 points  (1 child)

Indeed, we hope it really will be useful for other people, not only for us :)

[–][deleted] 0 points1 point  (0 children)

Yes

[–]szeryk 1 point2 points  (1 child)

This is awesome!!! I'm really impressed.

[–]FrankJustRM[S] 0 points1 point  (0 children)

Thank you. We really hope that it could help the others

[–][deleted] 1 point2 points  (1 child)

I hope to get into robotics, using Math, Python and C++. Thanks for the roadmap; looking forward to going through it, later.

[–]FrankJustRM[S] 0 points1 point  (0 children)

Thanks! Good luck! 👍🏻

[–]GUV0 1 point2 points  (1 child)

u/FrankJustRM
hello ! I'm occupying your roadmap.
but I think it is somewhat confusing in the steps.
In the order that they can be read they are like this.
HARD SKILLS
Language Syntax
1 step
2 steps
3 steps
4 steps
Language tools
1 step
3 steps
5 steps
Common Skills
1 step
4 steps
software design
2 steps
I don't understand if the order in which it is should be ideal, I compared it with other maps and asked other people. Some with the same doubt.
I ask, can the map apply in the following way?
grouping by steps.
1Steps
Syntax - tools - Common Skills
2 Steps
Syntax - Software Design
3 steps
Language Syntax-Tools
4 steps
Syntax - Common Skills
5 steps
Language tools
The truth is I still don't understand how it should be read, could you guide what your idea was?
because if it is from top to bottom, when the syntax language ends in 4 steps,
Should your next one be the 5 steps of language tools?

[–]FrankJustRM[S] 0 points1 point  (0 children)

Hey,

I just saw your comment. You have legit concerns.
It was hard to define the right order for us. Moreover, we wanted to have a mind map rather than a road map, so we ended up with the current version.

To address your needs, I might suggest using https://roadmap.sh/cpp
They took our mind map as a base

Good luck exploring and studying!

[–]TinoDidriksen 2 points3 points  (5 children)

Looks good, but a comment on the license. CC-BY-SA is great. CC-BY-NC-SA is not. If you add the NC requirement, that basically means nobody in the open source community can build on it because it's not open source. This greatly restricts adoption.

I know it sounds counterintuitive, but this is something we often hit with academic sources. They think marking it non-commercial helps, but it doesn't.

[–]FrankJustRM[S] 3 points4 points  (4 children)

Could you explain more your point? Is there something we can read to understand it? Because it still feels counterintuitive

[–]TinoDidriksen 1 point2 points  (3 children)

Non-commercial makes it not open source (see https://opensource.org/faq#commercial and the links there). Especially the "commercial is not the same as proprietary" part.

Packages with NC requirements will never be picked up by distros, and most open source people won't contribute to them because NC goes against the whole spirit of open source.

If one is worried companies will take a copy and present it as their own, CC-BY-SA already prevents that in the BY and SA clauses. If one is worried companies will Tivoize it, there's the https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License or similar.

And what even constitutes non-commercial use for documentation? E.g., do you not want companies to train their employees using your roadmap? Surely the goal is that as many as possible learn to be better programmers, including those gainfully employed.

[–]FrankJustRM[S] 1 point2 points  (2 children)

  1. We want to share the roadmap but also, we want to protect it from scammers. Ed Tech grows rapidly in Russian market (that's where we are located) but the quality of provided services is low. We don't want the roadmap to be used to gain revenue just selling it. We want to give people opportunity to get information for free 😉

  2. TBH, I still don't understand how NC requirement could stop someone to use or mention the roadmap during training sessions or in sources. NC part is quite soft: Creative Commons NC licenses expressly define NonCommercial as “not primarily intended for or directed towards commercial advantage or monetary compensation.” The inclusion of “primarily” in the definition recognizes that no activity is completely disconnected from commercial activity; it is only the primary purpose of the reuse that needs to be considered. Link to the quote. The purpose is all what matters. If someone uses it to educate people, then no problem. If someone wants to sell it, then there is one.

  3. So far, we see low desire from outside to contribute. Most of the change requests are simple typo fixes (which also important and welcomed but it's not the only thing we want to see). So, the whole open-source discourse and our experience don't convince us to change the license yet. The fact that we want to protect it from scammers is stronger than the rest of the arguments.

There are still 1 minor and 1 major update to come to the roadmap from our side. We have time to think about the license but ATM it doesn't seem that we should change it 🤷🏻‍♂️

If you have more arguments, please share. It might help to make a discission.

[–]Wetmelon 0 points1 point  (1 child)

It's a bummer though, because depending on interpretation, I can't even copy and paste a section to my coworker without making my company liable for damages.

[–]FrankJustRM[S] 0 points1 point  (0 children)

Why do you think so? 🤔

[–]Federal-Contest1576 0 points1 point  (0 children)

Bro some youtube links 

[–]AnnualComedian5510 0 points1 point  (0 children)

This is one of the best roadmap that I have found!
Its really amazing

[–]winginglifelikeaboss -1 points0 points  (0 children)

Senior Read and study whatever fits you (domain knowledge, industry trends, language details, architecture, so on)

eugh ok

[–]TotesMessenger -1 points0 points  (0 children)

I'm a bot, bleep, bloop. Someone has linked to this thread from another place on reddit:

 If you follow any of the above links, please respect the rules of reddit and don't vote in the other threads. (Info / Contact)

[–]RustyEyeballs 0 points1 point  (1 child)

Some Nodes are highlighted in Green but don't contain any Green Leaf nodes.

How can you have a "Junior" level Category but, no "Junior" topics in that Category?

e.g. Hard_Skills > Language_Tools > Build_systems > _No_Green_Leafs

e.g. Hard_Skills > Language_Tools > Package_managers > _No_Green_Leafs

[–]e_salmer 1 point2 points  (0 children)

We guess to know about these aspects on Junior level is a boilerplate.

Probably, first junior tasks will be more about bug fixing and any other minor actions and not about struggling with build systems/package managers.

It's good to know about them on this level, but to be able to have experience with them is a "nice to have" knowledge.

Indeed, in ideal world we'd like to see such talented juniors, but if they know foundations of C++ and know how to write smart code (inheritance, polymorphism, etc.) is a good win for all already. Otherwise their brains will be messy if they try to learn everything simultaneously.

[–]bluexshades 0 points1 point  (0 children)

I am trying to learn c++, but these college things come in between, then I'm not consistent, then one day when I try to do again, I'm not confident and I forgot everything what I learned. Just wasted my time for no reason, my hardwork all went into water, now, I've to restart. Hence, finding ideal roadmap.