[quote name='Tachikoma' timestamp='1328678773' post='4910785']
In all honestly, I can only speak for myself here. The learning approach I mentioned earlier was very useful, particularly syntax part. When you have never written a line of code before, syntax is everything, and learning it is one of the first fundamental steps for understanding what you are looking at. And when you switch over to some other language with a familiar syntax, learning that will be also a hell of a lot easier. I probably would have struggled with C++ if it weren't for C.
And yet, you didn't have to learn
B in order to learn C. But yes, syntactically understanding one language will usually help in parsing and reading another language, and I have no doubt that your knowledge of C helped you when learning C++.
[/quote]
Actually I did learn B first (kinda, not very well), then moved to C, then to C++. The core of the language, the way you write simple code, etc, is the same in all cases. The expanded techniques such as replacing arrays with STL containers, avoiding raw pointers almost completely , etc etc etc. Those are just expansions of what B started out as. B was mostly a formalization of common assembly "patterns" in it's time, C pulled in high level concepts (at that time) and C++ is pulling in higher level concepts to this day. But the core of the language has remained fairly consistent with only minor changes/upgrades and differences.
Yes, learning C++ means learning C++ but you need to learn things with some form of basic to advanced patterning. If you don't know how to write a std::vector styled managed buffer and simply learn to use std::vector, you will miss a very basic "common" piece of coding that you really should know how to do within the language. (I.e. if they come from Python, Lua, Java, etc, pointers and memory management are going to be new to them.) Stl doesn't fit all uses, they should be able to do it manually when/if needed to customize things to needs.
I'll backstep just a bit, and say that learning C before C++ is just a manner to learn the core language (no it is NOT French versus English) instead of starting from day one relying on stl and related (boost, etc). What I mean is that if, as the original question mentioned, you know how to program in other languages, then the one and only goal of learning C before C++ is to re attune your standard everyday algorithm coding to the new core language. There is no "foreach" if you came from other languages (ignoring boost), you need to learn to deal with that, there is no "ToString" in most cases, get used to it, etc etc etc.. Those are simply two obvious examples, there are hundreds or thousands of things you should be able to do in ANY language without relying on libraries if the need arises, if you can't, you are a very limited programmer in that language.
Maybe this helps narrow down the "but why" further. Before I jump into any language I write "hello world", then I write a simple "sort algo" then etc etc. Usually it only takes a couple hours to go through that stuff. The idea is to get fundamentally comfortable with the new syntax, way to think in the language etc. But, for someone coming from another language I always suggest just C which removes all the class/template/library/etc stuff from consideration, just learn the core way to think/write code in the language.
Moving to C++ might be a couple hours for some folks and may be days for others. The "fundamental" thought process of C and C++ is much lower than many other languages, "if" you have a problem not solved by common libraries.