State of .NET in 2017

The year is coming to an end - time to look at the current state of one of my most beloved technologies: .NET.

In the recent years .NET has seen quite a dramatic shift. First, the .NET Compiler Platform ("Roslyn") was released. Not only was it fully backed into Visual Studio, it also went open-source (with full commitment from Microsoft) and spawned a lot of interesting technologies (e.g., OmniSharp - the C# language server that enables any editor with a powerful plugin system to become a full-fledged C# IDE). It turns out that this is only the beginning. .NET Core finally shipped and provided a new perspective on development with .NET (cloud first, cross-platform, even more optimized). Even though version 1.0 was kind of a disappointment (regarding the available platforms and given API surface), especially with version 2.0 the .NET team seemed to have hit the sweep spot.

Nonetheless, the state of .NET is not at all that good. While the technology perspective is finally "okay" (.NET Standard in version 2.0 seems to provide the right basis for 95% of .NET development, .NET Core is stable and offers an acceptable API surface to program against), the community just seems broken. While other communities (most especially trendy new eco-systems like Rust, Go, or Node.js) thrive towards open-source, the .NET community remains stale as we've seen in the past. As a contributor and maintainer to OSS projects that makes me quite sad.

There are other signs that .NET keeps on decaying. While the acquisition of Xamarin helped to believe that Microsoft is fully behind the cross-platform application development with languages like C# it also seemed to block the path and required velocity. Right now I would not recommend or at least suggest to develop cross-platform applications with C# / Xamarin to anyone. Instead, I would always recommend the web platform with React (going for React native). The momentum is definitely gone.

Another sign is the dedication to the wrong projects. While Microsoft tries desperately to help OSS with the Dotnet Foundation, the projects that are supported there (apart from the Microsoft official OSS projects) are sometimes really dubious. On the other side quite important OSS projects are not getting any support (or any answer at all from the foundation).

Finally, flagship projects like ASP.NET Core are a failure across the line. While the ideas behind ASP.NET Core are great, the execution is more than lacking. If I want a Node.js / Express-like development experience I would just use Express. What about performance and type-safety? Hell, that is why we have, e.g., Edge.js and TypeScript. TypeScript seems (at this point) to be more attractive than C# anyway.

This brings me to my last point: The direction that C# is taking also feels wrong. The problem with adding new features to a language is that it may make things ambiguous and spoil the current design. C# was one of the most elegant / cleanly designed languages out there. Even though the lambda syntax was already ambiguous it made sense and did not spoil the language. It enriched it. Likewise, async / await, which was kind of a killer feature. The Elvis operator and other C# 6 features have been neat additions. Now with C# 7 it seems that the C# team is desparately trying to add some features from F# / functional programming that just do not fit into the current philosophy. I love all these features, but they just provide no "this is C#" feeling to me. If I want functional programming I use F# (a language that, in my opinion, unfortunately, gets overlooked by Microsoft).

Bottom line: If Microsoft wants to stop .NET from decaying into "one of many" or "an exotic" eco-systems it needs to concentrate on its strengths again - not on its weaknesses. Also it needs to see which OSS projects would really be helpful and support these properly.

Created .

References

Sharing is caring!