• Ever wanted an RSS feed of all your favorite gaming news sites? Go check out our new Gaming Headlines feed! Read more about it here.
  • We have made minor adjustments to how the search bar works on ResetEra. You can read about the changes here.

What will be the most relevant programming language in the next 3–5 years?

  • C++ (Unreal Engine)

    Votes: 242 55.9%
  • C# (Unity)

    Votes: 160 37.0%
  • Rust

    Votes: 8 1.8%
  • Godot and its ecosystem (was used for Sonic Colors: Ultimate)

    Votes: 5 1.2%
  • TypeScript/JavaScript (RPG Maker, Cross Code was built in JS)

    Votes: 12 2.8%
  • Other (please reply with the name of the language)

    Votes: 6 1.4%

  • Total voters
    433
  • Poll closed .
Apr 2, 2021
2,083
I've been using Unity and C# for years and I do like it, but when I look at job listings almost all of them say they want Unreal experience. I've also met people in the gaming industry who don't know programming languages at all, but use Unreal's visual scripting (Blueprints) to program and are handy with how to use Unreal.

My plan when I have time to learn new stuff is to hop immediately into Unreal and Blueprints, followed by c++. It's a shame, because I like Unity quite a bit and have become comfortable with it. I would still use Unity for my personal projects but I feel like Unreal is going to help people get hired.
 

Chakoo

Member
Oct 27, 2017
2,853
Toronto, Canada
C++ isn't going anywhere long term for big games yet since you're starting out and know JavaScript/Typescript, have you given playcanvas a go? You'll get something that is unity like that let's you start building a game in a language you're more familiar with.

playcanvas.com

PlayCanvas - The Web-First Game Engine

Collaboratively build stunning HTML5 visualizations and games

Game development is hard, no use complicating it further by throwing learning a new language into the mix.
 

Gwendly_

Member
May 27, 2020
165
C++ and C# both lets you pivot easily to corporate/gov jobs if you find that being a gaming dev isn't for you so I'd go with either one of those as a start
 

Kazooie

Member
Jul 17, 2019
5,071
I'd say C# because Unity is the more popular choice for small dev. Also it has amazing tool support thanks to Microsoft. In the end however, if you learn one object oriented relatively strongly typed language on an imperative basis you basically can use all of them.
 

hobblygobbly

Member
Oct 25, 2017
7,665
NORDFRIESLAND, DEUTSCHLAND
I'm a systems developer that works on security, embedded software, and archiving systems, and we mostly use C for our backend technologies, and use C# for middleware connectors we develop that interface with our C backend, and our frontend software is also C. However I have also done a lot of graphics programming

C# in the the business world is dominant

C++ is a shit language thats only relevance for being around today in any industry is due to the fact that there's tons (of awfully designed) libraries, but a lot of them, so you can find stuff for almost anything.

In game development C++ is only relevant for engine developers, simply because of saturation I mentioned above, not because it's good. In any case, gameplay programmers and many others aren't using C++ much today, they're using stuff like an engine's visual scripting language that comes with engines like Unreal or using the engine's typed script language

The reason why Unity is so popular not just for games, but any multimedia, is that it uses C#, because a lot of people from the general software industry know C# or know adjacent languages like Java which is very easy to transition from. It's also not as awful like Java or C++

For hobbyist, any development not even just games, C++ is awful and should be avoided, If you want a low level language, use C. If you want a high level language, use C#. And trying to do OOP with game architecture is awful and doesn't work, which is why you don't need C++.

Rust is a fool's errand for game development because the core strengths of the language is not important for game development, you want dynamism and fast prototyping, Rust isn't that because of its stringent security philosophy that guides everything in the language, Rust is suited for the areas I work in profesionally, not games (even if some are using it as such)

This is required watching if you want to do well in the technology stack and write good code. This is from Mike Acton the former engine director at Insomniac, basically shitting on C++ and OOP design at Cppcon. But it's a really good talk on what to do and what not to do

https://www.youtube.com/watch?v=rX0ItVEVjHc

 
Last edited:

johan

Member
Oct 29, 2017
1,554
Does rust have easy to use, popular libraries for 3d rendering audio, physics, 3d math etc etc?

I doubt it. And when starting out having those libraries and having a large community to learn from is worth its weight in gold.

arewegameyet.rs

Are we game yet?

A guide to the Rust game development ecosystem.

Bevy seems nice. And like mentioned earlier Embark is investing heavily in Rust.

