I think you are underestimating the importance of syntax. Not only does it define the concrete building blocks of the language, it is also the first thing newcomers have to learn in order to actually use the language (which -in extension to my original post- is also why learning C# in advance to learning C++ would contribute to a better starting point).
Opening the door is the first thing you have to learn in order to actually drive a car. Does that make it important in the grand scheme of things, or just temporally prior to everything else?
That said, I know from my own experience that it's sometimes difficult to view a programming language (or the entire concept of programming for that matter) through the eyes of a newcomer like the OP. For example, try thinking about the difference between two calling conventions like fastcall and stdcall. This is pretty straightforward, right? Well, now imagine that you have a person utterly new to programming in front of you and try explaining it to him/her while keeping in mind that every single time you use a word or topic that he/she would not know as a newcomer (instruction pointer, register, parameter, memory address, stack, binary number ...) you would have to elaborate on this as well. I think this would be a good exercise for you as it would probably make you realize just how much knowledge you take for granted when you have been programming for several years.
If you're trying to explain the technical details of low-level calling conventions to a newbie programmer, you're a bad teacher. A good teacher would hide the details behind abstractions suitable to the level of understanding of the individual(s) in question, not delve into irrelevant trivia that is far beyond what a programmer at that level should need to care about.
I'm also curious about how much you actually
know about me. You're making a lot of highly presumptuous and frankly condescending remarks (first about my breadth of experience, and now my ability to think like a beginner) with seemingly no basis whatsoever. I'm sorry if I struck a nerve by having the gall to disagree with you, but seriously, I'd appreciate it if you quit treating me like a whiny child just because I hold a differing opinion.
What are these really important differences from a newcomer's perspective?
Linguistic semantics. Undefined behavior. Memory management. Exception safety. Common idioms and techniques for solving problems. There are any number of areas in which someone well-versed in Language Foo can arrive at C++ and have a lot of dangerous habits that don't work in the realm of C++. I'd go so far as to suggest that anyone who actually knows C++ to a reasonable level should have no problem finding problem areas that could trip up someone who is accustomed to other languages and their ways of programming.
I think you can pick any two imperative languages (excluding C++) and the differences between them will be less severe than the difference between any given language and C++.
Well, in addition to curly braces and semicolons I just counted 44 operators in the C++ programming language. Out of these, 39 (88.64%) have the same meaning in Java and the remaining 5 of them are all related to pointers/memory access and does thus not exist in Java. In addition to that, all of the most basic keywords for conditional statements and general control flow (if, else, switch, return, case, for, while, continue, break, do ...) along with the names for primitive data types (char, short, int, long, float, double ...), and the keywords for exception handling (try, catch, throw) have essentially the same meaning in Java.
So they have similar syntax. Which I already expressly said. Your point?
There is a reason I mention all this. First of all, I hope you will agree that C++ (originally called "C With Classes" by the way) belongs to the C family.
I thoroughly disagree.
I question how much serious software you've written in idiomatic C and idiomatic C++ if you think they are even remotely the same language family anymore. Yes, you can write many things in C++ which are legal C, but so what?
a = 1 + 3;
Quick! What language is that?
It easily could be one of over a dozen - ranging from very low-level compiled native languages to highly interpreted scripting languages. Just because you can use the same squiggles in one program in one language and then use them again in a different program in a different language does not mean the languages have anything substantial in common.
I don't know if you are familiar with the scripting technology called Lua, but this library is written in what the developers call "Clean C" which means it can be build with both C and C++ compilers. I am pretty sure you wouldn't be able to do this had they not had a very tight connection between them.
Allow me to introduce you to the concept of the
multilingual Quine. Google around for more of them, they're really quite cool.
Spend an afternoon dismantling a couple of these - preferably ones that involve three or four languages. Hell, see if you can write a simple one of your own. And then come tell me that syntax has
anything to do with how idiomatic code is written in different languages.
Now, as my little 'research' concluded Java (and presumably C# as well) obviously inherits much of its syntax from C++ which is why I place them in the same family, although I agree that compared to C++ the relation between Java/C# and C is more like the one between a son and his grandfather.
That's again akin to saying that Volkswagen Beetles and Fuji Apples are in the same family because they can be found in the similar colors. You're ascribing
exceedingly too much importance to the squiggles.
Nevertheless, this relation is based on the syntax. From a different and more historical perspective (specifically how machine code stored on punch-cards evolved to assembly language and later on to high level languages) I totally agree that both Java and C# belong in an utterly different family since they in contrast to C and C++ are interpreted languages.
Neither Java nor C# is interpreted in the canonical sense of the term. Both are, by design, run on virtual machines, with options to compile to native code in certain circumstances.