
Let's stop bashing C# - rb229
https://www.codeaddiction.net/articles/51/lets-stop-bashing-c-sharp
======
patatino
I never heard anyone bashing about C# and I'm writing C# code for 10 years
now. There are just plenty of people favouring other languages which is fine.
If you're looking for people bashing about it you'll sure find some.. same
goes with basically everything.

~~~
rubber_duck
There's a small ammount of trolls that spam "M$" kind of arguments but they
are largely ignored from what I've seen.

On the flip side there's a lot of people who over-represent C# especially in
comparison with Java. I mean the language is very nice, better than Java no
doubt - but the platform and ecosystem is much less mature than JVM. Where is
the .NET equivalent of ZooKeeper, Hadoop etc. .NET can use those like any
other language but the fact of the matter is that Java was and is still the
choice on those kinds of projects and the ecosystem is much bigger. Even when
.NET gets something from those like Akka.NET, JGit it's usually a worse copy.
And JVM ecosystem is much more distributed, there's plenty of stuff going
around all over - Scala feels a lot more popular in the real world than F#,
Clojure feels like a similarly niche thing but is entirely community driven,
and the early results from Graal/Truffle were quite impressive, much better
than Microsoft did with the DLR before they left it off to community.

~~~
throwawaydbfif
Yes this 100%. Community ecosystem is a joke on C# compared to Java. Take for
example lucene. I just used version 3.03 in a C# project because the port
hasn't been updated in years. Version 6.x is the current one.

We also needed to use Redis in C# and the client is unstable. Nothing we can
do about it besides catch the exceptions and randomly reconnect when it
happens. Are we losing some data? Probably.

Even if the open source community embraces C# it will take 10 years before the
offerings are comparable to Java. And for what? C# is nearly identical to Java
in design and performance, it just has slightly prettier syntax

~~~
maxxxxx
I had the same with Lucene a few years ago. It's really frustrating to realize
that there is a ton of open source stuff out there but you can't use it
because you are on C#. Or you get something outdated or buggy.

I really wish MS did something to make Java/C# work together.

~~~
throwawaydbfif
It gets worse the more familiar you are with open source, because you know how
bad you're missing out.

All the guys that live in MS world swear they're not missing out on anything.
But these are the same guys that lived in the enterprise version of North
Korea until a few years ago.

~~~
maxxxxx
"enterprise version of North Korea "

