A Good Start

Started by
6 comments, last by Gian-Reto 8 years, 1 month ago

Hello guys, i'm new in this forum and i would need some advices for a fresh new start.

I'm programming a lot and i like testing and trying new languages/softwares but i think i'm still a novice somehow.

I have read the FAQ and it was helpful but i need a more specific help.

As i try to apply for a Junior Gameplay Programmer's job, i study on college to get my Computer Science Degree (3rd year right now) and i'm learning C++ as it's a very used language and i feel like i can do everything with it.

I'm using Unity too because it's an easy and enjoyable engine to work on.

The big problem is that i don't know which one to focus on first. Should i sharp my C++ skills or should i make more game to have a better gameplay experience first ??

I don't want this topic to be a C++ vs Unity because i want to learn both (and many other) i just need one good way to focus on first.

Thanks for your replies.

PS : Sorry for my english ^^'

Advertisement

If you're studying C++, why not Unreal Engine? You can do both (I've never used UE)

If you're studying C++, why not Unreal Engine? You can do both (I've never used UE)

I have tried both Unity and UE and I feel that Unity is more noob friendly.

Unlike what you seem to think, the language isn't terribly important.

Since we use languages to express the solutions we invent, they are part of the domain, but a skilled programmer can write the same solution in pretty much any language. Java, Python, C, C#, C++, it's all imperative languages, which are better at some areas and worse at other areas. Many programmers also know several languages.

Companies like to have people all speak the same language, which is why they hire based on computer language. Also, some languages work well in some domains, so the kind of job also defines the language that you use.

The really important part of being a programmer is however is being able to come up with a solution for the problem at hand. A solution that works properly, scales well, and is understandable. Good performance is also useful, although I rank that below scaling (but my problem domain is not gaming).

Such solutions need lots of knowledge about CS, data structures, algorithms, and their properties (understand why bubble sort does not scale, know the strong and weak points of a hash table, etc). If you want to get the last X% performance too, add knowledge about CPUs. At some point, it starts to pay to organize your data around CPU limitations. (But keep in mind this is often about X%, rather than the much larger O(n**3) versus O(n*log n) kind of decisions that you deal with in scaling.)

You'll also need to have creativity to solve the problem (else the problem would not exist at all, someone would have solved it during a coffee break). In my experience, creativity often comes from understanding the problem deeply, and understanding CS, and then fold and twist the problem, and fold and twist the used data structures and used algorithms, such that it all fits, and no bits stick out (well, at least no bits that are important for the desired properties of the solution).

This is where practical experience shines. Grab every problem you find, and try to fold and twist it into a computer. See it run or fail to run. Try to change it. Read code written by yourself, and find points of improvements. Read code written by others, or let others read your code (which is very scary at first, but oh so useful). Don't be afraid to look into "weird" subjects, you never know what you find, and maybe in 10 years from now, you'll connect that knowledge with a problem and find that one WOOW solution. (Although, in my experience, you never consider it that way, as the solution just is the logical course of action to you, given the knowledge that you have.)

I think you can combine the above with programming games. Games are filled with fun little puzzles that you can solve in many different ways. Try to solve them, read what others have found in dealing with these problems, compare both, improve on it.

EDIT: Oh, and last but not least, have fun. Being in good spirits helps making creative jumps!

Why not do both?

Okay, that might be a stupid answer, but hear me out:

If you really want to make it as a game programmer and you are aiming, at least in part, to get a job in an AAA studio at some point in the future, C++ is a very good language to be knowledgeable in... and from what your OP sounds like you already know a lot about it. Why not try to keep your C++ skills sharp?

Unity on the other hand, at least in my expierience (there are people on this forum that will disagree), IS easier to get into than UE4... with all the power and flexibility of UE4 comes quite some complexity, and sometimes "programmer centricity" which shows in both interface and documentation.

Besides that, knowing about managed languages is also quite handy when most programming OUTSIDE the AAA game development world is done in managed languages... Java is bigger than C# most of the times, but then the difference between C# and Java is actually not that big (at least that was my expirience as a Java Programmer that started dabbling in Unity C# with just a University course in C# as expierience).

Now, if you are a good C++ engineer, you will most probably be able to pick up C# quickly anyway.

If learning to work in an actual engine is worth the time you spend in it IDK... I am not working in the game industry thus cannot comment on that.

I do see it as a way to learn about the environment you work in though, to pick up additional skills that might come in Handy in the future (Shader programming, tools development, whatever), and most of all a possibility to create awesome prototypes and demos to put into your portfolio without having to write everything from scratch. While it certainly is impressive if you show a small game you coded from scratch, if you just need an environment to show off that impressive dialog system your wrote, hacking something together in an existing engine for visuals and running your code is certainly more efficient when it comes to time.

