* Visual Studio is the best IDE, bar none. It's a pleasure to use and Microsoft keeps it up to date so it's usually bug free for normal use. I don't even know what its serious competitors are. Eclipse? VIM? Forgive me for not knowing. :)
* C# is the best OO programming language (if you don't need the raw speed of C++ or, I guess, Rust). Java is a disappointing mess controlled by, yes, Oracle. Python and other dynamically typed languages are fine for scripting, but not for developing complex professional software.
* F# is the best functional programming language for getting stuff done. In fact, it's the best language for getting stuff done, period. Haskell is amazing for its mathematical purity, and I've learned so much about FP and category theory from the Haskell community, but F# gives you immediate access to the zillions of packages created for the .NET ecosystem and is totally compatible with C#. You can also use F# for imperative OO programming when you need to (which is almost never).
* SQL Server is the best RDBMS. Oracle is painful. The open source databases (PostgreSQL, MySQL, etc.) have come a long way, but still don't have SQL Server's combination of power and ease of use. NoSQL databases are interesting, but seriously lacking in important features. I've yet to come across a use case where I would actually want to use one. (Special demerit to MongoDB for using JSON as a query language. Good lord.)
* Windows is fine. It's not Unix/Linux, but it lacks for nothing.
If I had the time to investigate other ecosystems, I'd like to pick up Rust and Haskell. I'm afraid that Python and JavaScript will eat the entire world, before then, though. :)
All of the above is massively IMHO, obviously.
I don’t know how bug-free VS is now, but VS 2005 and 2008 were buggy in problematic ways. Support was friendly, but the bugs didn’t get fixed quickly. IntelliType (for C++) was nifty bug extremely buggy. Switching to emacs was a major step back in usability, but it was enormously faster and it tended to just work.
C# has a top notch compiler. Sadly, MS’s C++ compiler was, and mostly still is, pretty bad.
Getting off of Windows was a big win. Managing a Linux machine is much nicer, and, when something doesn’t work, you have a better chance of figuring out why.
I have no experience with SQL Server. MySQL and PostgreSQL both sucked back then.
If we were starting from scratch, Rust would be a credible contender.
That said, the number of commercial applications developed in Haskell is very small, because, I think, it doesn't integrate as well into the larger ecosystems around it. It seems like it's a beautiful island all by itself.
Hopefully, FP will take over the world soon and Haskell and F# will both be at the top of the charts! :)
Given trends, I don't expect to see any exponential growth though.
Along with the branding confusion, the formally very approachable and discoverable MSDN documentation for the class library has become a near useless clusterfuck. They've deprecated made.microsoft.com/library/ (at least for .Net) but don't mention it on the site!
I agree that it's confusing at first, but when you step back and look at why Microsoft went down this path, it starts to make a lot of sense.
When .NET was launched in 2002, it was a closed-source, Windows only development framework.
Microsoft was a very different company back then, and Windows was its gravy train. If you were a developer inside the Windows ecosystem, you were showered with (closed-source) love. If you were outside? Well, fuck you, Microsoft will crush you. Everything was oriented towards getting retail/enterprise consumers to buy Windows (and Office etc).
The 180 degree flip to embrace open source is a very recent development. Microsoft realized that desktop OS's were less and less relevant commercially, and that the future was in cloud services.
I haven't looked at the figures, but I assume it's a lot more lucrative to lock in tens of thousands of dollars per month in cloud subscription/support fees than selling Windows direct to consumers.
So with this reorientation, Microsoft needs a strategy to capture the cloud services market (and keep in mind that this is 5-10 years after AWS has been running the shop).
The solution? Open source .NET to accelerate its adoption and entice developers towards Azure.
First, Microsoft won't care if you use their implementation of .NET or Mono - as long as you're using it on Azure, you're fine. Hence .NET Standard - literally, an open-source standard that anyone can code against, and know that their stuff will just run, no matter which implementation is used under the hood.
Second, Microsoft then release their own implementation of this standard - .NET Core.
Third, we come to .NET Framework. For most entrants to the ecosystem, you can consider this to be legacy. This is the evolution of the original (2002) closed-source approach to .NET, and is only sticking around due to Microsoft's long-term commitment to its software releases.
Again, I agree that none of this is clear when you're new to .NET. It makes a lot more sense when you realize the naming evolved from Microsoft shoehorning a legacy platform into a fundamentally new, open-source/SaaS subscription strategy.