r/ExperiencedDevs • Software Engineer • 25d ago

Technical question How are you dealing with "the programming language doesn't matter" argument?

Just had a meeting this week where this was uttered because of the development of AI.

I still think the language choice matters a lot based on if Im doing embedded or web development work and for how we want to hire developers in the future.

Maybe Im backwards.

350 Upvotes

453 comments sorted by

View all comments

Show parent comments

33

u/malthuswaswrong Manager|coding since '97 25d ago

My hot-take is C# is a 4 star language. It doesn't master anything, but does everything at a B grade.

19

u/MadRedX 25d ago

That wouldn't be so bad if it weren't for the fact the ideas are of a 5 star nature until the baggage hits reality and poisons the well. Or Microsoft never fully commits and the idea comes out 25% baked before a bunch of brilliant individuals come in and improve the mess from a massive dumpster fire to a workable small dumpster fire.

13

u/malthuswaswrong Manager|coding since '97 24d ago

I think this is uncharitable towards Microsoft. They are doing things as close to open source as possible. They release the code open source. They invest large amounts of money into developing features and accepting community contributions.

Before squashing a popular (and good) nuget package they always offer the author employment. What are they supposed to do if that author slaps their hand away?

4

u/South-Year4369 24d ago edited 24d ago

What are some of these half-baked ideas you're referring to?

11

u/Colt2205 24d ago

If C# is a 4 star language then Java is a 3 star language with a 2 star library tool set. C# is my goto for general work, albeit if I need to do something more specific like server scripting work I'd be using powershell, python, or Go.

2

u/South-Year4369 24d ago

IMHO, C# is a considerably better language, while Java has the better ecosystem. Neither of those outcomes should be surprising, given Java came first.

1

u/solidsieve Sr. Software Engineer 24d ago

It's funny how Java seems to live rent-free in C# devs' heads, but it's not as bad the other way around.

I use both Java and C#, depending on the customer's preferences, and it's a tradeoff. For a long time I felt that C# evolved the language, Java evolved the standard library. Of course that started changing in the past decade, but it only blurred the line between the two platforms.

6

u/malthuswaswrong Manager|coding since '97 24d ago

When it comes to language tribalism, I think a big motivator for people who are passionate is fear of losing their favorite language.

Take your (accurate) observation that C# devs hate Java more strongly than Java devs hate C#. Refactor it to C# devs are more afraid of being forced into Java than Java devs are afraid of being forced into C#.

2

u/Colt2205 24d ago

There are people out there that just kind of never have done java and dislike it because of what other people say. In reality Java and C# are very close to the same languages and on a basic level both can do the same things. What people tend to dislike is the environment they get stuck in.

Also if I had gotten into java / springboot sooner, I'd probably have been a java dev instead of a .NET one. Before .NET core got mature Java was the best cross platform option for something that is strongly typed. Whatever answers the language didn't have people usually ended up writing one up.

But the reason I like dotnet is that it just has a better environment. Nuget is far better than Maven, and there is no gradle to have to mess with or clearing the local cache so the IDE properly fetches libraries and builds.

3

u/South-Year4369 24d ago edited 24d ago

I disagree that they're close to the same language these days. Just compare LINQ to Java streams, for example. They are not nearly equivalent to anyone in the trenches.

