Microsoft, I think it’s time we broke up.
In the “The Visual Studio Documentary” C# designer Anders Hejlsberg talks about simplicity and productivity; he talks about how he C# designed C# specifically to simply C++ and eliminate entire classes of bugs that C++ developers spend inordinate amounts of time solving. He talks specifically about how “C# is a great language because it makes you very productive”, and how developer productivity is paramount to the .NET ecosystem. It’s a pragmatic developer’s dream.
When we look at the history of .NET it’s always about solving problems and making the developer more productive:
- C# 1.0 – the basic language
- C# 2.0 – Generics (done right – not just casting like in Java), yield return
- C# 3.0 – LINQ, WPF, WCF, WF
- C# 4.0 – Task Parallel Library, Dynamic programming
- C# 4.5 – Asynchronous programming
In that same interview Anders goes on to say “If we stop then we become irrelevant. We need to build better tools… Make programmers more productive, raise the abstraction level.” In my opinion the additions to C# are leaving other languages behind – far behind. Features such as the new async keyword make programming so much easier! The easier these technical hurdles are to overcome the more the developer can focus on the business task at hand.
In a TechCrunch YouTube video about Azure I Muglia says: “Our real goal is to build an application platform that makes developers more productive than anything else on the planet. That makes it easier to build applications.” I want to like Microsoft and their technologies; they’re really great developer technologies.
But then there’s the silent killings.
Speaking of the desktop, how about WPF? A brilliant coup for designing beautiful desktop application interfaces; I’ve built two desktop applications with it, including my research software and my soon to be released financial planning tool. It was a steep learning curve but I invested the time and then nothing was impossible! Custom controls, beautiful GUIs, easy data binding with complete separation of view from business logic. It was wonderful! Programming nirvana!
And then, nothing.
Your WPF and Windows Forms site redirects to MSDN. You moved the amazing Scott Gutherie to Azure. WPF? Silverlight? The desktop? Dead.
It’s like you’ve forgotten the desktop in your rush to the tablet.
Scientific researchers don’t need mobile – they’re still using 10-year-old hardware. Financial advisers all own laptops, and like using a keyboard. I know that doesn’t make you money now, but I like supporting science, and I like helping people with their financial planning, and I was buying all of your development tools!
What about XNA? No announcement, no communication like “hey, this isn’t working for us anymore; it’s me not you”. Just a slow silent death as you quietly breakup the team.
Have I wasted years of effort with easily abandoned Microsoft technologies? I loved LightSwitch too, but I bet – I guarantee – it will be dead in 3 years.
You said “Move your WPF applications to Windows 8 and WinRT”!! (Actually, you didn’t say anything about WPF, but this transition was implied.) But that seems like another lie. It’s like when you suggested moving to Silverlight and then killed it a few years later!
What about all my existing clients that are still using older computers with Windows XP and Windows 7? I’m not as rich as you, and can’t afford to be so fickle; I don’t want to just drop my existing clients, or tell them to buy the latest Microsoft fad.
I want to get excited about Windows 8, but I feel like I would just be letting you hurt me all over again. I don’t want to port my applications to yet another platform. Why should I let you keep on hurting me? What happens when Windows 8 doesn’t do very well? Will you silently abandon WinRT and disband the development team without telling anybody? Why should I keep letting you silently kill projects I depend upon with no official outside communication? What’s the point? Is WPF supported? Sure. Improved and loved? No.
You know what? Java hasn’t evolved very much in recent years. It doesn’t have sexy features like LINQ, or asynchronous primitives, or well-implemented generics, or co-routines, or true value types, or decent delegates, or lamda expressions or built-in dynamic support (the JVM has it, but not the Java language) etc. At a 2001 Java One conference I heard the Java elite actively planning on keeping Java development more complex to keep out the VB developers! They didn’t want Java to be easy to use.
But you know what Java does have? Stability. Openness, Lots of communication. Tools I used years ago are still being supported and improved. And recently, the usability and simplicity issue is starting to be addressed. Java is in it for the long-term.
You’re married to your technology choices
The .NET ecosystems is sexy but unreliable, untrustworthy, and doesn’t communicate well. The Java ecosystem is plain, slightly more difficult to work with, but trustworthy, dependable and communicative.
If you’re building a million loc application, which one would you want to be married to for years to come?
PS. Xamarin and Mono
PS. Mono and Xamarin seem to be doing .NET right, with all the benefits of the .NET and C# platform, as well as being dependable, even in the face of dramatic adversity. They are doing an excellent job of open communication, and seem to be the official path for XNA with MonoGame and are actively maintaining it. Additionally, they are getting support from Microsoft – their latest Evolve 2013 conference received funding from the Microsoft Azure and Visual Studio teams.
It’s interesting, but it feels a little like breaking up with the sexy older sister to date the younger more reliable one. What happens to Xamarin if/when Microsoft stops innovating with .NET? Xamarin is a MUCH smaller company than Microsoft, Oracle or IBM – what happens if Xamarin goes under? I don’t know.
Xamarin seems like a great choice for small business development, but it doesn’t seem like the right choice for big enterprises looking for long-term stability and support.