*Kind of. C# can introduce a very different kind of mistake, you can have objects refer to eachother in such a way they escape garbage collection, and then become permanently inaccessible. You can also have the garbage collector just work against you and suck all the performance away as it keeps reallocating objects in pointless ways. That kind of control is what you give up in a managed language. C++ you can produce similar kinds of mistakes in memory allocation, but it should always be on your mind when using it as you also have to manually allocate the memory yourself as well in the first place.

This is the reason why so many people think Unity is a bad engine and/or performs bad. It's usually because developers don't know how to deal with the garbage collector/memory managemant. It doesn't really bite you in ass if you do it wrong unlike when writing C/C++. Unity can perform very well if used right - especially now with the Burst compiler and their ECS. It's also really easy to rack up draw calls if you don't know what you're doing; which will fuck up your performance even more.

Having said that if you want the real fancy graphics you're better off using Unreal probably.



Anyway, I am a professional (freelance) Unity developer and C# is a very nice language to write. Coming from js/ts you should feel quite at home. So it wouldn't hurt to learn that, and in the process you can get familiar with game engine concepts and initricacies while messing around in Unity.

Like others have said, if you want to do engine programming/AAA stuff, C++ is the way to go. Check out Game Engine Architecture by Jason Gregory if that sounds interesting to you.

Rust is super cool and should be the future. I am not sure if it will be the future. I am not qualified to really speak on that lmao
 

Edward850

Software & Netcode Engineer at Nightdive Studios
Verified
Apr 5, 2019
998
New Zealand
As a useful note for what we are using ourselves, while it is because it's an inhouse engine, we are running many different languages for our Kex Engine projects, including;
  • C99 and C++14 (or 17?) for the core engine and game modules.
  • AngelScript for game behavior scripting and user-facing modding support. We actually wrote native ARM64 support for this explicitly because we used it so much on the Switch, so you can technically include ASM in the list as well.
  • C# (.NET Core) for network services and the occasional specific tool for file manipulation.
  • Python for our asset build environments.
The take aways from this are:

C99 still shows up even today, though this may be just an us thing as we still libraries that use it. This is intentionally on both our part and theirs; there is no point reinventing something that already exists, and those libraries won't change their compatibility as they get used by a lot of legacy projects as well. This may come up even when working with Unreal, and it's fully compatible with C++ within the same project (but not the same files!). Compiler behavior for mixing C and C++ can be inconsistent but not drastically so.
Fun fact, Strife Veteran Edition is still primarily C99 on the Nintendo Switch, though with the Switch controller code being in C++. All platforms still support the language.

C++ is the de-facto standard for us, we even convert game code to it, such as Quake. It is a language that offers no safety barriers between you and the memory so you can really break a program if you don't pay attention, but we wouldn't replace that with anything else. Memory management is very important to us with our very abstracted engine, and other languages do not offer the same level of object orientation and memory flexibility.

Despite how it looks, you don't have to use any of it's complex OOP behaviors at all, and can just stick to class inheritance, if even that. Though Unreal sure do like their use of templates, not one of our favorite things to use.

But C++ is a language where you need to manage the memory yourself. A useful trick? Read up on Doom's Zone Memory allocator (yes, the 1993 Doom), and write something like that for yourself and always use it to allocate memory (well, wherever possible). It's very powerful to debug where all your memory is going, especially when you want/need to budget it or track down a leak. You can make C and C++ more powerful than any other language by writing managers designed for your game, though at the cost of more time and effort.

AngelScript is the odd one out. Not much use for this thread but useful to point out that you may even run across languages you never considered. You can safely ignore assembly however, that's something you'll never need to touch nowadays, and shouldn't. We touch it so you don't have to.

C# is a great utility language for if you need to write something secure or just aren't that comfortable with memory management and threading. All it's protections come built in, and classes are always referenced rather than copy constructed by default so it's difficult to accidentally make 500 of something. You are at the whims of those systems however, if you are doing everything normally it's fine, if you fight against the grain things can get really bad. It's not as fast as C/C++ because of this, though nothing else really is. How much slower really depends however and may not even be relevant, but do keep that in mind if your goal is to make a 1000 player battle royale.

Python is very versatile and easy to learn, and can be applied in some of the most unexpected of places. XKCD was right.
 
Last edited:

correojon

Banned
Oct 26, 2017
1,410
To answer the question in your poll: *points to avatar*

I deal with a lot of students trying to get in the industry and one of the biggest hurdles is that they don't know low level programming with C++. Even tiny studios can get nearly 100 applicants and the ones who can answer questions about the performance concerns when dealing with polymorphism are the ones who get the job. But if you're a hobbyist, C# should do the job. Odds are you're never going to have to optimize your code for cache.

