Debates like this always crack me up because you have, like, IT people talking about how C sucks and programmers are lame, and then you have software dev. people talking about how C sucks and, but occasionally it's useful, but really we should use Java, and then you have old-timers talking about how "back in my day, we programmed with 0s and 1s, so I love C" and then you have tech geek/snobs talking about how anyone who doesn't use Emacs is lame, regardless of what they program in, and then you have....
And most of the time, each group's representative has no clue the other groups exist, or, at best, will make some cursory nod to them -- solely in order to look "enlightened" -- and then go on acting like they don't know they exist ("Well, I'm sure
somebody needs explicit memory control, but these days....").
A CHALLENGER APPEARS!
No really...allow me to enter a discussion I know little about and care about even less, because it provides a welcome respite from trying to decipher arcane C++ syntax (while we're on the subject, go here
http://forums.anandtech.com/showthread.php?p=29954908&posted=1#post29954908 and help me sort through templates, macro expansion, and a bunch of other stuff I "learned" 12 years ago but don't remember).
I'm an academic.
(And yes, I can hear you groaning now)
Not only am I an academic, I work in the HPC world. So, yeah, you can guess where I'm going to toss my hat here.
I program in Fortran, occasionally. And not the friendly kind; the "OMFG YOU DIDN'T PUT THAT IN THE RIGHT COLUMN I'M GOING TO KILL YOUR FIRSTBORN" kind.
In my world, RAM is the devil. If you can't find what you're looking for in the cache, you already lost. Now, obviously my world has nothing to do with Windows or database management, it has nothing to do with MVC design, it has nothing to do with x86 assembly and it has nothing to do with programming a virtual girlfriend in Python.
So, frankly, as far as I'm concerned, you're ALL crazy.
But really...the high performance computing world doesn't even know what C# is, and thinks Java is something Al Gore invented between inventing the Internet and global warming.
Personally, however, I'm all for abstraction. Hell, I once had to program a lambda calculus interpreter in ML. Ever do that? If you haven't, here's a reasonable facsimile: Take a sledgehammer, and whack yourself upside the head with it. When you awake from your coma, 2 months later, you will have accomplished approximately as much as someone who's programming a lambda calculus interpreter in ML.
The reality [for me and my universe] is that any sort of language that doesn't allow for a highly optimized compiler (a HA! His true colors shine!) isn't really interesting or worth worrying about. So regardless of whatever syntax you have, if you can't get your point across enough to the compiler so it can do its strange and wonderful voodoo, then what you're doing must not be all that important, and you could program it with Napier's bones and it'll probably run okay. Which isn't a
bad thing. There's nothing wrong -- in fact, there are plenty of very right things -- with code that can be quickly written, modified and distributed/maintained, even if it can't be highly optimized.
Anyway, this short version of all of this is what I'm sure people say every time this "debate" comes up: [Certain] people need speed. Speed requires a compiler that's smarter than you are. If your language makes you talk dumb, your compiler can't understand you, and you don't stand a chance.
Sometimes this is okay, and sometimes it's not, it's a simple as that.