3 ms·
I had years of Java experience when I joined MS and started writing C#. I found the tooling to be generally ickier, and was surprised by a few gaps in the ecosy
by cmckn 5y ago
I had years of Java experience when I joined MS and started writing C#. I found the tooling to be generally ickier, and was surprised by a few gaps in the ecosystem. For example, there is nothing (official) comparable to javadoc for C#. Documentation is compiled into XML that is consumed by IDE's, but there is no generic, human-navigable documentation artifact. C# has a dizzying number of keywords that obscure perfectly-fine object-oriented expressions. In general, I found the language to have messier abstractions and a far less-discoverable stdlib compared to Java. Visual Studio is non-negotiable for many C# projects, and I found it to be as bloated as any MS desktop app, not incredibly stable, and I swear I installed a multi-gigabyte update every time I opened it. NuGet is serviceable, but I was surprised at how inelegant dependency management was, even inside the company. Finally, it's an aesthetic thing for me -- Java feels unixy, and C# is Microsoft through-and-through.
edit: one more qualm, the Mockito equivalent for C#, NSubstitute, cannot mock a concrete class, only an interface. This meant that every C# project I encountered was littered with pointless interfaces that had a single implementation, that only existed because of NSubstitute usage in the testing. This seemed to devolve into C# devs writing an interface for damn-near everything out of habit. I'm talking about writing an interface with getters and setters for a POC#O. I still get nauseous thinking about it.
edit: turns out I have a lot to complain about on this Monday! I pray for anyone living under the tyranny of Stylecop rules, which will fail your build if you put a public static field below a private static one, but for some god-forsaken reason cannot actually fix the problem for you.
- GiorgioG 5y ago> edit: one more qualm, the Mockito equivalent for C#, NSubstitute, cannot mock a concrete class, only an interface. I've never heard of NSubstitute (that doesn't mean it's bad), but most places I've worked at typically use Moq (https://github.com/moq/moq4 https://github.com/moq/moq4) which does support interfaces and classes.
- cmckn 5y agoInteresting, I never ran across this at MS. The more you know! Thanks.