I like that phrase. Unfortunately it describes my life :-(

------
jlawer
There is no reason to bash C#, but there is still reasons to be on the fence
about it.

The runtimes and libraries for non windows platforms are still behind, and are
quite new. Additionally while there has been efforts to grow the community and
get outside involvement, it is still obvious that Microsoft is the big player,
and without their involvement the community might shrink to a fraction of its
size.

Microsoft itself complicates matters as for some people it takes a lot to be
convinced that "new Microsoft" isn't just old Microsoft in sheeps clothing,
and its all a ploy to get people onto their platform so they can lock you in.
I have started to be convinced that microsoft has actually turned a leaf and
is actually working to build a community and genuinely will support other
platforms, but I am always going to be a little cautious... call it post
traumatic stress from the early 2000s.

Finally I don't see a reasons to rush to build in C#. It seems a perfectly
decent language, but without being experienced in the language is there a
problem domain (outside rich client windows apps) where the language is
significantly better then other choices?

I don't think C# should be bashed, but I also think it still needs to prove
itself to the non windows platform and open source developers.

~~~
hacker_9
Integrated Development Environment, Built in package manager, massive
_maintained_ ecosystem of libraries, fastest compiler in production (after
lisp languages), compiler as a service, full runtime reflection and emit
capabilities, _three_ GUI libraries + Designers built into the IDE, A full
blown MVC web backend toolset. There is more, but is this not enough? The
language isn't perfect, but the idea that it has to prove itself to anyone is
quite an arrogant stance to be honest.

~~~
jlawer
If I am going to have to support an application written in it to clients, then
damn straight the language needs to prove that it will be worth the
investment.

Many of the features you mentioned are not available for the .net core
version. The .net core version is not a standard install on client servers (it
is not shipping with RHEL/CENTOS) and is still very recent. Having supported
dozens of Java apps through the early versions, the last thing I want to do is
spend my time discovering esoteric runtime / os library version conflicts.

So yes, the language needs to prove itself that as a platform for delivering
Linux / Mac server apps that it is as boring and reliable as the rest of the
stack.

------
nawtacawp
If the author wants credibility about bashing C# perhaps they should not
generalize other languages within their argument. Can C# not stand on its own
merits? As someone who has been using Python for nesrly two decades --How is
the author defining 'hipster' languages?

~~~
sametmax
What's more, Python is usually quite appreciated in the .Net community. It's a
first class citizen on Azure, it used to have a .Net port (IronPython) and one
of the current trending github project for C# is one allowing Python
interoperability
([https://github.com/trending/c%23](https://github.com/trending/c%23))

It's like a grandpa getting angry alone in front of his mirror.

~~~
denfromufa
I would say it is in both directions ;)

------
mikestew
And while we're at it, let's stop beating our spouses!

Seriously, that's one of the bigger straw man posts I've read in a while.
Sure, I'm confident that somewhere on the big, wide Internet claims such as
those listed by the author can be found. And some folks seem entirely
convinced that the Earth is flat.

You want "bashing"? C#'s got nothing on, say, php. C#, AFAICT from circles I
pay attention to, is loved far more than it's hated. But, as someone else in
this comment section pointed out, it's a hell of a way to generate clicks.

------
moomin
Rob Ashton made the point years ago that the principal problem with C# was
cultural, not technical. [http://codeofrob.com/entries/why-you-cant-be-a-
good-.net-dev...](http://codeofrob.com/entries/why-you-cant-be-a-good-.net-
developer.html)

Of course, he did it in his classically abrasive style, so not that many
people championed the article.

------
FrankyHollywood
Even if C# would be the most technical superior language ever made with every
feature you could think of, a lot of developers still don't like it because:

\- C# smells corporate, being used in many large scale business application.

\- C# is developed by Microsoft, a billion dollar company itself

\- The .NET platform is only partial open source

So facts don't matter much, it's about smell :)

~~~
adgasf
Is that true anymore? I was under the impression that .NET is fully open
source: [https://dotnetfoundation.org/](https://dotnetfoundation.org/)

Besides that though, C# is much nicer than Java and fills a similar niche.

~~~
Matthias247
That covers the new .NET core parts, not the classic .NET. The classic .NET
framework contains lots of components (e.g. WinForms, but also others) which
are mainly wrappers around Windows/COM components. Therefore they can't be
fully open source. Nevertheless the .NET core and open sourcing effort is
great from my POV.

~~~
radicalbyte
..and you don't want to go anywhere near that stuff unless you must write win
ui software.

It's my preferred language, especially now it is getting functional
constructs. It's basically a more advanced, concise and flexible version of
Java. Only with value types (fast algorithms).

As others have said the ecosystem is different, it's better for games (Unity)
but horrible for NLP (Lucene.net is a museaum piece and NHibernate isn't
great).

I write just as much TypeScript/JavaScript nowadays and keep my Java/Python up
to date. I really want to add a functional language to replace Python (the 2/3
divide is tiring) but don't have the time (thanks to having two young kids and
a wife who also works full time).

------
StevePerkins
This sounds like one of those karma-fishing Reddit posts that start off with,
" _I know I 'm going to get downvoted for this, but..._", but then go on to
state a popular opinion and receive thousands of upvotes for it.

No matter which programming language is mentioned here, there will ALWAYS be a
few people commenting, " _I like 'X' better!_" (where 'X' is usually an
emerging language that they tinker with in hobby projects and haven't used
professionally yet).

That caveat aside, C# has generally been one of HN's darlings in recent years.
People who crap on Java turn around and praise C# in the next breath, because:

(1) There are some syntactical niceties that make C# feel "lighter",

(2) MS has developed a more "open" and even "cool" reputation over the past
few years, at least in comparison to Oracle, and

(3) In many cases, it's again people who have started tinkering with it in
personal projects, and haven't yet hit the inevitable pain points of using any
language for real professional work in a team setting.

C# certainly isn't Haskell, but it checks off enough functional checkboxes to
have some cred, while still being approachable and familiar enough for non-
academic mortals out in industry. Xamarin and Unity aren't perfect, but they
give C# a solid foothold in mobile and gaming (which, along with web dev, are
the holy trinity of domains that drive hype among young devs.

I really haven't heard much negative chatter. There will always be the people
holding on to MS's propriety brand image from the 90's, who always want to
comment on it from their Apple devices today. But on the Internet hype
spectrum of "cool" (Rust, Go, Elixir) to "uncool" (Java, PHP)... I'd say C# is
at least 10% off the middle, in the direction of "cool". It checks the
checkboxs of:

* "mildly interesting",

* "low learning curve",

* "ease of actually finding an employer who uses it", and

* "not likely to fade away because people don't migrate to version 3, or because Mozilla can't find another sponsor after Yahoo, or because yet another Ruby-successor comes along next week and sucks up all the hype, or whatever".

Really, the only people who criticize it a lot are the people in Microsoft
shops who _actually use it for a living today (!)_ , but isn't that pattern
usually true for everything?

------
frogfuzion
Until all programming languages coalesce into one super language (ECMAScript
20 in the year 2050), programmers will bash languages and programmers will
praise languages.

Until that fateful day we must all accept criticism of our favourite language
even though we are so smart and know it's the best language.

~~~
hacker_9
Even then they will war on, because the task of converting all libraries to
another language is such an immense undertaking. Really we need an AI to do
the transpiling job, then assign performance and maintainability scores, so we
can objectively argue the clear winners.

------
milge
I've written C# for the last 10 or so years now. I was a lot heavier in C# the
first 5 years until my career changed paths. So I've gotten to watch C# "from
a distance" for the last 5 years now and I'm optimistic about C#'s future. C#
has an image problem. Of the programmers I've talked to, the polyglots usually
see the strengths in C#.

------
warcode
C# with the available libraries through the nuget package manager has been the
best experience I have had in my career.

------
NicoJuicy
Why would c# be bashed? On the contrary, i'm detecting a lot of approval of
Microsoft and dot net the latest "months"/"years".

Microsoft is doing fine and their products also. Not mentioning the rize of
Visual Code that is trending EVERY release :)

