Buub wrote:Just don't start from a C perspective. That will put you at a disadvantage if you try to hang onto the C-ness of C++ while trying to learn the object-oriented paradigms. Better to just start with C++ or with Java or something similar.
From an OO design perspective and a cleanliness/stylistic perspective, I totally agree. I mean, there's little uglier than half-breed C++ using stdio and no real OO structure. However, from another perspective, I think knowing C gives you an advantage in understanding why certain things are the way they are -- like the difference between objects allocated on the stack and on the heap, which is not an issue in any other OO languages students are likely to use (or refs versus pointers, or language strings versus STL strings, or issues associated with manual storage management, etc.).
Really this goes to the core of why I think C++ is not a very good language for learning programming. Ugliness caused by the fact that it had this hard design constraint of strong compatibility with C always pokes through and shatters the otherwise higher-level veneer. IMO, you have this ugly choice: come from C and they understand the low-level stuff that makes C++ somewhat quirky, but like you said, maybe they are hobbled by hanging on to a very procedural mindset and not embracing the higher-level C++ functionality. Come from Java or Smalltalk and they do the OO stuff well, but then they get smacked in the face by weird gotcha issues that are a byproduct of the fact that C++ is layered on C without really hiding it.