Update 2018 Mar 15
How many years do I need to write for you to understand C# is not a strategic key programing language of Microsoft?
It is C++. cppWINRt is brutal and complete C++ win. Unapologetic, better, engineering driven.
I understand there are “new and exciting” developments in the world of C#. Xamarin, .NET core and a such. But that is not a strategic implementation. Not convinced? Just observe the wide (and wild) variety of platforms and languages Azure supports. C# is just one of many that Azure supports. It is not special or strategic as it once where.
It seems for Microsoft decision makers everything goes. As long as it does not need .NET CLR or (god forbid) JVM.
Update 2015 June 20
And here we are, 4 years down the line from the day, when this post was written. And people are by now talking openly. Not some random “haters” or “fanboys” but some pretty experienced and well informed people, with pretty convincing analytical information, on the demise of C#. All of which of course inevitably opens the key sensitive “touchy feely” question: is .NET going?
My opinion: .NET is already gone. It is now in public domain. If Windows would not be that important it would be in the public domain, too. .NET does not matter any more, it is on the GitHub now. Yes, I know, there are other “things” on the GitHub which do matter, for example Exchange EWS Rest API, but not the key parts if you look closely.
Yes I know, CLR is not in the public domain. It is important because it will have to run tons of legacy .NET code for years to come. Also some other (to be) key parts are “left out to hang out and dry” like Xamarin. There where huge plans, there was a lot of talk and a lot of stars in .NET Lemmings twinkly eyes about Xamarin. But that is all gone now … New Multi-Platform Office is nowhere near .NET or Xamarin or C# .. Yet another very sure sign of where they belong. “native” is all the rage now, C++11, Swift, Go, TypeScript.
Ah yes, I almost forgot, since you are already here, spare 10 more minutes and read this : https://goo.gl/yZhVmO
Original Article 2011 Feb 09
I really do not care much about Religions of Programming Languages. About their high priests and about their flock following them priests, like huge shoal of fish in magical unison movements. But. I do care about history. I like it to be remembered. Which always helps in finding and knowing the “truth”. So, if you are not interested in this thing called ‘truth’, please leave this post :)
Well then, you do like this thing called “truth” and perhaps you might happen to think in this post you will learn nothing and instead you might want to follow someone more important or relevant on this subject? That is also perfectly fine by me.
If I may suggest some authority, then how about for example, one Charles Petzold and his “.NET Book Zero”? This so called “godfather of Windows programming” has a Chapter: Why .NET?, which one hopes would tell us “Why indeed .NET, C# and all that?”. But no. Sadly this chapter is written as if under a wrong title. Few key years on key releases 1 on the beginning, and absolutely nothing on the subject, clearly stated in the chapter title: “Why .NET?”. Strange. OK, not to worry. I think I know the history of C#, and I will use the history to my advantage. Simply, I like to know: Why C#, indeed ?
Well, I think it all started with that pesky little JAVA thing, way back around 1995. Please do not misunderstand me. Not that I think, Java is very important and original programming language or even a new concept, no.It is simply that I am claiming here, that C# was “invented” as a Java clone.
Now, important forward to 1999. Bu then everybody and his cat, was an JAVA expert. Avalanche of thick books on the subject was in a constant flow. SUN JAVA community was in a full bloom of its youth. What else has happened in those halcyon days of JAVA?
In those days SUN successfully sued and won against Microsoft who adopted JAVA and made it part of the Windows. But. Good old M$FT was sincerely hoping to use JAVA for WIN32 programming, by introducing into JAVA it’s own JVM, COM extensions, WIN32 libraries etc. Sun was right to be upset and Sun has sued M$FT. And Sun has won the case and M$FT had to offer the same JAVA and JVM on Windows as any body else. On Windows or elsewhere.
Which of course MSFT choose not to do. But some replacement has to be found. And quickly too. And voila: C# and .NET and CLR were born! Complete M$FT original virtual machine, with original pseudo assembler and very well designed and original CLR2, P-code executables, etc. Sun (of course) could not sue against that, because both Java and .NET have been based largely on the same conceptual origin: UCSD Pascal.
This was yet another fatal and wrong and overly emotional move of one belligerent Mr Scot Mc Neally. Has he not sued M$FT, .NET would not be born. It is as simple as that. M$FT would proceed to use JAVA as a preferred language of it’s enterprise customers and would happily contribute to JAVA core classes and common cross platform core libraries. And JAVA (by now) would become a de-facto environment on this planet for delivering LOB applications. Just imagine that!
Back to reality and present year: 2011. C# is in its incarnation 4. By now it has been overloaded with massive amount of mechanisms, key words, paradigms and newly added design details. It has become abused by its author (who is that really?) and it has become not simple. C# is today over-engineered. C# is in widespread use just because it is imposed by M$FT. C# is not imposed by community.
As a result of this complexity, while one’s mind is “inside” C# language, it is very difficult for that mind to see simple solutions for anything. Believe me, I was there. Why? Simply because simple solutions in C# are forever obscured by language idioms and design, which are contradicting each other. It is dynamic and static, it is generic and has one single root Object in the same time, it claims to be also functional but it has no function pointers but delegates, it has LINQ which introduces SQL like sub-syntax, it depends on the sea of libraries, grown organically one on top of each other in last 10 years, etc, etc … All this “programming kakofonia” is in the same time obfuscated by many (paid or not paid) “evangelists” who are showing every day to the faithful flock, how easy and simple is everything, provided it is coded in C#?
That is how I remember C# was born and this is how I do use it today. Unwillingly and with effort.