So a relatively easy way to learn C++ is as an 'upgrade' to C, starting of with picking the parts of the language that help you the most:
* you start by already knowing C, but maybe not feeling super productive, using it as structs + functions
* you set up the C++ compiler (most modern version available), and just continue writing C
* you start using streams to print (because it can be more convenient than printf)
* you start using std::vector and std::string, arrays being one of the big pain points of C
* you start using `auto` and for-in loops
* you start using simple classes, without any inheritance. just structs with methods
* you start adding operators - so much fun!
* you start learning about references and const, and suddenly all your method arguments become `const T& v`
* you learn about not using pointers (as much on stack as possible), move semantics, shared/unique pointers. This means you'll also use more templates.
* you deepen your understanding of writing your move/copy constructors. Learn RIAA, and become a fan of `}`.
* you learn about constexpr and constexpr functions
* this is already a pretty happy subset of C++, and as you learn to use templates, you may at some point start writing one yourself. Same with lambdas - if you need them you learn them.
1. http://www.icce.rug.nl/edu/ 2. http://www.icce.rug.nl/documents/cplusplus/
i understand that what is usually considered good form is trying to completely forget about C features like pointers and arrays and use their STL counterparts like unique/shared_ptr, std::vector, std::array and iterators. this gets you a nice modern subset of the language that makes it relatively difficult to shoot yourself in the foot.
Perhaps part of my hangup is the expectation that you would teach the difference between, say, enum and enum class. There are good reasons to use enum, and I believe there always will be. There are good reasons to use pointers (in fact, one of the main reasons I use pointers is to point to the payload of a std::unique_ptr, and I use std::unique_ptr when I have an obvious owner, even if I might need other functions to access the payload while the owner is still around).
So I don't think that it's possible to ignore "the old ways" completely.
http://www.dcs.bbk.ac.uk/~roger/cpp/
Lots of value came from the lectures with roger. Sadly he has retired, it would have been nice to have them up on youtube.
Of course good code reviews and testing is a must to help people to get up to speed and stop shooting themselves in the foot :)
In my 5 years at Google, I've watched many developers start from scratch on our subset of modern C++. There doesn't seem to be a huge challenge with it.
https://google.github.io/styleguide/cppguide.html
It it is, I consider Google very lucky to have these who decided not to allow everything.