I have been getting a similar feeling lately, this is my take on the subject.

Sorry I’m late

When there was a (re)new(ed) hype around MVC, there was no answer from .NET. Interested to try this approach anyway, I played with django. Being inexperienced at programming and coming from the Windows world, it felt very alien to me and I didn’t get comfortable with it so I stuck with ASP .NET Web Forms until ASP.NET MVC was released.

When ORM’s were becoming the norm, LINQ to SQL and Entity Framework were not ready for prime time yet. Being inexperienced at programming and working in what felt like an app store curated by Microsoft where we only used what came in the box, betting on NHibernate which was available looked too risky. Remember, this was before nuget, there really wasn’t this culture of just including third party libraries, unless you absolutely had to (e.g. an OCR library). So I just came late to the ORM game.

Sorry I missed you

When we needed a sturdy caching solution, redis seemed like a perfect match. But running .NET, all our machines ran Windows so adding a Linux machine to host redis might be a small step for a proof of concept, but it was a giant leap for our existing skillset to operate in a production environment. So we tried to help ourselves out with Windows Server AppFabric’s Caching features instead.

Being stuck on IaaS environments, docker seemed like it could bring some opportunity to get more agility in firing up and tearing down applications. But since it doesn’t run on Windows yet and will only be supported from Windows Server 2016 as it looks, this won’t soon be an option for many existing systems. So I left containers for what they are at the moment.

Sorry my mistake

Silverlight promised a platform for rich Internet applications, which answered a lot your doubts whether to go desktop or web. We know how that ended.

Windows Phone promised a vibrant Marketplace, then Store for apps. There’s more life in an suburban dead end street on a Monday night.

And like Hanselman joked, Azure lost the cloud race to a book store 🙂

Fork in the learning curve

So technology seemed to be constantly evolving and improving while .NET played catch up. Maybe a bit hyperbolic and I’m not saying this is a bad thing by definition, because it depends what it wants to be, a reliable solution or a cutting edge playground or both.

But with .NET Core opening to the outside world and connecting with Linux and Mac, I felt like I finally could also be early to the party for a change.

But, for understandable reasons, I can’t transparently migrate from .NET 4.6 to .NET Core. Both technically and skillswise, there is an investment to be made. Sure you can run .NET Core on Linux, but you’ll obviously have to find your way around that OS then. Just following the simple getting started steps for Ubuntu, show I need to learn more about some core concepts before I can transfer this to a production environment in a reliable way.

So .NET Core’s opportunity, mostly feels like a fork in the road for me.
As a Windows developer, even trying out an early (ASP.NET 5) ASP.NET Core on Windows felt like playing with Nodes.js and Bash with its project.json and command line tools.
So If I’m going to learn some fundamental new things that can run on Linux, why not put that energy towards the things that are already out and stable on Linux/Mac. I can use my existing .NET skills for Windows platforms, and grow my skillset to other platforms.

Microsoft has been welcoming Linux anyway (Linux VM’s on Azure, SQL Server on Linux, Bash on Ubuntu on Windows). I guess trying to run .NET on Linux while loosing some existing tooling and libraries, feels stubborn, embracing what’s there feels more natural.

So that’s where I’m at, I uninstalled Windows 10 and installed Ubuntu on my home machine a couple of weeks ago. Setting it up and using it for pet projects, gives ample opportunity to learn more about finding my way around Linux. We’ll see where this goes, but becoming platform-ambidextrous in the long term would be a great plus.