DEV Community

Ryan Doyle
Ryan Doyle

Posted on

Java, C++, or C#???

Alright. I would consider myself a new developer. I have worked primarily with Node, Javascript, and React and have been looking to enter the workforce as a developer.

In my search for a new career, I am of course always looking to develop my skills and learn more. As I look online (granted, this might just be in my area) I see a LOT of open positions for .NET, and many backend jobs looking for experience with Java.

The Question

My question is, as someone who would consider themself to be pretty strong on the Javascript/Node front, what would be a more beneficial programming language to seek out learning next? Would learning Java, C++, or C# make me a better programmer?*

Here are my first thoughts for each:

  • Java: It's all over the place, so it seems like it would be good ont he resume as well as a skill overall to understand. My first interview I bombed because it was for a backend Java position. (I applied for a Node/JS frontend position)

  • C++: It closely related to C (in my understanding). Apparently that can help a lot with other languages based on C. Also, I've heard it's good because it doesnt manage things like memory automatically so it makes you a better developer in the sense that you need to understand aspects of how the language works a little more than you might with other languages.

  • C#: Somewhat like C? Also it's part of the .NET stack which seems to have many jobs out there.

*I'm not necessarily looking for the best language to get a job right away. I'm trying to think more long term. That thinking leads me towards C++ because of what I said above, but not knowing any of these languages, I am hoping someone might have some more insight! I'd rather learn a language with skills that can apply across the board than something really specific to a certain stack, but then my locked in to that.

Or...maybe go the totally other direction and go with Swift?!

Top comments (13)

Collapse
 
jeikabu profile image
jeikabu

I learned C then C++ (as well as assembly) before moving on to "managed" languages. Honestly, I would do it that way again. Painful as they can be, C/C++ force you to learn pretty fundamental things, will come in handy when you need to integrate with native code, and make every other language seem easy. 😎

That said, if you're more interested in landing jobs than the journey, look at what's required for where you'd like to be.

Collapse
 
brianush1 profile image
brianush1

I wanna emphasize the importance of learning C before C++, as understanding the internals behind how C++ works is easier if you know C and can be very helpful in avoiding bugs and common pitfalls.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

This is exactly the advice I was going to give!

C and C++ really drive point the home that magic is not free. Java, C#, and many other languages would like you to believe that their fancy abstractions have no hidden costs, but abstractions always do. Once you've had to muck about with handling everything manually, or at least transparently, you really come to appreciate all the implications of, say, that "magically resizing data structure".

Collapse
 
jamesmh profile image
James Hickey

I'm biased, but I'd say C#.

C++ is great if you want a career in building video games, IOT, etc. But if you are building web stuff? Nope. Forget it.

Java is really only used by big corps, banks, etc. That's why you get paid a little bit more than C# in general. Question is: Do you want to build huge year-long projects on massive teams?

C# I think is the most versatile since it's used in smaller web scenarios and bigger enterprise Java-like scenarios.

Unity (one of the biggest video game frameworks) allows C# and you can do IOT with .NET Core (since it's cross-platform).

It is also open source and updates are added very quickly, whereas C++ and Java not so much.

Extra bonus: you can build a .NET Core project super fast with (a) VS Code and (B) the .NET CLI.

Java and C++... not so easy to just throw things together...😂

Collapse
 
frothandjava profile image
Scot McSweeney-Roberts

If you want to be a better developer, learn one of the functional languages (Haskell, Erlang, F#/Ocaml, Scala, etc.).

If you want a better paid job, learn Java or C#. It doesn't really matter which one as they're close enough that when you learn one of them then the other can easily be picked up. Though you might want to look closely at the pay rates (here in London, Java developers tend to get ~10k more than C# developers)

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀 • Edited

Couldn't Scala bring you closer to Java? It's the only recommendation which could be better all around for a developer (I'm not a scala Dev).

Collapse
 
frothandjava profile image
Scot McSweeney-Roberts

It could, though last time I played with Scala there was a lot of doing things its own way - like having its own collection class hierarchy. Not a big deal but it did annoy me a bit.

Another option would be F#, as that sits on top of .net. Personally, I found F# a lot easier to pick up and it felt a lot closer to the rest of .net than Scala did to Java.

Collapse
 
shaijut profile image
Shaiju T • Edited

😄, I used to have questions like which language is better ? After discussing with my friends and listening to people online, I realized that Its better to stop asking these questions. Instead start asking which tool is better for current Job and Trend.

Choose the right tool for the Job.

  • Based on your experience, you can use C# or Java for building enterprise and large applications.
  • Instead JSF you can think of using Anuglar orReactorVueetc. for Front End.
  • Python for Machine Learning.
  • Go for Micro Services based performant applications.

In future maybe today's Languages and Framework may be outdated, so to survive you will be forced to learn new language of that time.

Conclusion:

  • Developer Happiness, stick to the language which make your life easier, like easy to read syntax, maintainable, has Good IDE. I like C# for current work, and its up-to you to decide what you like.

  • Its always good to be Open to learn any language as required and Choose the right tool for the Job.

Hope this helps.

Collapse
 
buphmin profile image
buphmin

This is always a hard question. Now as a disclaimer I have never actively worked with any of these languages, though I did take a udemy class on C++ so I know a bit more about that.

It seems to me like java and C# are going to be to be the most versatile. C++ CAN be used for anything but it will likely take you a lot longer. It seems to me that C++ is most useful when you need the extreme performance AND have horizontal scaling constraints. For instance a video game has to run on one computer with finite capabilities. For something like a web server or microservice you can just add more servers to handle more load.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀 • Edited

I have wrote some bits and bobs in all 3

C# is the nicest but ties you to dot net and Microsoft
C++ is the most painful and complex but very powerful and rewarding, many many uses
Java is okay, it's like the others but has less uses as not native and tied to Java Virtual Machine

Collapse
 
turnerj profile image
James Turner

I can't speak for C++ or Java but C# is only getting better with .NET Core and all the work Microsoft and the open source community is pouring into it.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Modern C++ does indeed handle memory automatically, assuming you're using the tools to do so (smart pointers, et al). However, I would say that the extra thought that goes into considering the lifetime and ownership of your objects in relation to their pointers will help you become a better programmer.

There's also a lot to be said for gaining a working proficiency in C, even if you seldom use it. The habits you form there wind up being beneficial across many languages!

Meanwhile, I do not recommend learning Java as a first language, even though it's helpful to learn later. Java introduces so many insidious or otherwise lazy coding habits that lead to terrible practice in other languages. Only by first understanding, say, C++ or Python (or any number of other languages), do you realize how many Java "best practices" are actually worst-practices elsewhere (or, you know, even in Java despite popular belief).

Collapse
 
eljayadobe profile image
Eljay-Adobe

If you want to be a better programmer, learn F# or Haskell. If you prefer JavaScript, learn Elm.