r/learnprogramming • • 5h ago

Topic C# or Java?

If you had to choose one class between the two, which would you select and why? I tried to Google the purpose of them; the immediate answers from Google felt very vague and like both of the languages are common. Is one course better for web development as opposed to apps or something? Looking at the courses I'm taking, down the line I will select one of the two. The only thing I know so far is C++, so I'm quite new.

Also, side question: why are there so many languages? The only logical thing I can imagine is there were problems that couldn't be solved with say for example C++ so someone created something new. But why not just build on the original language? Why did they need to reinvent the wheel? Or is it as simple as that: someone wanted to create their own thing?

1 Upvotes

30 comments sorted by

View all comments

3

u/Mughi1138 4h ago

To answer part of the side question first - why so many languages and why C#?

C# actually started life as the next iteration of Microsoft's J++ which was their Java implementation. They poached the architect who did Delphi among other things from Borland and eventually tasked him with making C#... which turned out to essentially be Java hacked to support Microsoft COM interfaces. And appeared to be part of their traditional efforts at vendor lock-in. Oh, and it added 'delegates' as a language feature since that architect loved to shove those into any language he created.

When Microsoft was first introducing C# the president of our Orange County Java users' group attended and then came to give a presentation to our UG, as we were mainly professionals who used many different languages and not just one. Most of his presentation was "and it does XXX, just like Java" (including immutable strings), but every once in a while he hit "and then C# does this odd thing, but I have no idea why". Each time he said that, I had the answer as for the company I was working at I had shortly before finished an automatic Java -> COM wrapper tool that would create C++ code to be either standard JNI interfacing or Microsoft proprietary RNI. I recognized each and every one of those divergences as what was required to give it first level COM support in the language itself. Or at least make it easier to use.

So... if you plan to make your career just in the Microsoft Windows realm, with their platform and their tools only, then C# is a good tool for the job. If you want to be more universal Java shines (kinda... mostly still..) but with things like Kubernetes and languages like Python your options are more wide open these days.

And, of course, the more tools you become proficient with the more options you will have when picking the right one for the job at hand.

3

u/FunkyDoktor 3h ago

You’re describing C# 20 years ago. It’s been cross-platform for a while and works great outside of the Windows realm.

0

u/Mughi1138 3h ago

It works "ok" outside of the Windows realm. Not great. Though it is better than it was just a few years ago where if you were not on the one main distros you had to even compile the compiler yourself.

It's not nearly as cross platform as some other things, and is it up to good support on more than two CPU architectures yet? I've not checked that in the last year or so.

But, yes, I've worked with professional shipping C# code, and at companies supporting many different systems. In certain areas you only get a small subset of C# that you can use. At my current day job some projects are in C#, but others (including mine) are in different languages... and not for want of a prior CTO not making an effort to unify.

So again, it really comes down to proper tool for the current tasks at hand.

2

u/plastikmissile 2h ago

C# has supported ARM64 in addition to x86 for a while now.