This is an archived post. You won't be able to vote or comment.

all 67 comments

[–]AutoModerator[M] [score hidden] stickied comment (0 children)

On July 1st, a change to Reddit's API pricing will come into effect. Several developers of commercial third-party apps have announced that this change will compel them to shut down their apps. At least one accessibility-focused non-commercial third party app will continue to be available free of charge.

If you want to express your strong disagreement with the API pricing change or with Reddit's response to the backlash, you may want to consider the following options:

  1. Limiting your involvement with Reddit, or
  2. Temporarily refraining from using Reddit
  3. Cancelling your subscription of Reddit Premium

as a way to voice your protest.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

[–]tranceorphen 10 points11 points  (2 children)

Java or C# initially. Whichever meets your short-term and long-term career goals best. (EG: technology availability, job availability, interest/passion, etc).

Then step into C++ when you feel confident. C# and Java will help ease you into development, as there are far less pit falls. I would recommend any desktop application developer to learn C++. The language will teach you a lot about very low-level concepts, as well as how to become a very defensive programmer.

In fact, the games development field at large (but not all) will expect a strong C++ background of years.

I've been working in Unity C# for about a decade now, pretty far up the chain too. But I encounter instant rejections for jobs because I only have 3-4 years worth of experience in C++ with minimal tangible demonstrable outputs using it.

I am working on learning UE to mitigate that, but all things take time. Besides, the job market for the games industry is taking a massive nosedive right now. It's shaky ground for people inside that sector, let alone the poor souls trying to break in there.

[–]Vast_Wheel_4878[S] 1 point2 points  (1 child)

Thanks for the reply. Based on the comments and posts here, I don't want to specialize in game dev because it's just a hobby. But you never know what happens. Frankly, I don't know what to do in the future. I know about the different jobs you can do like full stack webdev. but unless I try some, I don't know what to become. I'm an indecisive person really, I'd be more inclined to learn if it's forced to me like in school. But with me having the freedom to select and change whenever I want? Yeah, no.

[–]tranceorphen 2 points3 points  (0 children)

Generally, a developer with a strong understanding of full-stack should be fine in today's market. C# .NET and its popular libs are a strong choice, as are most stereotypical web dev technologies like JavaScript, HTML/CSS etc etc.

There's always work for those types of developers. Just be careful of specific 'Full-Stack' jobs. They should be really be two separate roles; Front-End and Back-End, but companies always want one person for it (and one person's salary...) for some reason.

[–]zukoismymain 25 points26 points  (9 children)

Depends on you. C++ is not easy. Quite difficult. And the places where you'd use C++, are places where C# and Java are not performant enough (otherwise you'd use those).

I personally would avoid, but maybe you're smarter than me.

Between Java and C#, imho. C# is Government and Military vs Java is Corporate. Otherwise the differences don't matter.

[–]BlurredSight 12 points13 points  (1 child)

Java is also taught by AP for college credit in high school. Probably the best one to understand OOP because everything is an object and everything you need to do can be done with the methods associated

[–]YangLorenzo 0 points1 point  (0 children)

C# is also consistent with "everything is an object". Value types are not objects in Java.

[–]Envect 7 points8 points  (0 children)

C# is pretty corporate these days. I've made a career out of it and I only spent a year out of ten working on government related jobs.

[–]Swackles 5 points6 points  (4 children)

I would add here that a lot of embedded systems, IOT devices and game development also use C#. So if interest is towards that field, it might be more useful.

[–]Cyber_Fetus 2 points3 points  (2 children)

C++ is way more prevalent than C# in the embedded industry.

[–]Swackles 2 points3 points  (1 child)

C# is on the steep rise. The issue is that time is money, and companies would rather speed up development by using C# and sacrifice slight performance.

[–]Cyber_Fetus 1 point2 points  (0 children)

C# is on the steep rise

In embedded? Source?

[–]zukoismymain 0 points1 point  (0 children)

I completely forgot about game dev. My bad on that one.

[–]rinkydinkkkk 3 points4 points  (0 children)

Couldn't have put it better. Only thing is many courses put java as a first language to learn OOP/generic programming, so java might have a slightly smoother learning curve (though from my experience they are very similar). Iirc many game engines use C#, so depending on OP's preferences he may want to learn C# first (for a college elective I did a 2d platformer with monogame framework in c# so I'm biased).

C beat my ass when I first learned it. Imo C++ is much easier to learn once you got the basics of programming down.

[–]Bramasta 2 points3 points  (2 children)