And if there is something all employers in all industrys of this world love, its employees that show their devotion to work more efficient, and do more in less time. If you are showing something impressive that you used an engine to build, they will not care, as long as you state clearly what it is YOU did (as opposed to came with the engine).

And lastly there is the thing that motivates you most. If you are anything like me, you want to see stuff moving on the screen. If a game engine helps you get stuff moving on the screen in 2 weeks instead of having to stare at inanimated code for 4 weeks because you need to do the low level plumping first, then that can be a huge motivation boost. You get into the "fun zone" quicker, and have 2 additional weeks to make the fun stuff even more fun.

One thing to keep in mind:

You CAN run C++ code from a Unity build or the Unity editor. Its what some asset devs use to hide their code. Its not the most convinient thing, but it can be more performant if used correctly. So if you are using Unity, but want to keep your C++ skills sharp, how about coding some subsystems as their own C++ library you call from your Unity game?

Thank you for your replies !


Unlike what you seem to think, the language isn't terribly important.

I know that language is not really important that's why i choose to use C++ and unity(with C#) . I mainly use C++ for its low-level purpose and its large librairies and tutorials then

i use Unity to try some gameplay, do quick display of my thoughts.

My problem was more about : should i just use a professionnal engine and start my job or is it okay to start from scratch just to know how it works behind ?


Why not do both?

I think i will stop searching problems where there are not and do both !

Unity is way faster to make games but i prefer to make some 2D games (later on 3D too) from scratch. It's not really time efficient though.

I spent more time doing low-level code working than gameplay but i like it, i have the feeling that i did all by myself and learn more about the "behind the scene".

So yeah i will just jump right into it and have fun making good games for you guys !

Unlike what you seem to think, the language isn't terribly important.

Since we use languages to express the solutions we invent, they are part of the domain, but a skilled programmer can write the same solution in pretty much any language. Java, Python, C, C#, C++, it's all imperative languages, which are better at some areas and worse at other areas. Many programmers also know several languages.

Companies like to have people all speak the same language, which is why they hire based on computer language. Also, some languages work well in some domains, so the kind of job also defines the language that you use.

The really important part of being a programmer is however is being able to come up with a solution for the problem at hand. A solution that works properly, scales well, and is understandable. Good performance is also useful, although I rank that below scaling (but my problem domain is not gaming).

Such solutions need lots of knowledge about CS, data structures, algorithms, and their properties (understand why bubble sort does not scale, know the strong and weak points of a hash table, etc). If you want to get the last X% performance too, add knowledge about CPUs. At some point, it starts to pay to organize your data around CPU limitations. (But keep in mind this is often about X%, rather than the much larger O(n**3) versus O(n*log n) kind of decisions that you deal with in scaling.)

You'll also need to have creativity to solve the problem (else the problem would not exist at all, someone would have solved it during a coffee break). In my experience, creativity often comes from understanding the problem deeply, and understanding CS, and then fold and twist the problem, and fold and twist the used data structures and used algorithms, such that it all fits, and no bits stick out (well, at least no bits that are important for the desired properties of the solution).

This is where practical experience shines. Grab every problem you find, and try to fold and twist it into a computer. See it run or fail to run. Try to change it. Read code written by yourself, and find points of improvements. Read code written by others, or let others read your code (which is very scary at first, but oh so useful). Don't be afraid to look into "weird" subjects, you never know what you find, and maybe in 10 years from now, you'll connect that knowledge with a problem and find that one WOOW solution. (Although, in my experience, you never consider it that way, as the solution just is the logical course of action to you, given the knowledge that you have.)

I think you can combine the above with programming games. Games are filled with fun little puzzles that you can solve in many different ways. Try to solve them, read what others have found in dealing with these problems, compare both, improve on it.

EDIT: Oh, and last but not least, have fun. Being in good spirits helps making creative jumps!

This was a really powerful response. Thank you.


I think i will stop searching problems where there are not and do both !

Unity is way faster to make games but i prefer to make some 2D games (later on 3D too) from scratch. It's not really time efficient though.

I spent more time doing low-level code working than gameplay but i like it, i have the feeling that i did all by myself and learn more about the "behind the scene".

So yeah i will just jump right into it and have fun making good games for you guys !

It is good to keep time efficiency in mind all the time... but:

When learning, making mistakes, trying out things and, you know, learning as much as you can is way way more important than being efficient with your time.

Some people have the luck of having a good memory, or being a natural at the subject. They can read / see it once and are already able to ace it.

For most, learning is a long, messy process of trial and error, of having to work with something and see what it does.

Never be afraid to waste your time as long as you learn something new from the process.

Create 2D games with C++ and without an engine. I am sure you will learn lots of it. Learn to use Unity, dabble with its C# API. I found it easy to pick up and powerful enough for almost anything.

If you like, combine both, create C++ libraries for Unity.

Always follow your interests, never feel FORCED to do anything as long as we are talking about you learning game development in your free time.

This topic is closed to new replies.

Advertisement