I swapped from Linux and the JVM to windows and c# 3 years ago and ran straight into a wall. While I thought it was a cultural thing, it's mostly a platform thing and that influence the culture. Its like developing whith a straitjacket and everywhere you turn there's a lockdown. APIs and frameworks feels not thought through and chunky. The language feels like an steroids addiction. It feels good and you feel the power and you get stronger and stronger, but suddenly weird things start happening and suddenly ugly things just pop out and you loose control. And then everything's a mess and you there's no way back.<p>There are some things which are nice but they clearly doesn't outweigh the downsides with the platform. It feels shiny and nice at first but if you know what you could do instead of having to deal with the "Microsoft-way TM" it's downright horrible. Don't get fooled by the "new shiny" part! :)
The language itself is fine. Lots of good FP concepts. The mentality of the wider .NET community is close-minded and insular, lots of NIH syndrome, architecture astronauts and enterprise frameworks (even at small companies), which I think is borne mostly out of its corporate heritage. There are exceptions (the f# community for one, and the odd nuget project) but in the large that has been my experience. Even coming back to .NET this year after a few years away, I find not much has changed (despite the recent OSS "renaissance")
Like it or not Microsoft isn't going anywhere soon and c# has had async and other "advannced" features for years now. It's more or less in par or exceeds Java. I think it's a good choice. Or hedge your bets and become a polyglot.
All languages and platforms have pluses and minuses. You can run C# on .NET Core in Linux in docker containers today too.<p>If you're starting out, you really need to diversify. My first job was a lot of sysadmin plus Java and C++ dev. 2nd was VB.NET (terrible). 3rd was a call center (also terrible but I'm glad I did it; makes you appreciate the work) and then a Java dev for two years.<p>Today I do a lot of Scala and Python. Diversity in your field is important. It's hard to get into positions where you don't have the experience, but when you do, you show on your CV you can learn, build and reverse engineer all kinds of things.
C# isnt a bad language but i would say that it colors your view of of the programming world and forces you to view it from a singular perspective... through the lens of microsoft...
In my limited experience, it seems that C# and Java are big in corporate environments and SMEs but not so much where startups are concerned<p>it's seen as a safe pair of hands not necessarily as something cool.