I'm gonna get shot for this...but learning asm is what helped me the most. C++ and C are simply assembly language when it gets down to the nitty gritty.
Because of this I have strayed away from C++ at times because some of the assembly code it produces has an awful lot of calls. C++ is awesome but it can become quite tedious and confusing when you start inheriting from 50 other classes. Exaggeration but you get my point. I don't think in terms of C and C++ anymore but more in terms of what the end code is. There are things I can code in C than could just as easily be done in BASIC or in Java. In the end, it's all assembly. Even though assembly is not portable all of your C code whether on a mac or on an 8086 based system ends up as asm code. So if you code for a mac, my advice would be to study the mac architecture. Herein lies a root problem IMO. There are C programmers that are coding with little to no idea of what the code is doing in relation to the architecture of the CPU. Then they wonder why it is so dang slow or why it behaves the way it does. Business code its not so important and I can see the need for portability and all of that in that sector.
IMO the forefront of programming technology is in the entertainment sector or more appropriately.....games. You cant get away with crapola code for very long in a game before the whole thing comes crashing down....like a bad Windows session.
Look to this sector to come out with some of the biggest, baddest, fastest, slickest code and languages - if need be.
Kudos to those who say languages don't die. They don't. They are either re-vamped as new tools or polished up and used again. Languages are tools and the attitude that one is dead or not is like saying that flat head screwdrivers are useless because now we have phillips screwdrivers. So no assembly is not dead, Pascal is not dead, and heck even BASIC is not dead.