When it comes to being a hobbyist, if you care about low level programming/optimizations learn C++. If you just want to get your game out the door, Unity/C# will do the trick.
This. Also consider that when making games as a hobby, sometimes it's better to write code that just does the work instead of wasting time in optimized, scalable code (in fact I find it much better to prioritize clean code VS performant code). Just focus first on getting things done, once you reach that step when you have a FUN playable prototype or a vertical slice you can start thinking about optimization.
  1. So with that said, if you just want to make games, you can even use simpler stuff like Game Maker.
  2. If you want to make games and learn more useful stuff along the way, Unity/C# is the best combo IMHO.
  3. If you want to get into game development seriously, you should choose Unreal/C++, but I'd say just asking this question in ResetEra should be a very big hint that you shouldn't be choosing this option.
 

trashbandit

Member
Dec 19, 2019
3,911
Rust is a fool's errand for game development because the core strengths of the language is not important for game development, you want dynamism and fast prototyping, Rust isn't that because of its stringent security philosophy that guides everything in the language, Rust is suited for the areas I work in profesionally, not games (even if some are using it as such)
This is arguably not true. The primary reason for the existence of Rust is to achieve greater memory safety by removing certain classes of memory bugs, without sacrificing execution speed. Will it remove enough of those kinds of bugs to make the industry flip over from C++? Probably not, but if the potential for Rust to remove certain kinds of bugs is there, I'd hardly call that a fools errand. That work should be done, and in the worst case, people carry on with C++ as they have for decades.
 

Dreamwriter

Member
Oct 27, 2017
7,461
In the next 3-5 years, I see VR/AR becoming more important, and Unity's the best engine for that, so C# is my vote. But really, you can't go wrong with any C language, once you know one, the others are easy to pick up.
 

Dreamwriter

Member
Oct 27, 2017
7,461
Is Apple's "SWIFT" programming language worth it?

www.apple.com

Swift - Apple Developer

Swift is a powerful and intuitive programming language for iOS, iPadOS, macOS, tvOS, and watchOS. Writing Swift code is interactive and fun, the syntax is concise yet expressive, and Swift includes modern features developers love.
If you want to do any iOS programming, it's a necessity.
Well, or C# with Unity. Unity can do very performant iOS without needing native development.
 

Deleted member 1849

User requested account closure
Banned
Oct 25, 2017
6,986
In the next 3-5 years, I imagine Unity will still dominate in the indie gamedev space, so C#.

However, looking at recent trends I think there's a good case to be made about Godot's growth potentially putting it into a solid second place. GDScript will never become one of the most important languages though because it's engine specific and not used anywhere else except for Godot. If your goal is simply to learn a language for general use please do not make it this one.

Core engine components will stay mostly written in C++, so if you ever want to get into engine development that's a good thing to keep in mind. The majority of indie devs do not make their own engines these days, but it can be an interesting project to attempt.

That's gamedev specific advice. If you want to learn a general purpose language I'd recommend something like Python instead. It's used quite literally everywhere. It's not the most performant of languages (and libraries which do run quickly usually use a higher performance language like C++ or Fortran underneath), but its hard to beat when it comes to being an easy do everything language.
 
Last edited:

melodiousmowl

Member
Jan 14, 2018
3,777
CT
i am going to say gird your loins and write something small but functional in c (use sdl or something)

then write in something else and gain an appreciation for all the things that you normally would take for granted that other languages take care of for you that c doesn't.

no oop, no automatic allocation and garbage collection, etc.

i say use something like sdl because you also want to be comphy working with an api
 

sox

Member
Oct 27, 2017
660
If it's just for a hobby, I personally love Pico-8 for dev which uses Lua. Has limits on what you can make in terms of scope but you're just one person anyway and I find it helps rather than hindering when getting started.
 

RPGam3r

Member
Oct 27, 2017
13,661
Unless one of the main engines shifts away from C++/C# it's not going to change in that short of a timeframe. I only return to these languages when playing around making game stuff.
 

PaulLFC

Member
Oct 27, 2017
3,177
If you're at the point where you still ask about programming languages, just figure out what toolchain/engine you want to use and let it dictate the language. The actual programming language just doesn't matter that much as a beginner - maybe just try to choose something "easier" and most importantly something with lots of guides and external resources. Unity is probably a good place to start, and that implies C#.

Whatever you do, don't swap back and forth or research endlessly in some futile attempt to minmax the decision like so many people do.
Very much agree with the last paragraph here, talking from personal experience.

At university on my Computer Science with game development course we learnt C# for the first 2 years and my grades were good to excellent.

