I am a boxing fan. I enjoy ESPN Friday Night Fights not so much because of type of match-ups they make (they really are making bad ones lately), but in large part because of Teddy’s Atlas commentary. Teddy Atlas is good, old school, some would say dinosaur, boxing trainer. With Teddy they say, you get what you see, he is not pretending to be something he is not, love it or hate it. Good or bad.
One of the things he often talks about during fights is the need for a fighter to know his identify. Whether they are inside or outside fighter. Whether they use their natural given resources in most effective way, whether they work with them, or against them. Not knowing your identity makes you much less effective. If you have long hands you should be outside fighter, you need room to throw punches and you are much less effective inside in close range.
I believe that same applies to programming languages. They are “born” with certain identities. Once they start losing that identity they start slow and certain death. Soon they will be replaced with something that has clearly defined identity.
This is what is happening right now with C#. It is losing its identity. C# was created as strongly typed language and that is its core identity. Now, some big brains in Microsoft, with apparently nothing to do, are adding dynamic typing to C#. Why? I don’t know why, they probably have lot of very good sounding explanations for it, but what this actually marks is beginning of the end of C# as language. It will be replaced in couple of years, I can’t say whether it is 4 or 10, but it will be replaced with language that has its identity clearly defined. Not replaced in sense that we’ll just throw it away, languages don’t die like that, but replaced in sense that new development will move to something else. VB 5/6 was replaced that way with .NET and C#.
C# will get diluted with so much unnecessary language features that nobody will want or like to use it effectively. I don’t think we need all this LINQ, Lambda, var typing and least of all dynamic keyword… It’s just junk that gets added… How about some decent Data Access Layer? Or fixing font, line and image rendering in WPF? Or fixing VS.NET WPF designer? Or wrapping up IronRuby? Nah, adding dynamic, LINQ and var typing to C# is much more fun.
I already start seeing people using var and dynamic for everything. Every single thing. And they’ll force you to use it too, since they will develop frameworks that rely on these features so you must use them as well. Then, when things start blowing up, because dynamic typing is not really dynamic, but a compiler gimmick, people will start throwing language away. We’ll hear it is not readable anymore, or it is too complex to learn, or… You name it…
It is this loss of identity that is bothering me. C# is simply not created as dynamically typed language and adding dynamic typing will dilute its effectiveness, even if it is only perceived effectiveness. Its like fighter with short hands trying to fight outside fight… It will get knocked down by fighter that knows his identity.
Rob Conery on his blog has also some good points against this as well, but opposing voices have never stopped Microsoft in past so they will not this time either…
On the bright side, maybe this is how new and better things get born. We have to first destroy the good things we have today…