If a young person asked me today to recommend a language to learn, unless they had expressed an intent to get into one of a few specialized areas there's no way I would recommend C++. It was a great language in its time, but from my perspective the evolutionary trends in the industry are clear: higher level managed languages like Java, C#, Python, and Ruby are the future, with scripting languages for glue and the various display frameworks sitting on top. If you really want to learn a low level unmanaged language then at least there's some good reasons to learn Objective-C (which is just C, anyway).
Unless you're doing game development, systems development, hardcore engineering or scientific programming, embedded systems, etc., C++ doesn't have that many applications anymore. I absolutely adored the language when it was my daily tool twenty years ago, but I don't go back to it anymore unless I really have to. A recent example was some XMPP stuff, but those examples are getting rarer as time passes.
I'd contend things are going BACK to native code from 20+ years ago (C/C++). With the highest level scripting languages accompanying it as both glue and used where they can be.
The rise of mobile means that if a 16KB chip can be used instead of a 32KB, and your skills can make that happen in a low level language, you're going to make a big impact on the $bottom line$. It's true that hardware is overpowered in PCs, but not every device is, and profits will always come into play. While embedded is not the job for everyone, it's one of the reasons for the return of C(++) in recent years.
Not that native code is limited to embedded programming.
There's Google's NativeClient for Chrome, Golang (compiles to native code, no VM), MS jumped on C++11 pretty quickly. Checkout MS's 'GoingNative' series
http://channel9.msdn.com/Shows/C9-GoingNative.
Or this post 15 hours ago.
http://channel9.msdn.com/posts/C-and-Beyond-2012-Panel-Convincing-your-Colleagues
I'm curious why MS is promoting anything called "C++ and beyond, convincing your colleagues"?? Didn't we just GET DONE convincing our colleagues to jump on the .Net bandwagon?
And it's true Java/C# will continue to dominate the boring, sludge that is the corporate market (due to inertia), I prefer to go as high level as possible, to maximize programmer time. Higher up the food chain is Ruby and Python (personally, my money is on Python). Not to mention, I'm not too keen on corporate sponsored tech from Oracle (build a successful business on Java and get sued like Google did) and MS (really, no one needs examples here).
Typically, you ever have a asinine amount of processing power and memory, or you have far too little. That's the way it seems to be going. You either have a server or local machine with 4+ cores and 8GB+ of ram (on the lowend), or you're developing for an iPad.
That's why I recommend an interpreted language + low level.
Versus the former trend of some virtual machine that's been ported everywhere. With Python you have a widely ported interpreter, and if you know C or C++ you have native code at your disposal.
OR, better yet IMHO, if you use
Python- you have Python and Cython. Python where you can, C(ython) where you need it. Pretty much my preferred solution. And we'll never get rid of native code nor very high level code until something is widely adopted that is similar to Golang (best of both worlds). I don't like things like the JVM, people are hot on Scala, Clojure and other JVM based languages. I'm hot on native code, and would hop on the Golang bandwagon before Scala anyday.
Regarding Objective C, it does have a garbage collector, for OSX, but not for iOS (back to our, far too little resources on mobile meme I mentioned before).
For vendor-locked code, ObjC is the winner over all other OS-specific code (pretty much the only other competitor for that grand title is C# on .Net). While I would also endorse ObjectiveC, I'm not sure it's not more the flavor of the decade (which is fine, if you like making money like most of us). C++ is universal, never went away, and like C might not ever go away as a 1st class citizen (aren't Windows7 drivers still written in C?). Java and C# will continue to lose relevance outside of the corporate world, if they haven't already.