Reputation: 685
Alright, so I just took an introductory class into Computer Science and the school's language choice was Java (I have basic knowledge of concepts like polymorphism, encapsulation, etc..). I want to learn C++ then C (I hear that one should learn C++ first then go to C), and was wondering if C# is a nice transitional language because of the language similarities between Java and C#. So will learning C# first help me get a better understanding of C++ later?
I appreciate any help. Thank you.
Upvotes: 2
Views: 1139
Reputation: 39109
I don't think there is any language which gives a smooth transition to C++, except maybe D.
Concepts almost unique to C++ and D:
I don't like that many programmers reduce the comparison of C++ or C to C# to "you can have pointers in C#, too", because that does really not value the real differences.
Upvotes: 0
Reputation: 10225
If you are primarily interested in learning C++ do not learn C# because while on the surface they look very similar, in practice they are quite, quite different.
I highly recommend learning a programming language that does not use a managed memory system. The reason is because when you deal with such a language you are forced to learn the intricacies of memory management yourself. You can't rely on a garbage collector for anything really because it is up to you when objects/structs live or die.
C is a very small language and probably faster to learn than C++ but you may pick up bad habits from C if you ultimately want to use and learn a modern object oriented language. Learning C first is not a requirement.
My ultimate recommendation is go straight to C++ and get a feel for it.
Upvotes: 4
Reputation: 39520
Just learn C. Don't bother with "transitions"; if your goal is to learn C, just jump directly to it. Java shares enough syntax with C to be close enough that you don't need to worry about C++; you'd just get sidetracked with C++ things. C is important enough to learn on its own, without trying to "soften the blow".
Upvotes: 2
Reputation: 9213
Learn C first and foremost to get a feeling of dealing with unmanaged memory. Then apply what you have learned about object oriented concept to that unmanaged world with C++. Introduce yourself into differences of C++ like virtual methods, multiple inheritance and so on.
Read books about best practices. Learning C++ alone doesnt make you a C++ developer instantly. It is a federation of languages, you better have to know how to use that language.
Upvotes: 3
Reputation: 18933
Always learn in the order things were invented, not other way around.
EDIT: The advise to first learn C++ then C is pretty insane... I mean C++ is a superset of C, once you've learned C++ there's nothing to be learned in C except what it lacks comparing to C++. It's easier to make sense of why things were added as language evolved rather than guess why weren't C++ features implemented in C.
Upvotes: -1
Reputation: 41838
Java is object-oriented, C++ can be object-oriented, and C# is mostly OOP, but that is the main similarity.
C# has changed a great deal from Java so unless you look at C# for .NET 1.1 you will be learning a language that is very different from Java, and if your goal is C then you will be moving away from that.
C is a structured language, so the mindset is different than the other three, as you no longer have objects, and you have to worry about the memory collection yourself, no garbage collection.
Pointers was the hardest part of C for me to learn, once I understand that C was easy.
Once you know C, and if you already know Java, then C++ will have less to learn.
Upvotes: 0
Reputation: 138982
I feel that the easiest transition from Java to C and C++ is to first start with C.
Get a feel for pointers and not managed memory.
Then, once you get a feel for the hard stuff in C and C++, tack on objects and the STL with C++.
That is how I learned, and it was a very easy transition for me.
Upvotes: 5
Reputation: 40346
Doubtful. C# is not significantly more C++-like than Java. It does support pointers in unsafe
code, but beyond that I can't think of any reason it would make an especially good bridge from Java to C++. Also that is a feature I suspect more likely to be used by developers coming from the other direction. If you have other reasons for learning C# I say go for it, but for the purposes of transitioning more easily to C++, I'd say skip it.
Upvotes: 6
Reputation: 4314
If you already know Java, C# won't teach you much more about C++ than you already know.
Upvotes: 3