Sign in to follow this  
CinoGenX

How to not become overwhelmed....

Recommended Posts

Hi All, new game programmer here…

Trying my best not to fall into one of the almost inevitable new programmer spam posts, so please bear with me, I’ll probably fail.

After spending hours/days going through the myriads of help request threads and the almost programmable “do x,y and definitely z” responses…. I’ve laid out a path for myself moving forward.

I’ve, of course, ignored seasoned advice and started off with C++. Intending on moving to a 2d library when ready, and deciding on where to go from there after creating a few games at that point.

I’ve been a good little noob and started simple, got myself 4 or 5 C++ books and I’m starting small with games such as tic-tac-toe and other such console games.

So far so good….im gaining the basics of my language in a simple gaming context and I’m happy so far.

But then, I’m kind of not.

The more I look at game programming the more the rift between what I’m doing and what’s needed is growing.

So here (finally) is my question. Does anyone have any recommendations for how to not become overwhelmed? The gap between what im learning and the knowledge needed for a commercial game is so big that every time I see another post on some complicated game related question… my heart sinks just a little.

Now I know people are going to give nice generic replies like “start small, take baby steps” etc. But can anyone help with their experience of how they moved forward. An actual proper account of what they did to end up where they are.

I’m under no illusion that game programming is easy. It seems to be a long hard road which never stops long enough to let you get your footing.

I’m just reaching out to try and get some encouragement on the route forward. I would love to hear the steps seasoned game programmers took to get to where they are.

Does anyone have an examples they can share or links to existing posts they know of?

Any help would be much appreciated. Sorry for wall.

Share this post


Link to post
Share on other sites
I would say, don't try to get too far ahead of yourself. Lets say you read 2 chapters of one of those books a day, after you're done with those 2 chapters, make small programs with what you know for a day or two so that you FULLY understand what you're looking at.

When I was going for my degree in CIS I had a C++ class that was only 12 weeks. Those were the worst 12 weeks ever. Why? Because we were forced to PUSH through half of the book. Much of what I've learned in those 12 weeks it took me another year to 2 years to fully understand because I couldn't keep up with what they were trying to tell me. Now that I have personal time to play with C++ I can learn it at a decent pace so it won't be too tough to get through.

If lets say, you start making a game you've had an idea for but you get stuck and it just gets upsetting to deal with. As with anything else: Take a break. 2-3 days without code won't kill you. Chill out and find something to do and come back to it.

Also, I'm glad you're a noob that understands most of how things work and you're not just "I wanna learn games help me now". +1

Share this post


Link to post
Share on other sites
I think, I did just what you proposed: take baby steps. Experiment. Learn on technique/technology at a time. I really takes years to become a decent programmer. If you accept that and work your way from small projects to more and more complex games, you will most likely find your way much smoother than it looks from the beginner's perspective.

If you keep your projects and the increase in complexity between your projects small enough to actually finish them (something I'm very bad at), you will gain all knowledge you need in time.

Just don't care about fancy 3D graphics and high definition surround sound, high performance network code sound at the beginning. Just make your small projects. You will see, what works nicely and what doesn't and in your next project, you will be able to build on that experience and have more time to focus on the next level.

In a small 2D-game, you can learn a lot about basics that still apply to polished 3D games. You learn about coordinate systems, image loading, double buffering, on screen pixel formats, input handling, game states, sound...

Once you reach a certain level, you will notice, that there are some things that you may perhaps never accomplish alone, because they are just to much work. That's when you will most likely begin looking for a team (and you may by that time actually be of use to your team).

My way was to start a little 2d game and do only the most crucial parts: graphics output and control input. Then I added smaller parts, just what I wanted to do then, like simple sound effects, fancier graphics etc. Sooner or later, I felt, my skills had increased so much, that I could not stick to my old infant code and started over with the next tiny project, but this time equipped with a bit of experience and self-written example code to work with.

Oh, and studying computer science helps, too ;-)

Hope that's of any use for you. How to not become overwhelmed: Don't let it overwhelm you, accept that you will never code the next AAA game alone and be happy with what you actually can make.

Share this post


Link to post
Share on other sites
Its not that huge a step from C++ basics to a graphical 2D game, once you have a firm grasp of pointers, classes, OOP... you can try a 2D library like SDL or SFML and can make a simple tile based game, I used LazyFoo's SDL tutorials and was able to take those tricks I learnt and make a tile based game that while not good used a lot of usefull tricks... collision, scrolling , player controls , game states , animation , sounds , text , timing ...