------
VodkaHaze
I agree. If you are going to bash C#, call it by its proper name, Java++

That said its still a fine language. Not a fan of the dogmatic OO design
concept in Java and C#, but it's perfectly good at what it does.

------
SomeHacker44
Just the opposite. I've wished for more than a decade that Java would be more
like C#. Even more since Oracle took over the stewardship of Java.

With .NET Core and Microsoft's new CEO's vision, I am excited for the future
of C# (and F#) and very happy to put Java behind me. The CLR is a lot nicer
than the JVM too.

Now if only the ClojureCLR could get the support that ClojureJVM had, I'd be
done with the JVM entirely.

------
zargath
I have loved .net as a framework and c# as a language, but the bashing is just
as well part of the community itself.

What about the c# developers hating vb.net or java? What about .net experts
bashing jvm, php, node ? What about windows users bashing *nix for GUI? ahh
the list is long, from both sides.

Frameworks and Languages are fine, but what have you actually done with your
stack?

------
cryptarch
.NET Core isn't packaged for Debian, Fedora and CentOS, and for Ubuntu you
have to add a separate PPA.

That makes it an instant no-go for me. I'm not a software packager and I'm not
becoming one to try new and unstable C# tooling.

Visual Studio Community was a pretty terrible experience and I don't intend to
spend more of my time on unreliable Microsoft products.