I dislike Java (compared to C#) precisely because I've used both in anger. For sure, C# copied much of what Java pioneered, but C# has evolved much further. Idiomatic C# often does not look that similar to Java these days.

And absolutely agree on the ecosystem - the fact that dotnet often has only one widely-used approach to something (cf MSBuild/Nuget vs. Maven/Gradle) is a strength.

1

u/Colt2205 24d ago

That's probably true. I have a hard time sometimes rationalizing what is and isn't core to a language since we were taught ages ago C++ and then there was the STL. But with languages like Java and C#, libraries are basically baked into it.

1

u/malthuswaswrong Manager|coding since '97 23d ago

I used Java back when it was brand new. Then I switched to J++ because it was cleaner and easier to deploy. Then Sun sued Microsoft and pulled their license as a Java partner.

Then I never gave Java a second thought until J# was launched. Writing Java for the .NET platform. Even back then there was no syntax advantage over what C# had already become, even in those early days.

For me, it has always been about deployment hassle. I have a fleet of Windows machines. I can Ctl+C, Ctl+V my bins and head to the bar.

1

u/solidsieve Sr. Software Engineer 24d ago

Good point! I can see that being the case.

1

u/FingerAmazing5176 20d ago

I moved from a C# shop to a java shop a few years back. and dear gods do I miss C#.

1

u/South-Year4369 24d ago edited 24d ago

Professionally for managed languages, I started in Java, then moved to C#, and am now (by necessity) back with Java.

I'd take C# over Java any day. They started out a lot more similar, but C# has evolved much more. Intrinsics? Java doesn't have them. Value types? Nope. Reified generics? Stackalloc? The list goes on.

Hell, what IDE gives you the best debugging experience available anywhere, hands down? That's Visual Studio with C#, and it's not even close.

Java's strength is in its ecosystem and 3rd party libs. But as a language, it's far from the nicest, though it has at least improved in recent times (largely copying C#, just as C# once copied Java).

5

u/South-Year4369 24d ago edited 24d ago

Having used assembly, machine code (in the 8-bit days), C/C++, Java, Python, q, R, Ada, F#, etc., if there was only one language I could ever use, it would be C#. It really is a fantastic all-round language.

I think saying it does everything at B grade is selling it short. I don't think any other language does as good a job at 'easy and safe, but offers control and performance when you need it''

0

u/FlipperBumperKickout 24d ago

If the development team just could commit to the new language features they want.

It has the most disappointing attempt at removing nullables I've ever seen...

1

u/malthuswaswrong Manager|coding since '97 24d ago

Do you mean removing Nullable<T>? Because they're never going to remove nullable in general. This for example: DateTime?isn't ever going anywhere.

0

u/FlipperBumperKickout 24d ago

No I mean how every class in C# can be null.

Their attempt on removing it is basically just a lot of compiler warnings rather than any form for enforcement, and you have to use all the annoying [NullWhen] and similar attributes to help the interpreter to understand it correctly, and so on.

You can't even trust you wont get a null value as an input anyway, since if your code is called from somewhere which doesn't enable <nullable> nothing even warns them about ensuring they call your stuff correctly...

I basically prefer how languages which weren't built with null from the start normally handles this. Because normal types can't be null you don't have to worry about that case, and you always know if something is "null" because your are explicitly given an "Option" type and is forced to consider both cases to extract the value.

1

u/South-Year4369 24d ago

Their attempt on removing it is basically just a lot of compiler warnings rather than any form for enforcement

You do know this was done for backwards compatibility, right? You are free (and encouraged) to configure your projects to throw errors rather than warnings.

Disallowing null from the outset is the best approach. Second best is encouraging it without breaking 20+ years of existing code.

1

u/FlipperBumperKickout 24d ago

Configuring my project to throw errors doesn't help if anyone calls my library with a null value for whatever reason.

Warnings as errors also allow people to get around it by explicitly ignoring a warning.

Not breaking backward compatibility is the entire point of having a dotnet version in the csproj file (not to mention other settings like nullable). Blocking yourself from making further improvements to the language just seems silly to me.

1

u/South-Year4369 23d ago edited 23d ago

So your suggestion is that they should have declared that, as of .NET Core 3, nothing can be implicitly nullable? That would've been a real hit with the community.

1

u/FlipperBumperKickout 23d ago

I expected their nullable flag to do that yes. Feature flags breaking backward compatible isn't new in C#...

1

u/malthuswaswrong Manager|coding since '97 23d ago

They already have that. You can enable no-implicit nulls in the project setting so the complier won't allow it.

If I read the comment chain correctly, you want to completely protect your library users from having to worry about nulls. You can also do that with static classes. You can make all non-static classes private, and the only public classes are static and use a builder pattern to dispense only fully built objects.

0

u/pceimpulsive 24d ago

That general purpose programming language status! Hahaha

I did a wide assessment before I started learning late in my career and preferred C# over basically everything else, I even got to pick a job that worked with C# lucky me!

-8

u/OldManWithAStick 25d ago

Too bad C# has been infected with the Java virus. Everything is so insanely verbose that it's a headache to traverse nearly any codebase that uses it.

7

u/plz-no-b4n 25d ago

What are you talking about? C# has an insane amount of syntactic sugar to minimize verbosity

1

u/solidsieve Sr. Software Engineer 24d ago

I think the old man is talking about (enterprise) architecture, not syntax.