Check out Foo's tutorials here : [url="http://lazyfoo.net/index.php"]http://lazyfoo.net/index.php[/url] ( stuff is a bit old now but it still works and is easy enough to update once you take the time to understand the idea )

There is only a video of my RC1 left from my little game ( I have the source here on my PC, but the download link died a while back ).

[media]http://www.youtube.com/watch?v=Nserj0a29UU&feature=g-upl[/media]

It really is a case of baby steps, but each step is also a stepping stone to more stuff and soon enough you gain confidance to try out harder stuff which lead to more... just dont hold your breath waiting for EA or Activision to send a limo to pick you up for thier design staff [img]http://public.gamedev.net//public/style_emoticons/default/tongue.png[/img]


EDIT: my seplinilg scuks :P Edited by ASnogarD

Share this post


Link to post
Share on other sites
As has been covered many times already, and as you seem to know by your first post, baby steps.

Just keep your head down and learn the next thing, don't bother taking a look at the big picture for quite a while. I had someone sit down beside me, watching me do something I consider mundane recently ( I think I was manually configuring IP configuration or something ), and to that person what I was doing was just black magic. How did you know to put 255.255.0? How did you know to put 8.8.8.8? How did you know to put 192.168.2.1? Etc... etc... Of course, you probably know exactly why I entered each one of those pieces of information... but how did you acquire that information? Years of experience, that's how. Programming is really no different. At first what seems like such a massive subject, will in time become as intuitive as configuring a networking adapter.

Now back to the subject at hand, when you get to the point you feel pretty comfortable with C++, and have mastered console applications and have a basic understanding of the language, [url="http://www.gamefromscratch.com/page/Game-From-Scratch-CPP-Edition.aspx"]try running through this tutorial[/url]. It was written for exactly that purpose, to take someone that has a good understanding of the basics of C++, and then implement a 2D game using SFML, all the while demonstrating modern C++ is a non-abstract way. So if you are having trouble grok'ing the value of inheritance for example, this tutorial might help. Also, the next *MAJOR* tripping block you are going to have is configuring the linker to work with a 3rd party library. So this tutorial goes into a lot of detail on that subject, but provides preconfigured projects in case you can't get it working.


Again, keep at it, with time and effort, it will all come together. Just don't get focused on, or even pay attention to, the bigger picture. Yet.

Share this post


Link to post
Share on other sites
I too had this happen to me while using C#.. I was offered the same advice as the others above gave you.. Its a broad subject but it gets easier.... I'm now stepping into c++ to take the long journey that hopefully in the end i'll land ashore at a game development company.. in a year if you keep at it and progress steadily, look at this topic and where your at(at that time) and remember how far you came. the journey is a long one but it is not an impossible one.. to practive your skills with C++ try these as you learn [url="http://www.cplusplus.com/forum/articles/12974/"]http://www.cplusplus...articles/12974/[/url] Edited by Shikamaru

Share this post


Link to post
Share on other sites
Hello. First time poster here.

When I decided that I wanted to make games I started by "trying" to learn C++. I didn't succeed. Then I asked myself what I wanted to make games for. I decided to give Blender Game Engine a try and its incredible how easy it is. Now, if you want to actually work in the industry, this probably isnt the best route to go, but if you feel overwhelmed, the BGE lets you develop games fairly rapidly. (It uses Python which I have found to be the easiest language to learn)

Share this post


Link to post
Share on other sites
I really wouldn't worry about it (getting overwhelmed that is). It's like marathon running. You train to run 8 miles, but you can still train to run 9 or 10 miles. It never ends.

My suggestion is, instead of setting AAA games as your goal, my suggestion is to set your goal as "To maximize the use of programming." It works for me [img]http://public.gamedev.net//public/style_emoticons/default/biggrin.png[/img] Instead of worrying about how long it's going to take me to reach my final goal, I look at the benefits of what I'm learning at hand. This way, I can use the extra motivation I get from the small things to propel my learning towards the big picture without having to worry about it explicitly. Think of the repetitive tasks you do on your computer and try to see if you can automate them with programming. Write a program that solves math formulas so that you don't have to! Whatever you need to do with programming to stay motivated, do it [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Edited by boogyman19946

Share this post