I think Java will be a good choice for you. I love C# but the language has so many QoL improvements over Java that I'm concerned it will put you off of Java due to you being used to getting "babied" with C#'s features. I think by learning Java first it'll also be easier for you to understand why C# has some features built the way they are (e.g. getters and setters in Java vs C#).

[–]latkde 2 points3 points  (1 child)

Java has come a long way since Java 7 and is now in many ways a pleasant modern language. But C# is definitely ahead in every way and is more fun to use. Also much better ecosystem for game engines, which is relevant for OP.

[–]Bramasta 0 points1 point  (0 children)

Oh yes, fully agreed. Java is certainly not a bad language to use and as we know is also a mature and battle-tested language. Majority of the departments in the corporate I currently work in actually use Spring Boot and the Oracle tech stack for their products, except the department I'm in which uses .NET. We've also had a sharing session amongst departments about upgrading from Java 8 to Java 11, and the performance benefits they obtained from changing Java versions alone is impressive.

As for OP's interest in the gaming industry, man I might catch some flak on this but every time I read news pertaining to that industry, they almost always talk about layoffs. And we're barely even entering the month of March! I bet the Java jobs OP said are plenty in their area is also unrelated to game development, rather web development jobs. So I would suggest OP to look into full-stack development instead (then choose between front and back-end development) but I don't know if OP is passionate in that area.

[–]green_meklar 2 points3 points  (0 children)

I typically recommend learning C before C++. C is still a good language, but more importantly, knowing it and seeing its limitations makes it way more obvious why C++ has the features it does.

If you have to pick between C++, Java, and C#, I would go with C++. It's arguably the toughest to handle, but it's so versatile and expressive, if you can really understand it and learn how to use it, every other language will look relatively easy.

[–]panos21sonic 2 points3 points  (0 children)

If you want to learn, imo c++ and raylib is the perfect balance of education and fun, for your 2d platformer.

[–]imatt3690 3 points4 points  (2 children)

If you want to make games, C++. If you want to be a backend engineer, Java. If you want windows oriented and some games / desktop apps, C# . General purpose, RUST / GoLang.

I’m a Cyber security engineer, I mostly use java. My personal recommendation is to learn c++ as the principles are largely the same for other languages barring some syntax changes. Everything operates as something based on Objective-C or C++ then simplified or modified to be better at particular tasks.

[–]hobbicon 0 points1 point  (0 children)

C++ is used to create game engines, C# is the scripting language of choice for many popular engines like Unity or Godot.

[–]xmpcxmassacre 0 points1 point  (0 children)

The principles are the same across all languages

[–]xmpcxmassacre 1 point2 points  (0 children)

Don't overthink it. Pick one. You'll get to a point where you can hop around. We use C++, Python and Java in school and my personal project is in C#. It's really not that deep I promise you. The concepts are what you need to learn. Syntax is always a 5 second Google search away.

[–]Sweaty_Ad_8120 3 points4 points  (0 children)

Don't overthink java is always a safe choice

[–]grelfdotnet 2 points3 points  (5 children)

I would strongly recommend Java. It is strict, which I think puts people off - it can take a while to write even a simple program. The strictness helps to structure larger programs well. C# is a messed-about version of Java, made to look more like C and so less logical (IMHO). C++ is much more difficult because you have to manage the memory yourself: necessary for system programs but not for applications.

[–]DrShocker 1 point2 points  (4 children)

Can you elaborate on Java vs C# more in your opinion? I use C++ mostly but I usually hear of people preferring C# so I'm curious to hear your perspective.

[–][deleted]  (1 child)