For our final year project we were told "Pushing yourself out of your comfort zone, for example using a different language, will be looked upon favourably". So I decided to use C++, which I wasn't familiar with. I struggled big time, spent so long getting it working that I could only turn in a very basic game, and only scraped one grade above a pass.

Thankfully in a stable job now, but I wasn't happy with my final year and how much it dragged my grade down.
 
Feb 1, 2018
5,269
Europe
C#

I will also be very useful if you have to design cloud systems or backends.

I have used ASM, C, C++ and C# in all my gaming projects over the years.

I feel old :)
 

GMM

Banned
Oct 27, 2017
5,484
Both C++ and C# are versatile languages that will remain relevant for years to come, especially C# if you are in to web development due to .NET Core and its syntax making it easy to adapt to something like TypeScript.

C++ is absolutely king when it comes to game development because it's easier to write and compile performant applications using it, Unity for instance has spent years trying to make up their performance issues with initiatives like IL2CPP and Burst.

Blueprint in Unreal Engine is great for small tasks, but it will eventually buckle when used at a very large scope, I have seen many developers advising that blueprints should only be used for minor components due to their runtime overhead. There's also things you can't do with blueprints because the engine might not expose certain functions and you would be by the mercy of waiting for Epic to expose those functions or write the C++ code to make a proxy call for that function that is exposed in Blueprint, it's not ideal for advanced use.

At the end of the day it's all about what you want to accomplish, I am a seasoned C# developer that have been using Unity in a professional context for the last seven years and a fair bit of Unreal Engine as well. Both engine are great for various things and they also do plenty of things poorly, there's no clear choice to make since it depends on what you want to do.

I would recommend that you figure out what you want to make, what tools you should ideally be using and from there let the tools dictate what language you focus on.
 
OP
OP
Nachos

Nachos

Member
Oct 26, 2017
802
Thanks for the replies, everyone. I'm going to be looking into C#/Unity for now. At the very least, I might be able to start using it in personal web dev projects, too.

I do think I'm going to miss how powerful TypeScript's structural typing is, though. I much prefer it to the nominal typing of most other static languages. You can do some wild things with it nowadays.

With respect to the poll, relevant to what? What do you want to actually do? Make a game? Learn some technology? Write an interesting renderer? Build a cool editor/tool? Write some backend event processing system for supporting transactions at scale?

I'm realizing now how broad that thread title is. Let's say, most relevant in the scope of 1–2 developers coming together to release a game on Steam, so very likely a small game with a very restricted scope.

To answer the question in your poll: *points to avatar*

I deal with a lot of students trying to get in the industry and one of the biggest hurdles is that they don't know low level programming with C++. Even tiny studios can get nearly 100 applicants and the ones who can answer questions about the performance concerns when dealing with polymorphism are the ones who get the job. But if you're a hobbyist, C# should do the job. Odds are you're never going to have to optimize your code for cache.

When it comes to being a hobbyist, if you care about low level programming/optimizations learn C++. If you just want to get your game out the door, Unity/C# will do the trick.

My first language was actually C, as part of Harvard's CS50 course 2–3 years ago, but I haven't touched it since the first few weeks of the class. So I'm aware of a lot of lower-level computer concepts, but am kind of privileged in that I have the V8 engine to iron things out for me. If I already understand the basics of time complexity, how much more perspective might C++ be able to give me?

I've never seen C++ referred to as low-level before.
Then again I'm an electrical engineer.
I mean, it's all relative. I'm mostly coding in TypeScript, which gets transpiled to JavaScript, which then gets JIT compiled by things like the V8 engine. C++ is certainly more low-level than that.

Ask yourself, what sort of a game dev person do you want to be? That is a far bigger question than you might think.

Do you want to be an engineer? If you want to be an engineer, going with C++ is the obvious choice and will open the most doors. C# is a good second option.

I think that if anything, I'd be leaning more towards the engineering side of things. Probably not full-on engine development, but maybe something adjacent to graphics. I've been interested in shaders for a while.

*Kind of. C# can introduce a very different kind of mistake, you can have objects refer to eachother in such a way they escape garbage collection, and then become permanently inaccessible. You can also have the garbage collector just work against you and suck all the performance away as it keeps reallocating objects in pointless ways.

Isn't that basically all garbage-collected languages, though?

If it's just for a hobby, I personally love Pico-8 for dev which uses Lua. Has limits on what you can make in terms of scope but you're just one person anyway and I find it helps rather than hindering when getting started.

I had never heard of Pico-8, but that sounds like a fun summer project.
 

SilentEagle

Banned
Jan 9, 2021
5,902
I think C# is the best for indie devs because of the Unity

