Among the many reactions that follow the release of a new ThoughtWorks Tech Radar, there are usually a handful of people that ask why a particular technology or tool is not represented. There are two main reasons for something not to appear on the radar: either ThoughtWorks hasn’t used it enough to form an opinion of it, or we haven’t used it recently. The radar is a snapshot of our opinion on technologies that we are using in a period of time (usually six months or so). So if we aren’t using it, we can’t give our two cents about it.
>> "Does that mean that ThoughtWorks hasn’t been using .NET?"
For example, when the last radar was published in January 2015, there were a couple of comments highlighting the relative lack of blips related to .NET and other Microsoft technologies. Does that mean that ThoughtWorks hasn’t been using .NET?
I have been a C# developer for much of my career, as have many other ThoughtWorkers. I pay a lot of attention to what goes on in the .NET world, and what appears on the radar. The Tech Radar has highlighted a number of interesting .NET technologies in the past, including Roslyn, Nancy, and Xamarin, among others. But these appearances do feel less common than those from, for example, Java-based technologies; and they might not feel commensurate with the weight of the .NET framework in the world of software. The .NET Framework is a big and popular platform, and the standard answers of “we haven’t encountered that on a project” or “we didn’t have room for that” don’t feel sufficient. Is there a more satisfying explanation?
.NET vs Java
The simplest explanation is that the .NET platform is not nearly as popular or ubiquitous as the Java platform. That’s a hard statement for a C# developer like me to swallow, because I know that .NET is superior to Java in just about every way ;-)
Joking aside, the numbers do bear it out. The Tiobe index of programming languages, OpenHub (formerly Ohloh), and GitHub statistics all point to the reality that Java is roughly 3 to 4 times as popular as .NET (the last two primarily focus on open source projects, which may seem skewed; but that focus is relevant, as we will discuss later). There is a similar trend in ThoughtWorks projects; we encounter Java at our clients significantly more often than we encounter .NET. It makes sense then that the number of interesting developments that we encounter coming from the Java world would be significantly higher than those from the .NET world, based solely on size.
>> "[We] often eschew tools designed for comfort and ease of use in favor of tools designed for power and control. "
But there is another factor to consider. Why is Java so much more popular than .NET? There may be a number of reasons, but one of them is that Java runs everywhere; C# (until now) has only run on Windows. This has a direct impact on Java’s popularity; many companies will choose it over C# simply because it doesn’t lock them in to the Windows ecosystem*. But this freedom also has an indirect impact on the innovation that happens in the Java community. People that like to build cool new things are often also the kind of people that like to hack on their development environment. They often eschew tools designed for comfort and ease of use in favor of tools designed for power and control. And as such they tend to gravitate towards Linux (and Mac since OS X) and away from Windows (this is true for many ThoughtWorkers as well).
* .NET can be used on non-Windows environments by using Mono, the open source implementation of the .NET Framework started by Ximian and now largely driven by Xamarin. However, Mono has never achieved broad usage and still remains primarily a niche framework.
Java open source
In a similar vein, the history of Java - from the platform itself to the major libraries built on top of it - has been one of open source and community-driven solutions to common needs. Contrast this with .NET, whose history has primarily been closed-source, with Microsoft-driven solutions to common needs. This probably does the most to explain why many ThoughtWorkers will choose Java before .NET. ThoughtWorkers have always loved open source; one of our pillars (or core values) is to “champion software excellence and revolutionize the IT industry”, and it is very difficult to do that from behind closed source. ThoughtWorkers also love a breadth of solutions built for a myriad of scenarios, because that is what we encounter in our wide diversity of projects. We want to pick the solution that fits our particular scenario best. Solutions in .NET have tended to come from Microsoft in the form of one-size-fits-all, leaving less opportunity to find the best fit for our needs.
.NET open source
But this is where the story gets interesting, because while Java has historically had the lead over .NET in community-driven open source, Microsoft has been showing a long-term trend towards reversing that advantage. Thanks in large part to key influencers in the ASP.NET team, the .NET framework has been progressively more open ever since ASP.NET MVC was “source opened” in 2009. This has culminated in the significant announcements in late 2014 that .NET Core would be fully open source. Today, the majority of next-generation development for the .NET platform is happening on GitHub (including public issues and pull requests) and taking community contributions. This is a stunning reversal from the standard operating procedure that earned Microsoft the moniker “The Evil Empire,” in part for its hostility to the open source world. On top of that, .NET Core will be fully cross-platform, running on Linux and Mac with full support from Microsoft. That’s not just an empty promise: you can see the steps already being taken towards full cross-platform implementations in the GitHub repositories of both CoreCLR and CoreFX.
The Future of .NET
As a C# developer, I am very excited about these developments. There a lot of new opportunities to use what I have always believed is an awesome technology. But even more importantly, I am hopeful that the availability of .NET on new platforms and in new configurations will drive a new wave of innovation. Now is the time for creative problem solvers to take a fresh look at .NET and invest in its future. I am looking forward to the new languages, frameworks, tools, and techniques that will be developed on the .NET framework in the coming years, and the appearance of those innovations on the ThoughtWorks Tech Radar as ThoughtWorkers adopt them to build the next generation of .NET solutions for our clients.
Sign up to receive the latest edition of P2 Magazine.