Disclaimer: I'm writing these words just few days before the official release of Visual Studio 2017 RTM & about 2 months before the release of .NET Core 2.0. Hence you may find this post a bit pre-mature, but actually timing is on purpose - I'd like to make a stone-cold summary before all the marketing hype & another wave of rising hopes ...
TL;DR .NET is ... lignifying. Not dying, retreating or drying out - simply lignifying. It's very solid & stout if you want to build upon it, but don't expect trunk of wood to behave like an evergreen stalk - fast growing, frequently releasing new sprouts or blossoming in a way that makes whole garden jealous.
Let's start with commonly known facts:
Mixed effect of OSS outburst, rise of DevOps, commoditization of cloud computing, dawn of container technologies & (at last but not least) supremacy of new, mobile platforms (that Microsoft has no share in) have forced Microsoft to drastically change the course of .NET Ecosystem development - to make it cross-platform, open its source code (& whole ecosystem), detach it from its Windows origin (& dependencies), etc.
This is how .NET Core was born.
Where is .NET Core now?
It was indisputably a step made in a good direction, but ... over two years have passed since the announcement of .NET Core & over half a year since the official release of .NET Core 1.0 ... It means that for over two years Microsoft's (& partners', & whoever of the community who they've managed to involve) .NET teams has been working pretty much solely on re-creating the platform, effectively freezing the development of new features for the existing .NET version (4.x).
Two years is a whole era in modern software development, so it's a huge price Microsoft had to pay. Was it worth it? Where is .NET Core right now? Is it at least in the place .NET 4.x was these 2 years ago?
Well, if I had to describe the current state of .NET Core with a single noun, I'd say: "a mess".
Yes, unfortunately .NET Core today is still a half-baked, chaotic mess that may be a pain to deal with even for seasoned professionals: there were just too many withdrawn concepts, too many last-minute (never-ending RCs, RC updates ...) changes, possible lack of common (shared) vision & clearly not enough manpower to push things through (my bet - due to lack of community support):
- team was struggling even with how it should be distributed & upgraded (locally installed dnx & dnvm or per-project, via NuGet packages - like in dotnet) - I don't know how much of outdated old crap I still have on my PC as it's clearly unable to clean itself when updating ...
- .NET Core versioning is the closest approximation of the hell I know - tools are inconsistent with SDK & framework itself, versioning scheme is unreadable - I'm supposed to have 1.1 installed, but all the versions in my SDK are "1.0.0-preview2-someshit" which is OK according to Microsoft ... .NET Standard is clearly aimed to fix that, but for now it has just escalated the muddle
- there's (still!) a huge chaos regarding famous json/csproj issue - if I try (up-to-date!) VS2015 to create a new project I get something totally different than from official (!) yo generator (generator-aspnet): of course they are NOT compatible & majority of described ways to convert (on the web, e.g. dotnet migrate) do not work at all ...
- there are tons of materials on .NET Core the web, but >90% of them are outdated, thus useless - deprecated docs happen for other technologies as well, but not to such degree! not even to a fraction of such degree!
- you can fool yourselves with occasional hype on Twitter or number of commits in .NET Core repo, but the truth is that community did NOT get hooked up - I can't recall any new interesting OSS projects for .NET (Core or not), popularity of existing ones didn't skyrocket either ...
- feature-wise .NET Core & ASP.NET Core (which is pretty much the only part of ecosystem that was ported to degree that provides some usability ...) are far behind "traditional" .NET; check carefully the remarks about unimplemented key features in release notes & road-maps (e.g. here) - fortunately Microsoft seems very honest about these
Yes, I know that some platforms are developed with a principle "go fast & break things" in mind (like Elm, Angular & many others), but in .NET Core case it's more like:
"Bounce like crazy & puke furiously everywhere around you."
I'm not saying .NET Core is a hopeless fail, it just has to get there & the journey takes much more than expected. So much more that it has quite likely lost it momentum. For now, the only .NET mature-enough to use is 4.x. Yes, the one that hasn't moved even an inch since ASP.NET MVC 5 ...
Ecosystem around
Obviously it's not only about the platform itself, but also about the tools that are an important part of an ecosystem.
- none of the investments in Roslyn seem to pay off - AFAIK not a single vendor (of the existing ones) of .NET developer tools have decided to use it extensively & I don't know any new one that got lured into this market by Roslyn goodness ...
- Visual Studio is not a magnet for developers anymore - VS2017 has been delayed by a year & there's no significant feature set that would justify that; other languages & platforms have at least comparable IDEs, especially if you take under consideration the overall trend to go for the lightweight editors like Emacs, Vim, Atom, Sublime or even (surprisingly successful) VSCode
- 3-4 years ago C# was by far the best (most productive, coherent, etc.) OOP language - today its advantage has already been obliterated by the unexpected rise of functional paradigm; F#? After all these years it's still a niche that has never took off.
I'm afraid all of the above means that .NET is slowly crawling into "maintenance mode". It's well hardened, proven & rock-solid (pre-.NET Core!) & it may serve as a platform for building remarkable applications (especially back-end ones) for many, many years. But it has lost (rather irreversibly) its attractiveness & good vibe of top-tier powerful toolbox. It neither has any distinguisher - unique feature / property / ability that could attract developers from other platforms ...
Now it seems unable to compete not only with Java (or rather - JVM in general), but also new wave of daring platforms of the future - like Swift, Golang, Node.js, even ridiculed Ruby & its Rails. In practical terms it means that all the potential game-changers (aka platform-sellers or industry disruptors, like future Hadoops, Dockers, Rails, etc.) will most likely appear on these other platforms ...
Frankly, I think that Microsoft has understood that some time ago, hence huge shift of its attention towards x-platform cloud services within Azure (some of them VERY interesting). They have befriended all the major "players" on all infrastructure tiers (many of them: former sworn "enemies"), including Linux, Java, even Android & iOS (via Xamarin) - all that to make a viable offer for existing communities of the most successful OSes/platforms/languages as clearly Microsoft is not able to build a community around any of its own ones ...
So if you're .NET professional, my advice is: there's no reason to panic as .NET is not going anywhere soon, BUT ... if you're not doing that already, considering hedging your .NET "investment" by learning at least one another, alternative platform/language - just in case ...
Pic: “old-tree-wallpaper” by Wendy is licensed under CC BY 2.0