logoalt Hacker News

CharlieDigital • yesterday at 5:23 PM • 20 replies • view on HN

In my experience, C# and .NET are both "underappreciated" in a large part based on the legacy.

Some folks out there still think .NET is Windows only. Some folks out there haven't looked at C# since the .NET Framework days. Some folks out there are still salty about some of Microsoft's decision around OSS (debugger, hot reload fiasco, etc.)

But day to day working with C# and .NET for backends? It's really fantastic. AI seems to like it a lot and a lot of tools for agents to go HAM. Roslyn analyzer, source generators, workable hot reload (for a compiled language), tons of really good docs from Microsoft, generally low variance and high consistency from codebase to codebase (e.g. encountering Drizzle vs Prisma vs TypeORM vs Kysely vs ... in Node land).

My previous team switched from TS to C# and F#[0][1] and it was a blessing; a lot of the platform ops have been simplified. It's just one very solid tool chain and packages are generally stable (a lot less effort on maintaining platform config/tooling and more focus on just building). First party packages get consistent security updates and C# doesn't have nearly the same level of exposure to transitive packages that one encounters with JS/TS ecosystem.

C# feels like a really solid choice in the age of AI coding because of it's general stability, strong static analyzer, insistence on types, and really good tooling. Not right for all use cases (e.g. CLI, serverless functions), but fantastic for backend APIs.

If you're looking to do AI with/on C#, I wrote about some of my experience with making codebases successful for AI[2].

[0] https://engineering.usemotion.com/moving-off-of-typescript-e...

[1] https://typescript-is-like-csharp.chrlschn.dev/

[2] https://chrlschn.dev/blog/2026/08/the-unexpected-ai-stack-cs...


Replies

raincole • yesterday at 6:44 PM

Being a Microsoft product is such a heavy baggage. Last time I checked the official debugger was still not open sourced and that alone was enough to make many people think twice. The fact that MSFT chose golang instead of C# for Typescript compiler, the state of Windows native GUI app dev... all erode C#'s reputation.

It's a good language though. The latest trend of hating OOP is unjustified/overreaction. I do write Rust too and I am not really convinced that traits are better than shallow inheritance + interface-oriented classes.

➕ show 4 replies
wccrawford • today at 11:07 AM

I wrote C# non-professionally long ago and loved it.

I recently tried to come back and the problem isn't the language. It's getting into it. Try to click "new project" and you're met with dozens of templates, and a lot of them sound identical to the untrained observer. Which web project should you start with? Which GUI project?

I pushed through it and made the wrong choice a few times for each of those. Apparently there are stable old one, and rapidly changing and underdeveloped new ones, and no way to tell them apart other than knowing the magic incantation.

Microsoft would do themselves a major favor if they cleaned that up and made things clearer, including definite guidance on why you should pick one template over another.

Instead, they treat them all as if they're perfect and newcomers have to just guess.

And no, web research doesn't help. There are tons of people who love each of them, and only a few people willing to write well-reasoned articles based on their experience, helping someone pick the best ones to start with.

christophilus • yesterday at 9:51 PM

I love C# and F#, but every .NET shop I worked for was full of MS cool aid drinkers and enterprisey nonsense. I don’t miss the culture at all. The languages are excellent, though.

➕ show 4 replies
mook • today at 6:31 AM

I know this is not really the case for many others, but for me it's because there's a lot of set up; that's usually done by IDEs, but I'm unlikely to get an IDE before I've kicked the tires a bit. Go is run "go mod init", or hand write one, or even skip that step to write a single file thing. JavaScript is similar, you can start with one file, or start with a relatively simple package.json. Python / ruby / Perl / PHP is just the one file.

As far as I know, C# and friends still require setting up a project file, and there isn't a tutorial that has one you can easily copy.

Maybe this is why I also can't get into Android development.