Rust is amazing language btw. And the language has very bright future. As a Java developer, I might start learning Rust too.
 

Oklusion

Member
Nov 22, 2018
159
So, I work in AAA game dev and so far I've used C++, C#, Lua, Python, Actionscript 2 (basically an old version of Javascript)... should I continue?

Point being, just get the fundamentals straight, you're going to be learning new stuff constantly.

That being said I would love if Rust became the goto lenguage for games, it's C++ but straight up better in every way.
 

GameDev

Member
Aug 29, 2018
559
If I already understand the basics of time complexity, how much more perspective might C++ be able to give me?

Theoretically, tons. Time complexity is only a piece of the puzzle when it comes to game performance. Your game code has to be compiled by a compiler to to run alongside an operating system on physical hardware and to get the most performance you need to know how write code that is friendly to compilers/operating systems/computer hardware.

You know when you hit the button to build and run your code? There's a position on bigger projects called a build engineer, and their only job is to make sure the game and its supporting applications build and run. Major studios will have entire teams dedicated to this. As games become bigger, they have to deal with more and more complex support libraries and additional build steps and the compilation process becomes more and more complex. Any non-trivial piece of software has bugs and these support libraries are no exception.

Personally, there is no way I could ever be a build engineer. Whenever I got assigned build errors, I knew it was not going to be a happy sprint for me. However, there are people who are really into getting into the nitty gritty of OS architecture, hardware architecture, compiler architecture, engine architecture, etc.

Time spent on optimizing your code is time you could be spending adding game play features to your game. Low level programming is one of the many rabbit holes you can go down and if you're interested in the intricacies of how games work it might be a worthwhile endeavor, but odds are players are not going to notice any of this work. There are hobbyists I know who are really into hand rolling memory allocations systems for their own pet engine projects, but most just want to get their game idea from their brain and into players hands.
 

Turnabout Sisters

The Fallen
Oct 25, 2017
2,363
I'm a systems developer that works on security, embedded software, and archiving systems, and we mostly use C for our backend technologies, and use C# for middleware connectors we develop that interface with our C backend, and our frontend software is also C. However I have also done a lot of graphics programming

C# in the the business world is dominant

C++ is a shit language thats only relevance for being around today in any industry is due to the fact that there's tons (of awfully designed) libraries, but a lot of them, so you can find stuff for almost anything.

In game development C++ is only relevant for engine developers, simply because of saturation I mentioned above, not because it's good. In any case, gameplay programmers and many others aren't using C++ much today, they're using stuff like an engine's visual scripting language that comes with engines like Unreal or using the engine's typed script language

The reason why Unity is so popular not just for games, but any multimedia, is that it uses C#, because a lot of people from the general software industry know C# or know adjacent languages like Java which is very easy to transition from. It's also not as awful like Java or C++

For hobbyist, any development not even just games, C++ is awful and should be avoided, If you want a low level language, use C. If you want a high level language, use C#. And trying to do OOP with game architecture is awful and doesn't work, which is why you don't need C++.

Rust is a fool's errand for game development because the core strengths of the language is not important for game development, you want dynamism and fast prototyping, Rust isn't that because of its stringent security philosophy that guides everything in the language, Rust is suited for the areas I work in profesionally, not games (even if some are using it as such)

This is required watching if you want to do well in the technology stack and write good code. This is from Mike Acton the former engine director at Insomniac, basically shitting on C++ and OOP design at Cppcon. But it's a really good talk on what to do and what not to do

https://www.youtube.com/watch?v=rX0ItVEVjHc


Thanks for this, I am a long time programmer but my efforts to get into game programming have always ended up nowhere. I've come to think that it might be because I try to understand it in terms of OOP (I program multithreaded C++ for my job).
 

anaa

Unshakable Resolve
Member
Jun 30, 2019
1,560
Keyword here is small hobbiest dev. If you're just looking to roll your own game unity/c# is the way to go. Monogame/FNA is another good ( multi platform ) 2d option that spawned from xna which is also c#. Godot also supports c# FWIW. Its super friendly to write too, which is great as a hobbiest.
Unless you are really obsessed with having extremely performant code , or with learning the 'bare metal' apis for OpenGL/vulkan etc c++ is overkill. Unreal is also a super bloated engine imo and not super tailored for small scale projects.
 

Necromanti

Member
Oct 25, 2017
11,565
Boy, am I glad I gave up on any game dev ambitions very early on, because C++ is definitely not my jam. (It was almost my first and last langauge.) I enjoyed C# the little I played around with it, though (with my very basic Java experience), so now I feel more justified going the Unity path for hobby dev.