Advertisement

Should i stop learning C# and focus on C++ for the long term?

Started by December 05, 2017 04:56 AM
7 comments, last by Rutin 6 years, 11 months ago

My short-term  goal right now is a job as a Junior Programmer in any game company, just to get my foot int the door and start earning some income.

My long term goal is to Programme for bigger more established  game companies and help games that interest me.

Im in semi-fortunate position where i don't have to work a full time job so i have the  learn how to programme.

i did my research into whats a good beginner way to start,  Unity and C# came up a lot, so i threw my hat in.

For the past 5 months i've been learning C# and Unity using the udemy tutorials at a slow but steady pace as i come from a 0 maths/ programming background.

Right now  getting the hang of things , understanding most code and the  unity engine to a point where i feel comfortable at my current level around Beginner/ Intermediate.

Although im still keen to continue with Unity, I cant help this nagging feeling that(lets say for arguments sake i do actually get a job) if i do peruse this path and end up with a job as a developer for a company that uses Unity or whatever else uses C# . There is going to be a point at however many X years down the line i am, im still using unity,  im going to be in a position where i want to work on bigger more mainstream games that use C++.

I want to get a job ASAP, i know it will take at the very least another 7 months probably, learning more code, making a portfolio and all the rest, so i dont really want to change and start from scratch again.

Im not bashing unity but it looks like its main use is mobile games, which would be perfectly fine as a starting point, but not as a long term career. 

Hypothetically  If i continue to focus on learning C# / Unity to reach my goal, and at some-point i want to move into bigger prospects and learn C++, how screwed would i be if i wanted to transition over.

Im by no means a  smart guy that picks up things fast, im just willing to put in the time/effort.

Should i scrap learning C# and unity for C++ / Unreal  or just power on through and transition later down the line after i get some experience first.

Time is a factor, but i want to make sure im not condemning myself to a path i wont like later down the line...

 

 

Regarding learning the language, I recommend learning both.  

There are many languages used on game software. C++ is generally used in systems-level work and game consoles. C# is used for game script in several engines including Unity and various smaller in-house engines, plus it is used in many tools.  Java is used in many tools and on game server-side processing, and for some things in Android programming.  JavaScript is used in web games, as are systems like Angular and Ruby and PHP and Drupal and many more besides. Python is used in many build scripts and a few tools. Swift and Objective-C are used in Apple's MacOS and iOS environments.

Game programmers aren't expected to know all of them, but generally should be comfortable with a few. When you are just starting out, a student or junior developer, a game company expects you to be reasonably competent in the language they hired you to work in.

 

Regarding the job hunt, this depends almost entirely on where you live.  You don't exist in a vacuum, and a mix of your competition and the employer's expectations are the dominating factors.

In some regions you will need a 4-year degree and a strong portfolio of practice projects. In other regions a degree alone, or a few years of advanced study in computer science. In other regions you need only your own evidence that you can write some code.

 More education is always preferred.  There are many things that are difficult to learn on your own, many topics you will not know that you are ignorant about. There are topics you will not choose to study, a formal degree requires you to gain competence enough to pass the required courses. Most people will spend the time to learn topics that interest them, so that's often not a big challenge for education. 

 

Regarding Unity's usefulness as a platform, it is not just for mobile games. There are many bigger games on the PC and other platforms that use it. However, it is not yet up to the same level for AAA games.  Unreal has been used for a few, but even that requires work and heavy customization in the AAA space. Learning to use it will be good if you are looking for work at a studio that uses it. It won't be useful if that is your only skill and the studio doesn't use it.

 

Whatever happens, be mindful that your value as an emplyee is directly related to your relevant skill set.  If the company changes direction -- which they frequently do -- you need to have the skills the company needs if you intend to keep working there. If your only skills are C# script in Unity, your utility at the company is severely limited. Companies rarely invest in training their workers these days, programmers are expected to learn on their own.  Unless you're in a location where programmers are extremely rare, the company would likely dump you in favor of someone who already developed those skills.

Advertisement

Keep in mind that a lot of things you learn coding apply to all languages, or at least most of them. Even if they don't for whatever reason, the experience still helps you learn much faster. It would be easy to argue that if you say, were very advanced in C++ then picking up Java or C# would be much less confusing than starting from scratch would be. That said, it is of course good to experience a few languages, as there tend to be commonalities between certain languages.

If your main focus is on getting a job soon(ish) then I'd recommend continue to learn and master C# and when you feel like you're at a high enough level, get a job that uses your C# and Unity skills.

You make it sound like if you start working with Unity/C# you'll be stuck there, but that's not the case as long as you can spend some free time on your own learning C++ once you get that job.  As was mentioned, a lot of what you learn in C#/Unity will apply to programming games in general, so you're not wasting time at all.  And, even if you eventually get a C++ job, knowing C# will be an asset.  You might even find a great job using all those skills, Unity + C# + C++ + whatever else.

But the main takeaway should be that you shouldnt stop learning and improving your skills once you get a job.  If after you get that C# job you devote time to learning C++ and doing small hobby projects with it, then eventually you will know enough to try to get a job doing that... and by that point you will have much more experience in with general programming and game development.

I would also recommend working on your 3D math skills and one or more areas of specialization such as graphics, physics, AI, audio, tools development, etc.  The good thing is that you can work on these things as you learn C#/C++ by just picking the right small projects to learn those languages.

