4 ms·
I've written a lot of code in both Ruby and C#. Like a parent, I love both of them for completely different reasons. From a pure language standpoint, Java and
by eldavido 11y ago
I've written a lot of code in both Ruby and C#. Like a parent, I love both of them for completely different reasons.
From a pure language standpoint, Java and C# are _really_ well-designed tools. I call them "Cathedral Languages" after esr's "Cathedral and the Bazaar" -- both were designed by highly-qualified teams of experts who had the privilege of spending years designing them, after already spending collectively many lifetimes doing language design. For examples of what I'm talking about, look at C#'s implementation of generics. Look at the quality of .NET or Java's multi-generational mark-and-sweep garage collector implementations. Ruby has a lot of warts. It's slow. MRI/REE are children's toys compared to the CLR or JVM. Ruby's implementation of coroutines (blocks vs. procs vs. lambdas) is a huge mess, its concurrency story is terrible, it has nothing like .NET's async/await...I could go on, but I feel the point is made.
However...
It's easy, when using .NET and Java, since they're such "batteries-included" languages, to get into the mindset that "I'll never need another tool", which is _manifestly_ untrue. I am a committed polyglot programmer and I am appalled how frequently I encounter "cultural ignorance" within the big enterprise language communities. So I think the issue is more cultural (O'Church writes about this), one of trying to avoid "Java Shop Politics", with the associated ManagerFactorySingletonImpls, needing to write about 100 lines to get a single thing done, etc. The problem is the cultural baggage that many enterprise developers bring with them, not the language itself.
In my current project, I'm doing small-program development in .NET for a Windows LOB project. It's pretty refreshing. I get all the benefits of UNIX-style systems design, i.e.. small composable program elements, services, Git (TFS? are you kidding me?), proper CI/CD, and command-line automation, alongside the maturity of not having to deal with breaking changes on point releases of OSS libs, a thoroughly-documented, consistent BCL (.NET Framework 4.5), high-quality runtime, and generally less "hipster" culture. I'd highly recommend it.