A friend of mine says, "C is the answer." Not C++. C. He's brilliant. He's the guy teaching the multiple PhDs at the premiere government technology think-tank about programming. I have a lot of respect for him. He's got more programming talent in his thumbnail than I'll ever have.
But... He's a freak. A brilliant freak. But a freak. Very few people are that good.
There are even freaks out there that love assembler.
Then... There are the rest of us. The ones that are good, but not gifted. Most programmers.
And then... There is the reality that at the end of the day, empty plates suck, big dinners rock, and C doesn't put food on the plate for most people.
I've got other friends that have been doing C/C++ for years, and when they discovered .NET, it was a revelation for them. They love it. They can get more done easier and faster.
Now, I'm going to get into some radical stuff and likely piss some people off. i.e. Nothing surprising.
Perhaps a few people might remember HTML, as in HTML 1.0 all the way up to 4.01. It was fault tolerant. It enabled the Internet because it wasn't impossible to use. SGML is a beast. A nasty beast. Completely unsuitable for humans. HTML on the other hand has been wonderful.
Now, if you're a purist, you should likely be frowning on that dirty, nasty, sloppy HTML, and tout a much more robust and refined language like SGML. Ahem... Houston, we have a problem...
The reality is that it's usually pretty silly to look down on most languages. Here's a good example - PHP. Now, if you look at PHP, you have multiple methods that do the exact same thing. That is, when given the same input, the methods return the same output. This is bad. Very bad. Now, if you believed that, you have a problem because you probably don't understand PHP or C# or some other languages very well, or probably more correctly, you're confusing frameworks and libraries for the language itself. Those redundant PHP methods come in different modules and libraries. It's not a problem with the core PHP language. In the same way, frowning on C# is rather silly. Even if you hate .NET, which is NOT C#. The C# language is just a language. If someone wanted to, they could write a compiler that compiled C# to native code. You can use C directly from some command line shells. That doesn't mean that C is an interpreted language.
When it comes to JIT, well, it's a price that you pay. But seriously... Is startup time all THAT important? If a program takes 5 seconds or 15 seconds, so what? Is it annoying? Sure. Is it a deal breaker? Certainly not.
But what do you get in return?
Productivity.
Managed code.
Both of those are big deals. Very big deals. Managed code is simply the way of the future. With software projects becoming larger and larger, managed code offers, well... who cares. It's not really all that interesting.
What IS interesting is productivity. When a programmer can get done the same task in half the time as he would with other tools, this is good. It makes software development more profitable, which makes more software products viable, which puts more choices out there for consumers. It also makes possible projects that otherwise would not be profitable due to productivity issues. This makes niche software viable in areas that would otherwise go ignored.
All this is good for us as consumers.
As for .NET software out there, there's a LOT. Magic the Gathering Online is a .NET application. There are plenty of them out there in the consumer world, and not just the line-of-business application and server world.
There are times when C, C++, C# or whatever language you want to name just isn't appropriate. Not all languages are suited to all tasks. F#, Haskel, Erlang and other functional languages are very good at mathematics. Can you do the same things with C? Sure. Would you want to? Maybe and maybe not. It's all case by case.
C# is a great general programming language that really works well for a lot of things. But, it's a lot like chocolate ice cream - there are people out there that really like strawberry a lot more. That doesn't make strawberry or chocolate bad or good. It just makes them different.
As for Mono, well, again, it has a time and a place. And yes, there is software out there for consumers done in Mono.
The problem there is that unless you SEE the .NET framework (or Mono) installed, there's no good way to just tell if it's a .NET/Mono program or not. And a lot of them simply invisibly install with no indication that they are .NET/Mono. Why would they? Do you care? I certainly don't. When I use a program, I couldn't care less what language it is done in. Well, except for Objective-C because it's evil sent from the Devil and only total douchebags use it. Errr... Well, that might not be true, but it just felt good to say it anyways~!
I suppose we techies just love our holy wars!