While it is true that I tend to take a more C/C++-centric view than some of the other forum participants, I genuinely fail to understand the appeal of certain languages. I mean no genuine disrespect -- I call them McProgrammer languages in jest. I say again: I genuinely do not understand what is so inherently better about them.
As I said in the other thread, Turing complete languages are functionally equivalent. Therefore, we must judge them based on other criteria, e.g., ease of programming, level of abstraction, etc. That's fine -- and I'm interested to hear what others think of 'higher level' languages.
Contrast that with what others think about libraries, APIs, and frameworks. Sure, a lot of the newest and best are language-specific. Thats an artifact of where those libraries/APIs/frameworks come from.
I entirely understand how languages that are much higher languages than C/C++ are more productive. Python, Ruby, etc., put amazing power into very few lines of code -- as part of the language. What I don't understand is how slightly higher languages are perceived as more productive languages. From my meager understanding of them (a tiny bit of Java, no C# except debugging one application to get it to compile), the nicest features seem to come from libraries -- not inherent parts of the language.
... which leads to my comment about garbage collection. That is an inherent part of the language. Its swell, too. But is that the difference? I've simply never been bothered by free() and delete. I actually found it a lot more reassuring when I switched from Java to C, to actually know what the heck was going on.
Lastly, addressing the cross-platform appeal, I tend to agree with the pessimistic side of that argument. The idea is great, but the reality of differing versions of the runtime or VMM, inconsistent optimizations across targets, etc., starts to make the cross-platform argument lose its luster.
What's optional in C++ or requires a bunch of imported libraries may be part of the language in Java. Raising the lowest common denominator of programming capabilities is needed to take it from a few whiz bang programmers to an engineering field where manpower overcomes intimacy with the code.
Besides, it's ultimately all about the libraries anyway. High quality libraries are better than what most people could do on their own, and ideally those should be the highly optimized, performance critical sections of the code. If you're doing something that can't build on those existing libraries, then maybe C or C++ is the right choice for you.
However, I'm basically an embedded programmer (at this point in time) where space is critical, so C and assembly are just about the only languages used. Java and C++ makes an appearance in the apps that interface with the hardware though, as does Python. But even if the embedded hardware was more capable, I don't think our choice of language would change.
But really, most programmers are going to be "mcprogrammers" no matter what, and the environment/organizational structure should adapt to take advantage of that. Put the smart guys on frameworks and backend stuff, and leave the "I'm an app developer, I use app libraries to make complex programs in 20 lines of code" to the mcprogrammers.