Is there a possibility that someone who has learned all the key aspects of C++ and knows the fundamentals of the language very well, will learn other languages (such as, Python, Perl, Java) faster and easier?
closed as primarily opinion-based by Blrfl, GlenH7♦, amon, Bart van Ingen Schenau, Jimmy Hoffa Jan 8 '15 at 19:19
Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.
In General Terms
Profound knowledge of any programming language is likely to help you with picking up other languages quicker. That is so partially because programming is a way of thinking more than it is learning syntax. Most programming practices would be true of most other programming languages. That is why people say that you always learn the second programming language quicker than the first.
In Specific Terms
C++ is a language which allows for a much greater 'control' than other languages. This can be both good and bad. For example a real gun is better than a air gun when you go in the forest (because you can actually shoot something down with it), but it is also more dangerous for you and those around you. C++ has concepts such as memory management, which you don't need to worry about in most other languages. Having a firm grasp of these concepts however is far from pointless even when working with auto memory management languages. You can also perform bitwise operations and go much lower down to the 'metal' with a language like C++. Even a basic understanding in those areas can help you a lot as a programmer in any language.
I personally learned Java first for nearly 3 years before learning C++, and I should say that I sort of regret it (uni course...). This made learning C++ (i'm still learning - far from 'profound' knowledge :D) not as straightforward as i'd like it. If I had done it the other way around I would say that it would have been much easier for me. Especially when you know WHY something is done in a specific way, and not just rest assured on the auto-magicness of the language. If I am allowed to give an opinion I would suggest: C (for basic and universal programming paradigms) -> C++ (for basic understanding of OOP along with memory management) -> Then you can go into any 'real' OOP language with a good foundation or you can continue with more advanced topics in C++, all depending on what you're planning on doing.
Unfortunately, no. This is actually a big problem when teaching C++ in programming classes, especially beginner-level classes: you can learn programming principles, or you can learn the C++ language, but the C++ language has too many pitfalls and stupid little gotchas to learn both effectively within the scope of a one-semester class!
There are many things that were tried in C++ and eventually became idiomatic in the language through sheer inertia, that pretty much every other language since has looked at and rejected because it turned out to be a huge mistake. The major ones are C++'s Templates and C++'s object model (objects as value types is never a good thing, because it breaks Liskov substitution and thous OOP itself.)
So if you get a deep knowledge of C++ first, and then you want to learn other programming languages, there's going to be a whole lot of harmful and counterproductive crud you'll have to unlearn in order to be effective at other programming languages.
No. Knowing C++ well will make it easier to learn other languages which are like C++. But that would be boring. Why would you want to know two languages which are the same? That doesn't buy you anything. (Note that this isn't specific to C++. It applies to any language. Compare with natural languages: learning Italian will not make it easier to learn other languages. It will make it easier to learn Spanish, French or Portuguese, and learning three of those will make it easier to learn the fourth, but even learning all Romance languages will not help you one bit learning Finnish, Chinese, Hindi, Hebrew, Arabic, Pashtu, Greek, etc.)
Programming languages implement paradigms. Peter van Roy has collected a poster of the 34 principal programming paradigms.
Paradigms, in turn, are composed of concepts. That poster lists about 18 concepts.
All paradigms (or at least the ones in the poster) are composed from those concepts. All languages implement one or more paradigms composed of those concepts. So, if you learn those concepts, you will (in some sense) learn every programming language at once.
There are of course still lots of language-specific quirks (syntax among them). Also, that poster completely ignores typing, and there is of course a significant difference between a System F<:ω-style type system, a Scala-style type system, or a dynamic duck-typed type system, let alone a dependent type system à la Idris, Agda, Coq, Guru, or ATS.
I would say that knowing any programming language deeply will help with learning others, at least other languages in the same family. For example, C++ knowledge won't help much with LISP or Haskell, but for object oriented procedural languages, it will. My approach has been to try and learn a language from each of the different families (procedural, functional, object oriented, etc.) of languages well, then that knowledge can carry over into other languages in that family. On the other hand, a deep knowledge of APL won't help with anything else...
I'm going to take a different interpretation here.
C++ is a good language for learning about memory and data structures, since it forces you to think carefully about concepts like object ownership and lifespan. And learning about memory and data structures is one of the essential parts of any software engineering curriculum.
But you have to be learning about data structures. If you just "learn C++," you won't really gain very much, and it may slow down the process of learning other languages in the short run.
When I was in college, Data Structures was a required freshman-level course, taken after CS1 (which at least half the class had placed out of). It was hard. The format of the course was basically "Here's a data structure you've never seen before [e.g. a leftist heap]. Implement it in C++ in a week and make your output match our expected output exactly, byte-for-byte, so we can grade it automatically." Then, next week you'd get a new data structure and a new assignment. I probably learned more in that one course than I did in all of my other courses combined.
That's the kind of learning you need to be doing for C++ to be valuable.
Every language you learn makes the next one easier to learn, especially within the same paradigm. They borrow from each other heavily, and after a while you get to the point where a new language looks like merely a collection of features from other languages, with a few unique twists.
I don't think C++ is better or worse than any other language in that regard. It is one of the more verbose languages I know, and makes some things hard that are easy in most other languages, but that doesn't necessarily translate into making the next language easier to learn. It does generally make the next language feel easier to use, though. There's a difference.
No. A profound knowledge of C, or of the subset of C++ that is "basically C", will help when learning other languages, at least when picturing what their implementations have to be doing. A profound knowledge of C++, on the other hand, will mostly be information that is confusing or irrelevant when learning other languages; if you learn C++'s object orientation at more than a surface level, for example, when you move on to Perl/Python/Ruby you'll spend more time un-learning what you know than using it, since objects in those languages are implemented in a completely different way than in C++. The same thing is true to a greater or lesser extent for most other languages, and for other language features (for example, C++ templates and Haskell polymorphism are basically the same feature, with, again, completely different implementations). So deep knowledge of C++ is mostly going to be C++-specific.