IMO if the question is ever "should I stop learning..." the answer is almost always no.  A deep understanding of any one given thing can be valuable.

That being said, given your stated goals, I think you'll want to learn C++ for sure.  I started with C++ before C# and I feel like C++ left me with a deeper understand of what I was really doing, and those skills were transferable to other languages.  C# of course also will give you transferable knowledge you won't get from C++.  So, the takeaway is to try to learn both, but don't abandon either.  But also learn other things if/when you have time.  Learn some scripting languages (Javascript, Lua, etc), maybe learn some web dev (dive into Node or PHP or something for a bit, build a game in HTML5, make some websites that do cool things), learn some graphics languages (OpenGL/DirectX/shader languages) if you think that's a thing you'll want to dive into.  Get a working knowledge of how to use source control.  Learn how to automate some of your tasks, or create automatic nightly builds, etc.

In other words, aim to continuously add new knowledge to your skillset.

A deep understanding of any one language is more valuable than a beginning understanding of several.  That being said 75% of what you learn in one language is transferable to all others.   I think most people consider C++ (my primary language) to have an advantage over the others because of it provides access to low level programing and this allows you to design your own paradigms for programming systems as well as applications.  Where most other languages are somewhat bound to the conventions set in place by their standard library.  I imagine that in a development environment where creative use of system resources is in demand C++ may be the preferred language as C# or other languages might be considered to have too much excess baggage to be desirable.  However, I am certain that the industry has work for programmers using high-level languages. 

The Quarry Works Creed

We who shape mere stone must always envision cathedrals

Advertisement

I recommend the same approach to programming languages and game engines as I once heard recommended for musical instruments.  Don't try to pick the right one first - you couldn't possibly know the right one, because the right one depends on the year, you, your friends and culture, and many other random things.  Don't try to learn them all - all knowledge is good, but knowing how to right a for loop or render a sprite in 17 different languages/game engines doesn't make anyone happy.  Instead here's my guidance:  Pick one, based on the amount of info you can gather in less than 1 week of research (you have probably already reached the point) ... the goal is just to find the very first one that feels interesting to you as you put your first 2-10 hours into it.  Javascript, C#, C, C++ ... those are my first recommendations for your stated goal ... although python, ruby and Java are also viable, since your first goal is really "learn to program and have fun doing it".

Then don't every think "I need to learn another language or switch languages" just for no reason.  There are 3 reasons to learn a new language or game engine ... don't do it until 1 of these applies to you:  1) you feel like you've run into a wall with your current situation, and even after trying for weeks, you aren't having fun or making progress with it, 2) you have friends, coworkers, or online groups that are using another technology and you'd like to join them, 3) you are ready to actually begin applying for real jobs soon, and you want to start learning the technology actually used in the job your seeking.

A professional flute player speaking about advancing from $300 to $700 to $2000 to $20000 flutes said (paraphrased):  You can do everything on the $300 flute that you can do on the $20000 flute, it just takes a little more effort, and anyway when you are starting out, you aren't even ready to begin trying those things.  Start with the $300 instrument, and stick with it until you feel like it is holding you back, you will know if you need to move on to a better instrument.

On 12/6/2017 at 12:44 AM, Satharis said:

Keep in mind that a lot of things you learn coding apply to all languages, or at least most of them. Even if they don't for whatever reason, the experience still helps you learn much faster. It would be easy to argue that if you say, were very advanced in C++ then picking up Java or C# would be much less confusing than starting from scratch would be. That said, it is of course good to experience a few languages, as there tend to be commonalities between certain languages.

I agree with this 100%! Over 15 years ago I started in BASIC (Visual Basic 6), and even made some 2D games using it, then moved onto DarkBASIC shortly after. Completely hated the experience and decided to go down the hardcore approach and learn C++. Once I was at the experienced level in C++ and could program 2D game engines, I could pick up any other language with ease, it was like the domino effect. It's allowed me to develop on Android, iOS, Windows, ect... without having any restrictions.

The hardest part in programming when I started wasn't knowing syntax, or how to call functions, it was how do I put all of these tools together to create something. The language itself is just a tool, but your ability to problem solve and blueprint applications in your head will take you a lot further than just knowing every single function call in the standard library of a given language. This is why your abilities become universal, and you're able to adapt from language to language easily once you've hit that level.

If you're spending a lot of time with C#, stick to it! It's way better to be very good at one language than to know three at a basic level, which makes your skill level too low for commercial work. The amount of time you would need to invest in C++ might be too long for you with a 7 month deadline. I wouldn't drop C# to take on C++ because you want to work on C++ games, the truth is when you get hired as a JR, you're not coming in as a C++ game engine programmer. You'll be doing some mundane tasks, and will have to prove your worth over time. Stay with C#, build a good portfolio, and learn C++ on the side once you're ready and have at least landed a job.

The biggest misconception I find when people get out of school is they think that learning is over... Programming is an on going thing, and those that are always updating their skills, and adding to their known programming languages are the ones excelling. You're going to have to learn C++ anyhow at some point if this is the direction you wish to take, but with the given time you would be better off continuing with C# and working on that portfolio. You're objective isn't to get to the end of the race on the first sprint, it might take many years to land that dream job, but it's the little steps you take each way that add up to give you your end result.

Programmer and 3D Artist

This topic is closed to new replies.

Advertisement