Link to post
Share on other sites
[quote]
The gap between what im learning and the knowledge needed for a commercial game is so big that every time I see another post on some complicated game related question… my heart sinks just a little.
[/quote]

Just to put this part in perspective, I've been programming (mostly hobby) for about 20 years, and there are many posts on this forum that I find unfathomable. The gap between what I do and a big commercial game is wider than ever - millions of dollars and a team of artists for starters, and a whole slew of knowledge areas that I am unfamilar with.

But I don't let it discourage me - quite the opposite, actually, since it gives me an endless amount of small problems to tackle and learn about.

Share this post


Link to post
Share on other sites
It's been close to 4 years that I've been actually involved with programming. Time went by so fast that I almost can't noticed now, looking back. Time is the only thing that will get you where you want. Keep working, keep studying, keep moving forward. You'll eventually get there.

Share this post


Link to post
Share on other sites
[quote name='Shikamaru' timestamp='1341853726' post='4957329']
I'm curious to know why you didn't succeed?
[/quote]
That's a good question. I had a really hard time wrapping my head around the language. I had never programmed anything before and was lost during most of the lessons and tutorials I attempted. I probably just didn't stick with it long enough. I wanted instant results. What I liked about Blender is that you can create a game without writing any code at all by using logic bricks. So I was able to create a complete game (very small one) in a couple weeks. After awhile there were some functions I needed to write code for so I researched how to write python scripts. From there, I began converting everything to python. Now I am fairly proficient with Python. Of course, my goal has never been to work in the industry, I just want to create games for my own enjoyment. Python game programming is more for hobbyists.

Share this post


Link to post
Share on other sites
One stepping stone that might help you bridge the gap between simple text-interface programs and 2D game programming is a real-time text-mode game, like [url="http://www.best1000games.com/2-player-snake/"]2-player snake[/url]. You can organize the program like you would most video games, with its usual main loop (read inputs, update scene, render) and all, But you keep the rendering very simple. Although this game doesn't really need it, I suggest you redraw the entire screen on every frame, because that's closer to what most games need.

Once you finish this project, you basically have the structure of a real 2D game, and then you are probably ready to learn how to use a graphics library. I hope this helps.

Share this post


Link to post
Share on other sites
[quote]But can anyone help with their experience of how they moved forward. An actual proper account of what they did to end up where they are.[/quote]

When I first started studying C++, I thought it'd be a good idea to purchase some "Game Tutorials" where it teaches you how to program from the basics up, but it's more game-focused. (Starts out with "Hello world." then moves on to text-based RPGs, RPG map editors, etc). Anyways, long story short, after getting to the tutorial for the first Text-Based RPG in the tutorials and barely understanding what the hell I was doing, I started working through Stephen Prata's C++ Primer Plus book.

Fast forward 4-5 months later without even thinking about programming games, and I'm designing and programming my own text-based RPG. It's currently over 1100 lines of code, has minimal player content (just started working on it last week, cut me some slack [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] ), but the greatest feeling in the world is when you're implementing new things into a program, and you click "Compile" and get 0 errors, and it's completely bug free. Seriously, it's like magic - it's like "okay, I want this in my program. /code it, and it works." It's an extremely powerful feeling when you know your hard work and studying has paid off.

I understand everything I'm doing, everything I'm implementing, I think logically before hand as to how I introduce something before I start coding (fail to plan == plan to fail), and how it may affect something else in my program. I'm always looking for new ways to improve my code, whether that's through a new function, or something I learned today (class inheritance), so the learning process just doesn't stop for me.

Am I a brilliant programmer? Definitely not, I'm probably your average computer joe (well, by my standards anyway). Am I a professional programmer? Not yet. Does this mean I won't continue to spend months upon months mastering the craft?

Hell no, I will not stop until I have mastered this language, as well as many others.

Edit: No idea what happened, somehow half of my message was cut off. Fixed though ^^ Edited by Phil123

Share this post


Link to post
Share on other sites
[quote name='CinoGenX' timestamp='1341837628' post='4957236']
The more I look at game programming the more the rift between what I’m doing and what’s needed is growing.

[/quote]

Here's the harsh truth, everything that's considering "fun" is complicated and takes hard work. Some small teams have managed to create great indie games trough a lot of time and stress and you know where I'm getting at. It's the humans fundamental approach to life. Why is it that building a sand castle involves more time and knowledge than destroying one?

