So, it free, it has full FOSS tooling. What's the problem?
With that said, I know a lot of devs who hate almost everything about MS that actually do like C#.
As someone who is coming from a very FOSS world and trying to learn C#, I have to counter that no, C# does not have a really good open source ecosystem. Mono works, MonoStudio is pretty decent, but it lacks all of Windows, and there isn't much to target that is not Windows if you are doing anything that is not a webapp.
Objective-C also has a pretty decent open source toolkit in GCC, but a toolkit that lacks Cocoa is like trying to eat dinner but forgetting the food. Mono is a great toolkit, but it's missing 80% of the libraries that makes C# an easy language to use. You've got your forks and spoons, but you've got nothing to eat.
Note that I'm not complaining against C#. I'm really liking the language and everything I can do when I'm in a Windows or Windows Phone environment. I'm arguing that C# is not as portable, in practice, as everyone continually claims.
Furthermore, much of the documentation assumes a Windows environment. Getting a development environment set up around Mono has been possible but challenging.
F# and Mono are neat, but .NET has a long way to go before it becomes as cross-platform as Java.
Mono is a great attempt at making the use of the languages acceptable to me, but unfortunately it is still a second class citizen. It works okay, I guess, but .NET was created from the ground up as Windows infrastructure.
The same could be said for Clojure on the JVM...it works great if you are using pure Clojure, but the moment you try to use Java libraries, all of a sudden everything becomes messy and loses its idiomatic nature and all the elegance that goes with it (like, for example, the pervasiveness of mutating methods in Java but the almost religious avoidance of mutability in Clojure).
Otherwise it's quite good for what it is, and my frustration with C# is entirely down to the ongoing failure of Unity Technologies to upgrade the version of Mono included with their game engine. It means I'm stuck with an old version of C# (notably without the dynamic type), watching as quite a few third-party libraries drop support for it.
public static String getFirstThree(String s) = s.SubString(3);
etc. But, the fact that it has LINQ, good lambda support, and some type inference make it a very good language over all.If you know about kinding, you probably understand that type system design really has to go hand-in-hand with language design. Introducing those kinds of breaking changes now is incredibly difficult, unfortunately.
As far as boilerplate goes, though, I can't promise anything but I can say that we hear you and this is something that could get attention in the near future.
Thanks to the rapid language iteration we have neat code features. Thanks to the rapid language iteration our large, long lived code bases now have language version "sediment layers".
Not about the language in particular but other reasons to dislike it. For some reason there is a big NIMS(Not Invented by MS) in the community. People use MS's shoddy add on libraries because they are from MS (Asp.net webforms, EF). The announce, wait 20 min, and kill cycle for some of MS's libraries.
Give me (not mono) C# on linux and my choice of webserver and I'll change teams.
* References are nullable by default (IIRC Hejlsberg himself would do this different if he could)
* Its C-derived brace-heavy syntax can make C# code a bit messy-looking and stretch out a bit vertically, especially with the community's preferred brace style
Yeah I think we all would.