~~~
rikkus
While there aren't necessarily native packages pre-built and ready to pull
down with the installers, you don't need to be a 'software packager' to
install .NET Core and I don't know what the problem is with 'add[ing] a
separate PPA'

Instructions for Debian[1], Fedora[2], Centos[3] and Ubuntu[4]. These all seem
like pretty simple copy+paste instructions.

[1]
[https://www.microsoft.com/net/core#linuxdebian](https://www.microsoft.com/net/core#linuxdebian)
[2]
[https://www.microsoft.com/net/core#linuxfedora](https://www.microsoft.com/net/core#linuxfedora)
[3]
[https://www.microsoft.com/net/core#linuxcentos](https://www.microsoft.com/net/core#linuxcentos)
[4]
[https://www.microsoft.com/net/core#linuxubuntu](https://www.microsoft.com/net/core#linuxubuntu)

~~~
cryptarch
I don't want 3rd party repositories to manage. To do it properly I have to (in
the case of Debian) trust some MS team's signing keys (yuck), add the repo and
update my apt-pinning rules (I don't want apt accidentally installing MS
versions of tools) and integrate this in my dev OS build automation.

That vs. adding a single line in my list of selected packages. The price to
adoption is high and it's just not worth it to me, especially seeing how
immature the tooling and overall ecosystem is.

------
al2o3cr
"Hey, the process for adding features for the language isn't any more opaque
than Java!"

Talk about damning with faint praise...

------
Adutude
I used C# to write an Excel toolbar. The big problem I had with it is that
there were features they had only implemented in Visual Basic/C++. It appeared
that C# was incomplete in it's implementation of MS API's

~~~
hermitdev
I've done the same. The problem isn't C#'s access to the APIs, the problem is
the APIs are incomplete, especially as MS moved to the SDI interface since
Office 2010. There are somethings you just can't do in an Add-In that are
obviously possible due to built-in features. Things like have a text-box in a
toolbar show the proper text in inactive windows.

------
kailuowang
Stop defending the language of your choice as well. Each popular language has
its own set of suitable use cases. Ignore the attacks on the language you are
using, instead, try the other languages to see what they are good at.

------
major505
C3 is awsome... dosen't matter if not anyone can see. But what really helps c#
being awsome is VS. One of the most complete IDE in market. I use VS since 6.0
and still founding new features that is surprises me.

------
c0l0nelpanic
I am a crusty old developer who has written many a C# program over the years.
I am certainly not hip, cool or trendy, but my friends and I have become
financially independent thanks to C#. Thanks Micro$oft. Love you!

------
jeffrand
I've spent the last 4 months writing a C# web service on .NET Core and deploy
on Linux. We chose it because it was the right tool for the job. We're
consuming a verbose WCF web service and there were some unique benefits to
doing it in a .NET language.

I've been primarily using python for the last couple of years so it's been a
really interesting experience. Here are some of my thoughts:

\- The language itself is really mature and actually really easy to be
productive in. We're using ASP.NET MVC and getting to know the right way to do
things took a while though.

\- It's hard to use C# without Visual Studio on Windows. I've tried Rider from
JetBrains which is decent but takes SO much memory and is pretty slow to
develop in. I've been using VSCode recently which is a great general editor
but lacks a number of great VS features. Visual Studio for Mac doesn't work
with how our app is structured for some reason (VS on Windows in a VM works
fine though). I've had to fire up bootcamp a few times to use VS on Windows.

\- I thought static typing was going to make it harder to do things, but I
think in terms of preventing some common bugs its great. It's no silver bullet
though.

\- I'm developing on a mac and deploying on Linux. There's no great way to
filter for .NET Core packages on NuGet (the M$ package manager). We've run
into some issues trying to use versions of packages that aren't yet .NET Core
compatible

\- There are a number of commonly used Linux environment tools we cant use,
like New Relic for APM, because they don't have support for the platform
version yet

\- The ORM (Entity Framework) we're using is nowhere near as good as something
like SQLAlchemy when it comes to migrations. It's laughably bad.

\- The testing framework is pretty good, but without real Visual Studio we're
missing some great features like code coverage analysis

\- Paying for a license to use a library we needed feels REALLY weird

\- Overall our web service is really fast. Asynchronous programming in C# is
very easy and very powerful and we've been able to make a lot of performance
gains by using it judiciously.

\- Its honestly hard to find answers googling around sometimes because there
are so many version of .NET and 10+ year of answers to the same questions. The
same can be said for a number of languages.

\- Our build and deployment already handles a few other statically typed
languages to making it work with .NET wasn't a big deal for us, but I can see
how that could be hard

I'd be happy to answer any questions that people might have.

~~~
denfromufa
.NET is highly backwards compatible, so why does "10+ year of answers to the
same questions" matter to you?

------
TerminalJunkie
I just prefer to use languages that I'm more proficient with. And, the cost of
MSVS etc. is expensive, as the article mentions.

------
iLemming
To be honest I kinda hate Anders Hejlsberg. If it wasn't him I wouldn't have
gotten myself into Turbo Pascal and later Delphi and later into C#. I would've
probably looked into C and Lisps. I spent years thinking Windows is the best
OS and VS is the best IDE. I wish there was someone 20 years ago to stop me
from falling into that trap. Well, I broke out of my bubble and now I feel
free. No matter how nice it may look - dotnet is a mental prison.

------
segmondy
c# > java

JVM > CLR

my opinion. I'll pick java everyday over c# due to the jvm. unless I'm
building windows only app or an app for the app phone.

------
iomind
The link is broken. yeah, let's stop bashing.

~~~
zapu
Works fine for me.

------
bsg75
C# is no worse than Java.

~~~
bsg75
Maybe even a bit better.

------
throwawaydbfif
I use C# daily at work and my dislike can be summed up by one word: Microsoft.

They may have changed course but open source software has for 10+ years
largely avoided the platform. This means C# is Java with nicer syntax but 10%
the libraries and terrible cross platform support.

There's been countless times at work when I needed a certain library and I
already knew what the Java equivalent was, but what I was looking for simply
didn't exist. Database clients, data processing, http2, image manipulation,
etc...

With Java I get everything I do from C# plus all the stuff they've been raving
about working on in .NET core . Plus I get choice. There's 3 full featured
IDE's, 20 or so servers, 6 or 7 JVM's

~~~
nightski
This really sounds like a lack of knowledge of the .NET ecosystem. Every area
you mentioned has extensive library coverage.

In addition there are several C# IDEs available, including from JetBrains who
creates IntelliJ! Roslyn makes fancy features such as auto complete available
to text editors as well such as VS Code or Atom.

~~~
topbanana
Not to mention that the best C# IDE is better than any of the Java ones.

~~~
steego
I have to disagree. Unlike the VS Resharper plugin, the JetBrains IDEs are
really good. Unlike VS, they rarely lock the UI thread doing paternalistic
busywork that adds very marginal value to my work.

I'm use VS all the time, so I'm not going to dump on it too much, but there is
definitely room for improvement. I'm only vaguely familiar with VS 2017, but I
understand they've put their IDE on a diet.

------
vgy7ujm
Just use Bash instead of bashing C#.

~~~
vgy7ujm
Wow this lighthearted post gets downvotes. Not by Linux people I hope.

------
draw_down
Part dispelling of myths, part "well I actually like curly braces, so there."
Please enjoy your curly braces, nobody is taking them away anytime soon.