Have you ever tried creating mathematical models that simulate the action of a car suspension getting repeatedly hit by an external force to see how it behaves trough time? It's a second order differential(linear) function, you need to have knowledge of derivatives and integrals and ideally how to do LaPlace transformations. Why is that so difficult? because the laws that govern are world are complex.

And this is great; because it separates people with willpower and tenacity from the weak. If games like D3 and Skyrim took some guy one night to build we'd be out of work.


All I can say is either you change your perspective on how you see your progress or you might as well quit now. Edited by DZee

Share this post


Link to post
Share on other sites
Becoming overwhelmed by what you don't know or what you have to do is common in just about every field. Game development is no different than anything else. My simplest advice is to focus on the progress and not on the end goal. The reality is that the end goal is going to seem like a very far away place for a very long time. It's like looking down a big long straight road that you need to walk 10 miles down. After 20 steps it's still going to look just as long and you won't see any progress but if you turn around you will see that you're no longer in the same place.

Some practical advice that I use:

1. Have a project ToDo list that you just keep a few smallish items on. Hopefully things you can complete in one sitting. As you finish them you'll get to cross them off and feel like you're making progress. Even the act of adding new items every day can feel like making progress. I like to have my list on me at all times so I can add items at any time of the day. It really helps connect me to the project.
2. Look back at your old work on a regular basis. The will serve two purposes:
a). It will show you how far you've improved. ("Remember when I couldn't even pass a variable by reference!")
b). You will learn new things from your code that you didn't notice when you first worked on them. ("Wow. What was I thinking when I coded a million if statements instead of using a select?")
3. Take a day off from the project every now and then. Without this you will burn out and stop making progress.
4. Stay honest and positive. Admit what you don't know and don't worry about it. Even John Carmack didn't know what a compiler was at one point in his life.

Share this post


Link to post
Share on other sites
C++ or any other languague isn´t just about reading entire books. As you use it more and more you will start to spot the right structure/technique to use in the right place until the overwhelming stuff become natural stuff to you.

About game programming the one thing that helped me a lot is to write and detail as much as possible all features of your game before starting to code anything. Sometimes it´s not possible, for instance when you are in a group, but try to enforce it. You will see that this helps to think of the programming skills needed to acomplish those features. If you picked a feature that turned out to be too difficult replace it or you might not finish the game and get frustrated.

Try one thing (new feature) at a time so you can focus your learning on that, as for the rest, use features you already know how to do.

Good luck!

Share this post


Link to post
Share on other sites
[quote name='CinoGenX' timestamp='1341837628' post='4957236']
I’ve, of course, ignored seasoned advice and started off with C++.
[/quote]
Alright, you knew about the advice and are beginning to realize the reasoning behind.
Then it's clear what to do now...
A beginner shouldn't need 5 books about a f...... language - they should be about general software development, architecture, best practices, algorithms, patterns, etc.
Languages are interchangable - basic knowledge is not. And you will hardly have enough time to get it all.
There is absolutely no reason to start with C++ , beyond "it's cool, it's what the pros use".
You can still come back to it in a few years.

Share this post


Link to post
Share on other sites
[quote name='CinoGenX' timestamp='1341837628' post='4957236'].I’m under no illusion that game programming is easy. It seems to be a long hard road which never stops long enough to let you get your footing.

I’m just reaching out to try and get some encouragement on the route forward. I would love to hear the steps seasoned game programmers took to get to where they are.

Does anyone have an examples they can share or links to existing posts they know of?

Any help would be much appreciated. Sorry for wall.
[/quote]

I started by studying computer science.For about 1 year[the first one ] in highschool, we knew nothing about any particular programming language, like C/C++.Rather, we were focusing on algorithms , describing them in pseudocode and solving different problems.
Its been 2 years since, and also the algorithms and problems became more complex.
My suggestion is, before learning a programming language you should make a step in CS.It gives you a "way of thinking" , that helps when making games.Games are to be considered problems too.


And to give you an example :
A few months ago , I made an ASCII game.There are 2 characters , [ literally :P ] the player, a monster 'X' a char matrix and an exit poing, located somewhere in the maze [ the matrix is the maze ].It looks something like this http://www.youtu.be.com/watch?v=iZNNH5eYsdE .
The player has to get at the exit point before the monster does, or else the game is lost.
Looks pretty simple at first, but there's one problem: How does the monster reach the exit point ? He would follow a path of coordinates like : i1,j1-> i2,j2-> ....-> in,jn.
Ok, but how to determine that path ? The maze is randomly generated before each level.
The solution was to use the BreadthFirstSearch algorithm , learned in "Graph Theory " .