(It also doesn't help that my Linux distro doesn't ship the toolchain because it can't be bootstrapped from text files, as far as I understand it)

➕ show 5 replies
victorbuilds • today at 11:07 AM

Same experience here. My side project's backend is .NET 10 on Linux, in Docker on a single Hetzner box. It polls the now-playing line of ~58k internet radio stations every 20-60s and serves it as an API (tuneping.com). It's one process for all the background work (sync, polling, matching, webhooks), one for the API, and one Postgres. The thing I'd point at is the "low variance" you mention: hosted services, config and logging all work the same way, so there's very little glue code I had to invent.

yurish • today at 11:54 AM

The thing I do not like about modern .NET is that Microsoft completely switched to AI-generated garbage as their documentation. This may be ok if you only interact with it though agents but painful to read otherwise.

EMM_386 • yesterday at 8:18 PM

I've been writing C# for literally 25 years.

I still choose .NET as the go-to whenever I can. On Windows or Linux.

I think the baggage view was valid for a while - but now we have a new generation of developers who only know about .Net Core and may not associate the Framework years in quite the same way.

➕ show 1 reply
smoe • yesterday at 7:28 PM

I recently started a new project on .NET, mainly for its batteries included approach, seemingly a bit more serious ecosystem and the tooling AI agents can leverage during development and ops. Really happy so far, but too early and too small to have meaningful conclusions yet.

I'm especially interested in exploring F# as a concise, non ambiguous way to communicate definitions between humans and agents, somewhere between writing code like the olden days of yesteryear and describing things in English prose.

➕ show 1 reply
rjbwork • today at 6:55 AM

Yeah. I fell in love with it about 15 years ago during undergrad at an internship. Built a few of my senior projects in it, and have made a career out of being good at it. It's been such a pleasure to see it turn into a general purpose non-MS locked language that i can run anywhere and do anything with, and it only gets better every year.

Thanks for the links. Your agent repl thing looks cool as hell.

chrysoprace • today at 7:32 AM

I generally agree but so far every place I've been that had a sizable .NET codebase were stuck on Framework and so in reality it was very much Windows-only.

Modern .NET is great though.

keithnz • today at 4:54 AM

I pretty much exclusively use .NET with AI for backend stuff and run it all in linux containers. It's really good. I generally try to stick to stock standard .NET with only a few popular packages where it makes sense. You don't actually need too many extra things as there's quite a lot built in. Even for CLI its ok, though it won't be the smallest binary.

ptx • today at 7:48 AM

> Some folks out there are still salty about some of Microsoft's decision around OSS (debugger, hot reload fiasco, etc.)

Have these decisions changed? Is everything now open source?

➕ show 1 reply
doublepg23 • yesterday at 6:27 PM

It's certainly not a big topic of discussion online but it's powered all of the healthcare infra my career has been around. There's a lot of "dark matter" code written in C#.

theanonymousone • today at 10:11 AM

It's kind of bewildering for me that, despite all similarities between C# and TS (including their actual design architect), only one has received so much negativity.

Maybe MS can work out a longish-term roadmap, where in a certain future version C# and TS gradually "morph" into being the same thing (e.g. Typescript 10 == C# 20 or so)

stevefan1999 • yesterday at 6:43 PM

The fact that when most devs look at C#, they can only see the silhouette of Microsoft is kind of making me mad sometimes, but I think it is understandable.

The corporate history of C# is undeniably strong, and even till this day in modern C#, they still have a lot of legacy components in it, like AppDomain, APM and MarshalByRefObject.

It is also unfortunately that C# has largely lost in the AI race, that it failed to gain tractions from AI developers despite heavy investments from Microsoft. Early AI stuff like Semantic Kernel actually included C# as its primary languages besides from Python. Nowadays it is not mentioned so much and the default is just Python but perhaps it really isn't a fair comparison due to the gravity of Python in AI as a whole.

Yet for another fact that even within Microsoft, Rust wins over C# for agentic development, is a clear indication that C# has lost a meaningful place in software development as its former parent started to berate it as well. TypeScript is rewritten in Go rather than C#, and consider the fact that Anders Hejlsberg made both C# and TypeScript...

Sure, maybe Bing and a large part of Azure and Xbox services still have heavily relying on it, probably because of ASP.NET Core and Orleans, but outside of the two Microsoft greenhouses, it is a free for all battle royale where C# don't even have a chance of being picked at due to being too weak.

I even tried to contribute a C# SDK to the Restate project, but the maintainers actively rejected it due to them not being familiar and refused the handover. They said they will consider if there are commercial fundings backing it, then they would starting to consider (that's even with money attached they would still think about it). This also shows how unpopular C#/dotnet is among open source development and failed to build hype. The same Restate project even have a Java SDK for it, so it is not like they can't handle C#, they just didn't like to.

The last few thing C# is good at is just Unity I'm afraid, and that is also dying too as Unity is also not doing so well lately.

➕ show 2 replies
jiggawatts • yesterday at 8:50 PM

It’s also awesome for SREs / SysOps / Whatever We Call Ourselves Today:

Opinionated in a good way, which means almost all C# apps have the same parameterisation with environment variables, command line, and config files. It’s all very systematic, consistent, but flexible and pluggable.

“Node has that too!” you’re about to say. Lol, no. It has bits and pieces the devs have to wire themselves, which means a fleet of vaguely related apps made by independent teams will have wildly different config styles. Good luck consistently making all of them pull API client certs from KMS or Key Vault, or whatever!

OpenTelemetry is now baked in to the core components and rapidly spreading through other libraries.

Excellent “pervasive” system APIs for spans, traces, metrics, and logs means that the sources are omnipresent and very rich, going back decades. Even very old third party libraries are often a breeze to instrument.

Debug snapshots from production crashes on App Service feels like cheating.

Built in container build outputs with no extra tooling.

Sane defaults for its package manager means far fewer nasty security surprises.

Far more first-party “coverage” of essential capabilities in the optional Microsoft packages so you don’t have to resort to NPM where your security-critical code is written by Sergei and support is “LOL Wut!?”

A GC that automatically responds to container limits instead of the host limits.

It uses thread pools for async tasks in most configurations so whole categories of production-time issues that occur with single threaded runtimes just doesn’t happen.

Etc, etc…

jodrellblank • yesterday at 6:23 PM

How does AI do with F#?

➕ show 4 replies
sfn42 • yesterday at 7:22 PM

I think C# would be a great choice for both CLI apps and server less functions.

Other than that I totally agree with everything you said.

➕ show 1 reply
fhn • today at 2:17 AM

some folks here sound a little desperate

DANmode • today at 5:15 AM

> Some folks out there still think .NET is Windows only.

Wait until you meet devs who don’t understand that other OS are a thing!