Hi all, I'm a professional C++ developer. I work on a commercial 3D animation package. I also like to code in Python and Lua which we've used in various projects in combination with C++.
My original passion before I started working on commercial projects was in studying a wide variety of computer languages (everything from Prolog to LISP to Java) and trying to really get used to idiomatic ways to use the languages. I don't believe in the idea that a generic software engineer can just use any language without taking a great deal of time to study idiomatic use of that particular language. Otherwise we often find lowest common denominator designs which are devoid of all the expressiveness and power of that particular language.
I think the bane of all designs in any language is monolithism, whether it's in the form of monolithic hierarchies, classes, or any kind of public interface. Some of the developers I've worked with just have a habit of creating those kinds of designs which tend to grow and grow and grow with no end in sight, accumulating more and more data and functionality while at the same time becoming more restrictive, inefficient, and unsafe rather than more complete, efficient, and safe. Often the best designs come from reductions rather than additions.
I like to give indirect answers to questions sometimes. It seems the indirectness might actually more directly help those asking. If someone is having trouble with recursion, for example, I'd recommend they learn a debugger first and foremost.
C++ is such a difficult language with so many concepts to learn: everything from RAII to dealing with a mix of value and reference semantics, various memory models to choose from, generic algorithms and iterators, etc. Yet I still think it's a very powerful language since it's one of the few that can allow us to get very abstract without making big sacrifices (if any) in efficiency.