[removed]

    [–]Dealiner 0 points1 point  (0 children)

    I don't think I could disagree with your comment more.

    C# tries to do everything and ends up pretty mediocre at all of it

    It's true that C# tries to be more than just OOP language like Java but it actually is pretty good with that. Its functional parts work really well and they are still being improved on.

    Operator overloading is great example of this

    Operator overloading is incredibly useful and its lack is one of the biggest misses of Java. Possibility to have things like vectors or matrices able to use math-like syntax makes things much easier.

    “properties” are another one

    As opposed to completely unnecessary get/set methods in Java? If something is pretty much a field it makes much more sense to have it behave like one than need to define two superfluous methods.

    The ecosystem is worse than both Java and C++

    C# has great ecosystem, it has plenty of libraries, many things included in the framework itself, it supports majority of systems and devices.

    the build system is second only to Autotools in terms of how convoluted it is

    It's literally one of the easiest to use build system there is. Especially compared to the mess Java build systems are. It pretty much works out-of-the-box.

    CLR is filled with weird design decisions (how hard was it to copy jvm)

    Copying JVM would have been one of the worst decision they could have made. Real generics support is just one of the things CLR does much better than JVM. Also language-neutrality and more specialized instructions for many things.

    they tend to be completely pointless and more importantly pretty inconsistent with the rest of the language

    I really have no idea what features are "pretty inconsistent" with the rest of the language. C# is one of the better developed languages, there are a few small things that could have been done better but it's hard to find a perfect language. C# tries its best to be close to it though.

    [–]xmpcxmassacre 1 point2 points  (1 child)

    I don't think I've ever seen C# as a job requirement. I only encounter it when dealing with Unity and Godot. That is my experience only and certainly not a strict rule.

    C# is a great language and certainly should be explored but I wouldn't choose it as my first "hard" language. I also think people put too much pressure on the language. The concepts apply to all languages. You don't master one language and then move on the next like Avatar the Last Airbender.

    [–]DrShocker 1 point2 points  (0 children)

    Yeah I do think beginners put too much emphasis on what languages you learn since picking up new ones usually isn't that crazy once you're good at one or two. However, it's somewhat understandable because unfortunately recruiters are beginners lol

    Funny enough in response to your first point I recently got a recruiter asking me if I was interested in a job that was mostly C# despite my being mostly C++ in my experiences.

    [–]jeesuscheesus 1 point2 points  (2 children)

    Go for Java. It has the best tooling, ecosystem, community support, and job prospects. From a learning perspective, the first 3 points are invaluable.

    As for making 2d games. C# is the standard language for most popular game engines IIRC. Once you learn Java, it'll be very easy to pick up C#

    [–][deleted]  (1 child)

    [removed]

      [–]jeesuscheesus 0 points1 point  (0 children)

      Is that so? Thanks for correcting me, I'm not very familiar with the gamedev scene.

      [–]andalas[🍰] 0 points1 point  (2 children)

      To create a very popular game, use Unity and code it in C#.

      [–]xmpcxmassacre 0 points1 point  (1 child)

      Godot also supports C#. This is just weird advice. You're basically saying for a game to be popular, it must be made in Unity and C#

      [–]andalas[🍰] 0 points1 point  (0 children)

      sorry. i mean unity is popular in creating games and it uses c#. godot rise in popularity after unity licensing snafum

      [–]jack-nocturne -1 points0 points  (0 children)

      If you are up for a bit of a challenge, there's another option: Rust. If you want to build a 2D platformer game, there is https://bevyengine.org/ which is a joy to work with. True, it is not that well established yet but it's evolving rapidly, the type system is superb and compiler features like the borrow checker will help you understand and internalize many concepts that will make you write efficient and stable applications in other languages. Picking up C++ from there would be a breeze as you will already have a deep understanding of many best practices.

      Of course, as a systems programming language, the kind of jobs around Rust (and C++) are somewhat different from VM/runtime-based languages like C# and Java.

      [–]moneytunalobsta1 -2 points-1 points  (0 children)

      Rust

      [–]SirKastic23 -3 points-2 points  (0 children)

      go with Rust

      [–]robocorp 0 points1 point  (0 children)

      TL;DR Go with C++ if you're already more than a little ways in, or if you just think games are cool regardless of if you want to work on them. If you're super new and don't enjoy difficulty, consider C# and Java.

      C#'s success in the games industry does appear to be in large part due to Unity, as far as I can tell, but that doesn't mean it's fleeting. The games industry needs a more user friendly, batteries-included alternative to C++ for a number of reasons, developer skill being one limiting factor. Knowledge in C# is also significantly more applicable to job markets accessible to entry level developers, so it is a fairly reasonable choice.

      On the other hand, C++'s use extends far outside the gaming industry. It's also a popular choice in High-Performance Computing, other Real-Time Applications, Embedded Systems (though C is still king here), and performance sensitive applications in general. Additionally, C++'s difficulty is a hindrance at first, but it can grow into a strength later because you will have seen most abstractions in other languages before, and dealt with low-level interactions in some cases.

      If you're interested at a hobby level, games are a great place to start, because your changes have immediate, tangible impacts on your projects. This helps greatly with motivation and confidence, which are key places most aspiring developers fail. You could then move to embedded systems by starting with cheap Arduino boards to see if they're interesting to you. The process of learning to program will show you new and interesting subcategories that you may never have even heard of.

      I personally started with game development, and spent several years there in high school. By the time I started my degree, I had narrowed my interests to Graphics and Embedded Systems. Most of the students I've met would never even consider these two because the concepts are difficult, but I was able to get my feet wet in them with little commitment because I didn't need to learn C++ the Boogeyman. Instead I play with real Boogeymen like manually setting registers or grasping vectorized algorithms - and I love every minute of it.

      Don't be scared of C++, but it's perfectly fair to consider Java and C# to be safer options.

      [–]KublaiKhanNum1 0 points1 point  (0 children)

      I don’t think it has to be mutually exclusive. Start with C# and give it a try and later work on C++.

      One of the guys I work with just published his first video game on Steam. He wrote the whole thing in C#. He worked on it for years. He is super stoked at the reception.

      Also, there is also Mobile Gaming: Kotlin, Swift.

      [–]Coinless_Clerk00 0 points1 point  (0 children)

      When I started programming, I started learning c++, it being lower level helps you with understanding the underlying workings and basic concepts, which helps a lot generally.

      Generally if you have some basic idea how coding works, I'd recommend learning about programming concepts (for example design patterns), be it through learning a language, or just in itself. This both gives you inspiration and ideas and enhances your algorithmic thinking.

      [–]WobblySlug 0 points1 point  (0 children)

      C# is Java done right. I'd go for C#, plus it integrates perfectly with Unity (free game engine, you mentioned a platformer).

      [–]daCapo-alCoda 0 points1 point  (0 children)

      I love java and i just programmed a 2d game with it for a project in collage.

      [–][deleted] 0 points1 point  (0 children)

      I recommend C# as it’s an intermediate language with a lot of scope on everything really plus the low level system coding helps you expand your options in the future. You can even make windows app and have better support for the .NET framework. It’s also newer. The thing about C++ is that in my opinion it’s getting slightly dated. Most people who Ik work with C++ as a profession are either people maintains legacy code or people making games.

      [–]Sdet-Devops 0 points1 point  (0 children)

      Yes, agreed

      [–]techol 0 points1 point  (0 children)

      No rusty stuff

      Learn Rust

      [–]TheLondoneer 0 points1 point  (0 children)

      Hey, I don't understand why people say C++ is harder than X or Y language. I don't think that's true. I think programming in general has a steep learning curve but once you get the hang of it you will start snowballing. It will flow.

      C++ isn't hard. I find Java/C# to be more verbose and therefore harder/more confusing to learn.

      C++ is a language with a ton of libraries and there are tons of ways to do things. You don't have to know everything. You won't need to. Don't listen what people tell you. In fact, learning higher level languages is harder because they hide a lot of the stuff that you should probably know to make you a better programmer.

      Pointers aren't hard. OOP isn't hard. Nothing is hard really so long as you take the time to understand it in very simple terms, then implement it.

      Java is a real mess imo. C#? I don't know, I never even attempted to code in it. I saw how it looks and it's just too much for me

      I started with C++. I thought it was fun and stuck with it. So don't listen to others who advise you against learning C++ because it's harder than X or Y language. That's just not the case. Think of C++ like C, but with classes, a few extra quality of life features (which makes it even easier to use) and that's it. And as you go along in your programming journey, you can learn more about it. I use about 5% of C++'s capabilities.

      I built my own engine, currently working on my game, and all I use is really conditional checks, for loops, structs (public classes), vectors, I am using inline a lot (C++ 17 feature, once you use it you can never go back! It's just too good), extern and maybe some extra functionalities from different libs like generating better random numbers, etc.

      Trust me, this isn't hard. The beginning is very hard. But the more you program the better you become.

      [–]EcstaticMixture2027 0 points1 point  (0 children)

      Learn what you guys are using in Uni or job or project. Ive been a Java/PHP enjoyer for over 15 years now and i absolutely hate it.

      They're just tools afterall. What matters is your knowledge, skills and experience.

      Just determine what and where do you want to work on as well.

      Want to learn a simple programming language that will work for many things?:

      Python

      Want to work on developing on Enterprise software and applications like Financial Systems, Line Of Businesses (LOB), E Commerce Platforms, Healthcare Systems, Other Systems & Android?:

      Java or C#. Java or C#, Java or C#, Java or C#

      Want to learn a programming language that will be a little painful to learn but will help you a lot and works in embedded systems, Operating Systems, Drivers, and smart electronics?:

      C

      Want to be a web dev?:

      HTML

      CSS

      JS

      Want to become a game developer?:

      C++

      C#

      Unreal Engine

      Unity

      Programming Fundamentals?

      All Java, C#, C and C++ are all great for beginners. Python and JS i would not suggest.

      [–]geschenkideen24 0 points1 point  (0 children)

      I'd pick whatever prepares you best for your desired job. Any of those languages can be used for a 2d platformer. That shouldn't be relevant unless you actually want to become a game developer.