I actually don’t want to flame a language. Quite the reverse, I want to give credit to the Microsoft C# team – something I rarely do.
I have been a Java developer since the introduction of Applets in 1995 when you wrote code in Notepad and executed in a local web page. I’ve watched it evolve on both the server and the desktop. (Does anybody still code Swing applications?) I was happy with the features they did not bring across from C++. For example, they avoided multiple inheritances and operator overloading. The former would have been a maintenance nightmare, the latter might have led to code obfuscation forcing you to examine the source of class to decide what multiplication actually ‘meant’.
C# was developed to compete with Java when Sun Microsystems used the courts to prevent Microsoft from applying their own spin to the Java feature set. The syntax of both languages evolved quite similarly until Oracle bought Sun and Java progress stagnated. Oracle has smartened up over the last five years or so. The Java 8 release was quite substantial.
But Microsoft has been moving faster. C# has automatic properties and indexing operators. My favourite is the yield operator which defines a for each operation with just a couple lines of code in a class method in contrast with the Java implementation which forces you to create two new classes to achieve the same goal. Well done, Microsoft.
What are the dynamics here? In my opinion, we are seeing Microsoft trying hard to win back the core of PC application developers it lost to web development when browsers became mainstream. Oracle seems to be playing a different game here as it tries to please the large organizations who pay for maintenance contracts on their huge legacy Java apps.
I remember the days when Sun was the disrupter who snapped at the ankles of the Microsoft juggernaut. Sigh. Tempus Fugit.