I strongly despise C#, and I say that with about 5 real years of experience with it. I have been on teams delivering real products with it.
It is like Java but married to microsoft while philanders as it pleases. And when I say that out loud some putz always responds "but Mono!" and then the thing I need is inevitably not supported on Mono. When it is working it is stuck on windows server and needing a reboot for some half-assed update microsoft is pushing. With Java I can have all that on a Linux but at least pick which major vendor bends me over! Maybe C# works in Unity, but that is its fan scattering mess.
In C, C++, or Rust I am not beholden to one company and can actually control the hardware to do my bidding. I can go into the compilers to find bugs and the creators are responsive when I make bug reports. Often these are more expressive and have tinier code as well. Isn't C# supposed to be faster to develop in these old crusty systems languages? Why that never the case on real teams I am on?
If performance isn't what I need but rather short development cycles there is Lua, Python, BASH, or my personal favorite Ruby. All of these allow hacking together stuff so much faster, and when I have needed they it offer more control of the garbage collector or other runtime features so I often get better performance out of them.
Then there are the shops using C#. I don't know why, and I see no obvious mechanism that causes this but the culture in C# shops are invariably terrible. I have done 16 contracts in the past 22 years and the least stressful most productive shops are always the nix using professionals or JavaScript slinging kids fresh from college.
The overly corporate C# shops always seem stuck in bad ways, pushing some non-agile scrum, lacking any critical thinking, and are often overtly hostile. These are the shops that buy whatever consultant are selling and force it on me without ever consulting me. I have seen one fist-fight break out in the office and it was in a C# shop. Somehow those backend Unix greybeard wizards are always able to talk through their differences with the 22 year blue haired kid who wants progressive typing on the TypeScript interface that is fed by that wizard's service, and they often do it while discussing technical merit instead of political posturing.
At last C# contract I started I left after 2 weeks (and I am not counting that towards my 16), because the lead developer was preposterously racist and felt comfortable opening up to me about that in that short a time period. I had a lot of self reflection about why he felt comfortable dumping his race war crap on me, and I have no clue why.
C# is not as fast as the slow languages but productive languages. C# is not productive as fast but low productivity languages. And every other thing I mentioned doesn't even have a wiff of vendor lock-in. I am good without C# and the cultures that somehow arise around it.
(and the pay sucks I easily get double doing anything* else)
Mono as a runtime hasn't been relevant in almost a decade now (since the advent of .NET Core). "I can go into the compilers to find bugs" -> yeah, that's what Roslyn is. C# lets you control GC, marshalling, safety, calling convention, inlining, etc. for very fast hand-rolled managed or unmanaged code if you need it.
Mono is alive and well in https://github.com/dotnet/runtime/tree/main/src/mono. It serves Android, iOS, WASM and s390x targets, maybe some other too. It is generally much slower than CoreCLR, but besides supporting more platforms, has features that CoreCLR lacks like IL interpreter (technically, CoreCLR has one too but it has been broken for years and is never used).
Ideally, iOS's Mono usage will be eventually replaced with NativeAOT, but for now it's still being worked on, not in the least in iOS-targeting GUI frameworks like MAUI to provide better NAOT compatibility. In addition, NativeAOT's linker/trimmer is based on Mono.Linker and Mono.Cecil, so the project became part of .NET as was intended.
But you are right in a way, because the above is often confused with a separate, outdated Mono distribution that some people incorrectly keep insisting on installing on their Linux systems.
Yes, I wanted to mention WASM but honestly even talking about it is doing more of a disservice to modern .NET than not given the preconceptions about Mono.
Which decade did these events transpire in? 00s? It also sounds like the issues had little to do with the language and a lot with specific positions and market...
I fail to recognize the language you are talking about, but perhaps the fondness of Ruby is a subtle hint of warped perception of reality?
Ruby is just a bad technology - very slow, brittle, extremely messy the moment a codebase becomes larger than trivial, not ideal package management, unproductive. It was made work by many great engineers that would have either had more success with a different technology or would have spent less effort in achieving their goals with it. Pick C# or Kotlin with ASP.NET Core or Ktor and be faster at shipping both the initial prototype and then managing the product after years of growth, while enjoying 10x difference in server resources utilization.
But frankly your sentiment on C# is so unhinged that I don't even know where to start.
There are many companies that employ C# alongside other languages, or C# and F# exclusively, that have teams using Macs with VS Code or Rider. Whichever language/platform you had experience with has little to do with what .NET is for 8 years already, and its unproductive to insist on outdated perception.
It is like Java but married to microsoft while philanders as it pleases. And when I say that out loud some putz always responds "but Mono!" and then the thing I need is inevitably not supported on Mono. When it is working it is stuck on windows server and needing a reboot for some half-assed update microsoft is pushing. With Java I can have all that on a Linux but at least pick which major vendor bends me over! Maybe C# works in Unity, but that is its fan scattering mess.
In C, C++, or Rust I am not beholden to one company and can actually control the hardware to do my bidding. I can go into the compilers to find bugs and the creators are responsive when I make bug reports. Often these are more expressive and have tinier code as well. Isn't C# supposed to be faster to develop in these old crusty systems languages? Why that never the case on real teams I am on?
If performance isn't what I need but rather short development cycles there is Lua, Python, BASH, or my personal favorite Ruby. All of these allow hacking together stuff so much faster, and when I have needed they it offer more control of the garbage collector or other runtime features so I often get better performance out of them.
Then there are the shops using C#. I don't know why, and I see no obvious mechanism that causes this but the culture in C# shops are invariably terrible. I have done 16 contracts in the past 22 years and the least stressful most productive shops are always the nix using professionals or JavaScript slinging kids fresh from college.
The overly corporate C# shops always seem stuck in bad ways, pushing some non-agile scrum, lacking any critical thinking, and are often overtly hostile. These are the shops that buy whatever consultant are selling and force it on me without ever consulting me. I have seen one fist-fight break out in the office and it was in a C# shop. Somehow those backend Unix greybeard wizards are always able to talk through their differences with the 22 year blue haired kid who wants progressive typing on the TypeScript interface that is fed by that wizard's service, and they often do it while discussing technical merit instead of political posturing.
At last C# contract I started I left after 2 weeks (and I am not counting that towards my 16), because the lead developer was preposterously racist and felt comfortable opening up to me about that in that short a time period. I had a lot of self reflection about why he felt comfortable dumping his race war crap on me, and I have no clue why.
C# is not as fast as the slow languages but productive languages. C# is not productive as fast but low productivity languages. And every other thing I mentioned doesn't even have a wiff of vendor lock-in. I am good without C# and the cultures that somehow arise around it.
(and the pay sucks I easily get double doing anything* else)