My answer is plain old C. You can write virtually any kind of program on any platform in C. C is a bit more cryptic than some languages. The close-brace "}" can close just about anything and everything, and you can't tell what without working back through the open braces that came before (not difficult if you indent wisely, and modern IDEs highlight matching braces for you).
C is vastly easier than C++, because C can do anything and everything with only:
- variables (including structure-type variables)
Since you do everything with so few mechanisms in C, you totally habituate those mechanisms in short order. At the start, if you haven't programmed in assembly-language first, habituating pointers will take a bit of time and effort. But this mechanism is so completely general, you can implement unlimited constructs and organizations with them. So once you've habituated these very few language mechanisms, plus allocation via malloc() and free() or equivalent, you can literally do anything without any new language mechanisms. You can, of course, create as many high-level mechanisms as you want in C, and where they make sense, go for it.
Once you start down the C++ road, forever it will control your destiny... with many, then dozens, then endless other constructs, all of which are supposed to make your life and programming easier, but unavoidably make your life and programming vastly more complex --- just to remember what everything is. Of course, if you have a great memory, and you program with C++ for hours every day (in a full-time job or equivalent), you can memorize and internalize quite a bit reasonably well.
Another problem with C++ is, the tendency towards fads, most of which are called and sold-as "standards", then later replaced by other "standards", then later replaced by other "standards", and so forth, ad-infinitum. If you want your programs to work in 5 years, 10 years, 15 years... program in C. If you don't mind if your programs are obsoleted in 5 years, and you have a great memory, and you love fads, and you love to adopt 23 external "standards"... then try to make them all work together in something resembling a coherent manner, then C++ is your perfect choice.
I know several brilliant people who program in C++. All they want to talk about with me is the latest fads for C++, and seemingly that's almost all they ever do. In contrast, I spend all my time focusing on what my applications need to accomplish, and the best way to accomplish it. I don't need to think about C (the language), because I can do anything in C, and "everything is the same" (meaning, I don't need new language features to implement new application features). Fact is, many if not most of my applications are highly object oriented in one way or other, and I have no problem whatsoever implementing that object orientation in C, in the way most suitable for each application.
BTW, I learned C++ first, then backed into C after being burned by C++ too many times. The transition was such a relief, it is almost impossible to describe. But prepare for most folks to look down on you, criticize you, call you neanderthal, and so forth. You'll win no popularity contents programming in C. And if you happen to write a world-class popular application in C, like Linux for instance, be prepared for everyone to accidentally forget to mention what language you wrote in.
Edited by maxgpgpu, 12 April 2013 - 07:27 PM.