Should I change that shipwreck image? Perhaps. but I will not. And what about this somewhat “snarky” post title? Let it stay the same. And yes, the same goes for my “tone”. You have been warned :)
The world needs a lot of software and it needs it now. It is as simple as that.
Post-2020 the same world is very clear on the “clear and present danger” of the myriad of legacy systems; currently humming under national public health systems. There is a lot of legacy HIS, and everybody all of a sudden wants to replace them all ASAP.
And that, in turn, requires a lot of programmers producing modern, impeccable, fast, robust and resilient software. Alas. Finding a lot of programmers who can produce impeccable, fast, robust and resilient software and do it inside budget and time allocated, is actually not possible.
Ditto, that is why we have “LOB” programming languages, systems, platforms, testing people, business analysts. operational integrity, disaster recovery positions and all those things “expert” C or C++ programer could care about but in reality extremely rarely.
Thus COBOL, Java, Visual Basic, C# do exist to help produce the urgently needed LOB layers the world needs right now. Layers that serve a business need.
If you think CLARION, Visual Fox Pro, Oracle Forms, VB6, Delphi, and such, are by now just a legend, think again. That (unending) list is interesting. The Microsoft .NET implementations have gobbled up a large part of that universe, during the last 20 years of LOB developments. With notable exceptions where the Microsoft juggernaut has not been allowed in. Yet. Example. COBOL-based system for $160B pension fund is a political football.
The scene is set.
.NET Saga continues
.NET is 20+ years old technology. .NET 5 is now (2021 Q1) official. C#9 is official too. We are living on the upgoing part of this long .NET lifecycle sinusoid. Let’s spend some little time zooming on it.
C# has grown into over-engineered mush. In that respect, it can even compete with C++ std lib. The undisputed king of legacy pile-ups. Instead of tiring everybody with my prose, I will just copy-paste the sentence from that C#9 post, written by a notable member of the same team:
“..Writing a simple program in C# requires a remarkable amount of boilerplate code…”
That is a peculiar statement, after 20+ years of C# constant development. One might expect that to either never be the case or at least be rectified, perhaps 15 years ago.
On top of that C# “architects” are happily “inventing things as they go along”. Instead of removing, they are adding. What could possibly go wrong?
Python Ante Portas
We are witnessing a sudden (or planned?) and strong Microsoft Python “push”, with no one else but Guido van Rossum at the helm. And that also does not help the C# “case”. Not at all. I am also sure you will agree that is not going to born some future Iron Python.NET, strangely absent from each and every recent announcement. That might be much more prominent Python, residing on the Microsoft landscape.
.NET was (and is) a “footgun“, of epic proportions. But happily due to the heroic efforts of certain individuals after 20+ years of struggle, we have “only” three things to download. But, which one, nobody is sure. Although I am sure there is a lot of MVP‘s to prove me wrong.
There is a pretty good clarification attempt here. (Part one of “.NET Core 101”). But it bumps immediately into the “what is this” issue. And Scott confusingly mentions “Xamarin/Mono” which is not available on the previously mentioned official download page. As Scott says (cheerfully): “It can be a little confusing …”, just to proceed and announce .NET Core as a “standard”? Again: What could possibly go wrong? I do not envy those good people.
Controversially, I have decided to revisit the text below and do edits and addendums, with a “View 2021” pair of glasses, changing the original text in the process. Primarily because there were errors and tiresome redundant sentences. I do not like some parts of what I have written from 2011 to date and I have changed it, losing the original text in the process. Gasp? Just kidding. 2021 remarks are all in brackets and formated like so: (2021: … )
Update 2018 Mar 15
How many years do I need to write repeatedly, for you to understand C# is not a strategic key programing language at Microsoft? So which one is it, then?
That is C++. cppWINRt is a brutal and complete C++ windows API. Unapologetic, better, engineering-driven. (2021: Ok, by now, somewhat pushed to the side, I assume by C# marketing army. And the appearance of “Rust projection” is perhaps largely irrelevant, as one comment says: “There are approx 12 people on the planet interested in that who are in the same time proficient in Rust” ).
I understand there are “new and exciting” developments in the world of C#. Xamarin, .NET Core, and such. But that (.NET Core) is not a really strategic implementation. Not convinced? Just observe the wide (and wild) variety of platforms and languages Azure supports. .NET is just one of many. It is not as special or strategic as it once was. (2021: at approx 2001/2)
It seems for Azure decision-makers everything goes. (2021: As long as it is politically correct. Read No Apple anything)
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?
(2021: around that time, NODE.JS juggernaut was crushing everything in its path, thus strategists have decided “something has to be done”. .NET was given a “stay of execution” and today we have “.NET5”, “.NET Core” C#9 and the rest )
My opinion: .NET is already gone into the sunset. It is now in the public domain. If Windows would not be that important it would be in the public domain, too. .NET does not matter anymore, it is on GitHub now. Yes, I know, there are other “things” on GitHub which do matter, for example, Exchange EWS Rest API, but not the key parts if you look closely.
(2021: ok, ok, give me some kudos, after all, I have left my wrong prediction in here. But I am still claiming: if it would be important .NET will not be on a GitHub. )
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 and dry” like Xamarin. There were huge plans, there was a lot of talk and a lot of stars in .NET Lemming’s twinkly eyes looking towards Xamarin. But that is all gone now, Lemmings have jumped off the cliff. New Multi-Platform Office (2021: Architecture and Dev. Tool Chain) is nowhere near .NET or Xamarin or C#. Yet another very sure sign of where they belong. “native” is all the Microsft rage now: C++ and TypeScript (Electron).
(2021: yes you read that right: Even Office was in danger of being rewritten in C#, in those dark Longhorn days)
Ah yes, I almost forgot, since you are already here, spare 10 more minutes and read this: https://goo.gl/yZhVmO
(2021: “Justin” was very convincing but ultimately wrong. Interesting, many of his criticisms do not apply anymore. )
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. 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.
I would like to suggest some authority (that is not me), ok 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. Sadly this chapter is written as if under the 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 everybody knows, it all started with that pesky little JAVA thing, way back around 1995. Please do not misunderstand me. Not that I think, Java is a 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, please forward to 1999. By then everybody and his cat was a 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 on top of that, made it part of the Windows. Good old M$FT was sincerely hoping to use JAVA for WIN32 programming, by introducing into JAVA its 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 anybody else. On Windows or elsewhere.
Which of course MSFT choose not to do. There is no Java when you install windows. But some replacement had 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. Also, both Java and .NET have been (are) 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 its 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. (2021: C#9) By now it has been overloaded with a massive amount of mechanisms, keywords, paradigms and newly added design details. It has become abused by its author (there is one name, but 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 chosen or imposed by the community.
(2021: the same saga is going on all the way to this time)
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 at 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 … (2021: last 20+ years)
All this “programming cacophony” is at the same time obfuscated by many (paid or not paid) “evangelists” who are preaching 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.
(2021: true also today)