I was wrong, reflecting on the .NET design choices
Java and C# are seen as &quot;old news&quot; by some here on HN but there&#x27;s a trove of software engineering wisdom in there.  It was a huge boon for Microsoft to be able to learn from Sun&#x27;s mistakes when they were designing a language that, on paper, is basically the same thing.  C#, Java, and Go are all &quot;wonderfully boring&quot; languages which is a divisive topic, but they&#x27;re all very good at being boring languages.<p>It&#x27;s not just language features that made C# an improvement over Java, either.  CIL is a fair bit more elegant than JVM bytecode.  JVM bytecode has type-specific operations to speed up bytecode interpreters, which turns out to be irrelevant since nobody cares about bytecode performance these days.