Right now, enterprises are facing a confusing future: Microsoft’s technical guidance has lost its AAA rating (although it’s certain that sooner rather than later we’ll get a new road map from Microsoft) and the JVM world lacks a clear directional focus due in no small part to the complexities of Google, Android and the slowness with which Java has been evolving. Meanwhile, Apple has gone from virtual irrelevance in the enterprise market to owning the mobile devices in the C-suite, and it is making fantastic desktop-replacement laptops but locks you into an effectively proprietary language.
Now, I do have a dog in this fight: I work for Xamarin, which allows C# developers to write native cross-platform apps for both mobile and desktop operating systems. But I didn’t develop my analysis because I joined Xamarin; I joined Xamarin because of my analysis.
Second, there’s the type-system philosophy. I like dynamic type systems. I dream of an alternate world where Smalltalk (or at least Ruby) plays a major role in every enterprise’s codebase. But the industry has rejected that vision time and time again, at least for the very large majority of its internal code. There are good reasons to have compile-time type checking, and I think it’s foolish to think that the market has had some sudden unheralded change of heart.