Although, the more I learn (And I realize I don't know a thing) the more I think that programming shouldn't be mixed with learning a complex language, as c++ is. It's a hazardous task and, being a relatively new science, there's many different opinions of the way to go, the implementations of solutions to different problems.
This is essentially correct. And why, despite lots of people derping and screaming that oh I'm wrong, I stick to the assertion that Python or even C# are significantly simpler, pedagogically superior languages.
btw, So far, college is dissapointing in that it doesn't strongly suggest us to give problems real thought (diagram, notes) before coding.
How can they? They don't have enough time and it's just for a grade anyway. It's your own projects where you will learn really valuable stuff.
--
If it's hard to do in C++, it probably a bad design.
Trivially cross-platform code--if you need a platform-specific #define (yes, even just one) you already failed. Nobody will credibly argue that this is a bad design.
Inversion of control. It can be done, but it's ugly and it sucks.
Interfaces; MI doesn't have the same behavior.
Reliable performant memory management; nobody does it well.
Debugging threaded applications. I'm reasonably sure threading isn't "bad design."
Reflection; nigh-impossible in C++ and most definitely not a bad design.
C++ has its place. General-purpose programming is not really it, and hasn't been for a long time. Large-scale programming hasn't been it since we realized we could actually write and use better tools. It
greatly encourages stupid, wrong, and bad behaviors, and while top-notch programmers can avoid them, 99% of people using C++ are not top-notch programmers and aren't even properly using the libraries written by top-notch programmers.
I don't often agree with Joel Spolsky, but he says something along the lines of this: you'll write a program in C++ in 40 hours. The next guy will write it in Python (or C#) and do it in 25 and it'll run 80% as fast (or closer to 95%, with .NET or Java). The operations cases where 60% more hours are worth 20% more performance are very few and far between.