Anyway, thats just my opinion . Edited by cold_heats_.--.

Share this post


Link to post
Share on other sites
[quote name='6510' timestamp='1341924995' post='4957602']
Alright, you knew about the advice and are beginning to realize the reasoning behind.
Then it's clear what to do now...
A beginner shouldn't need 5 books about a f...... language - they should be about general software development, architecture, best practices, algorithms, patterns, etc.
Languages are interchangable - basic knowledge is not. And you will hardly have enough time to get it all.
There is absolutely no reason to start with C++ , beyond "it's cool, it's what the pros use".
You can still come back to it in a few years.
[/quote]

I was going to say something similar. Starting with C++ if you are even a little bit worried you will become overwhelmed is pretty backwards. C++ starts overwhelming and plateaus at a slightly higher level than most languages recommended for beginners.

Languages are generally easier to learn than theory, so it's generally easier to learn the theory with an easy language and then use your established theory to understand harder languages.

I also never understood starting with C++ as it's not that beneficial for a beginner in any metric. You could probably write more performant code in a managed language for quite a while before you start seeing the advantages of C++. C++ isn't that fun to learn comparatively either. It takes a lot longer to program in C++ (just actual typing time/compiling time) compared to a lot of other languages. In order to start seeing interesting results you probably need to learn another API on top of C++.

In C# or Java for example, you can write Hello World, change a few lines and have Hello World in a window instead of on the console, change a few lines and have Hello World with a functioning button, change a few lines and have that with a triggered animation, and then you can pretty much jump into your first game. You could probably reasonably do that inside a day, and even with that relatively low starting point you'd probably have a lot more fun learning C++ after just one day of investment in not-C++.

Share this post


Link to post
Share on other sites
Thanks for the comments, advice and anecdotes so far guys. I really appreciate you taking your time.

Regarding the few posts focusing on the language choice, this decision did not come lightly and was primarily based on the fact i had used Javascript a little previously, and C++ felt very similar when i was looking at the syntax.

I really dont want to drag this thread into a "switch to X its easier, then you wouldnt be so overwhelmed ffs" thread. So please, [u]as correct as the statement may be[/u], can we work with these parameters.

Please dont mistake my stubborness/ignorance as arrogance, im enjoying c++ and starting to understand the basics so will be sticking with that learning path unless i hit something beyond me.

My plea for people to share their experiences is not restricted to people following the path i have chosen. Im mearly looking for some advice on the steps others took to go from the level i am, to the level they are, so that i can glean some encouragement and gage the amount of work.

Thanks again. >.<

Share this post


Link to post
Share on other sites
There is something that I call bad features in C++. They provide traps for newcomers and complicate everything. Many workshops provide a list of banned features but not all follow them (they're more like guidelines anyway).

I'll throw my very opinionated suggestions, which I think might steer you around some common pitfalls:

- Learn to use the debugger, and put plenty of asserts for it to break to.
- Use the C++ variants of C functions where possible.
- Avoid unnesessary inheritance. Learn early to use composition for code sharing.
- Avoid using multiple inheritance. Avoid even learning about it until you really have to.
- Avoid virtual inheritance.
- Free functions are part of the public interface (and are in many cases superior alternative than member function) for a class. Not everything needs to go in a class. Avoid static member functions. Avoid static data members.

Share this post


Link to post
Share on other sites
[quote name='Serapth' timestamp='1342020911' post='4958064']
[quote name='Codarki' timestamp='1342017608' post='4958040']
- Avoid virtual inheritance.
[/quote]

I was with you until this one.
[/quote]

This however is a good example of where C++ kinda sucks. If you are going to make sure class inheritable, make it virtual and MAKE SURE you mark the destructor as virtual.

I almost think C++ should have made inheriting a class with a non virtual destructor illegal, I can think of absolutely no reason not to.

For example ( this is a pop quiz with a big hint above ;) ).


Why is this so dangerous?

class SpecialString: public std::string {}

Looks prety innocent and logical doesn't it? If you have no idea why the above code is bad ( and it is bad! ), read Exceptional C++, as that is where the example was lifted from.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this