Nowadays, most C++ introductory courses begin by studying the procedural constructs of C language, following the imperative-first strategy described in CC2001 [7]. While this has been a successful approach in the near past, our experience shows that it does not lead to the development of skills to create a good C++ code. That’s why in recent years we’ve been teaching C++ to beginners in a totally different way – with avoidance of C-style strings and raw arrays; delayed introduction to pointers (just after references); polymorphism with references instead of pointers; smart pointers instead of raw pointers; early use of standard library features, and writing modern C++ from day one.