Very frustrated with progress -- advice?

Intel17

Newcomer
Hello all!

Well, I've been programming for about 4-5 months now, and I'm extremely dissatisfied with my progress. I know C++ and C# syntax fluently, and have dabbled with graphics APIs to make various primitives with basic lighting and texturing, but I haven't made anything of value (a complete 3D world, for instance).

My ultimate goal is to get into the game industry as a graphics engine programmer (or even just be able to write my own advanced graphics demos for personal satisfaction).

It seems that many of you guys here were far ahead of me at this stage (5 months of experience), and I would infinitely appreciate any advice or tips on how to reach my goal or software design in general.

Thank you!
 
I'm not a games programmer, but I can tell you that you shouldn't really be expecting to be making full 3D worlds in your first few months of learning to program. :???:

Seriously, it takes time. Keep doing what you're doing and developing your skills, the rest will come. :)
 
Pick something sizeable an write it.

I used to write texteditors over and over, not because I really needed one (I've probably written 30 or 40 of them) , because every one I looked at sucked and I wanted to understand architecturally how I would write one solving the problems. Each time I would throw it away and design it again with hindsight.

I've done the same thing with writing basic 3D packages, aswell as compilers.....

Just depends what problem I find interesting at the time.

OK so I'm a bit obsessive.

The code is trivial to me, the architecture and problem set are what makes it interesting.
 
Intel17,
"Extremely dissatisfied" with your progress after only 4-5 months seems to indicate that you have unrealistic expectations. What exactly is it that you think you should be able to do? Make a 3D game? If so, then you must realize that a 3D game is so much more involved than writing a few "advanced 3D demos". Everyone who is a professional game developer says that you learn game programming by writing games, so I suggest you focus in that.

I suggest using C# and managed DirectX to write some relatively simple 3D games, as these tools are so much easier to use than C++/COM in my opinion. There are some very good tutorial books for writing simple 3D games by Tom Miller (search his name on amazon.com), one of the designers of the managed DirectX API. Once you have these simple games up and running, then you can tweak the code to add more advanced physics, graphics effects, etc on an incremental basis. This approach has worked well for me, and I have found the process to be very rewarding.

I must admit that I'm not a professional; I merely enjoy game programming as a hobby. The issue I'm facing right now is getting better art into my games. So now I am trying to learn how to create models, textures, bump maps, etc that don't look like ass. There is always more to learn. Just keep going forward, and realize that each setback is only temporary. Enjoy the journey.
 
If you are set on being a graphics coder then I suggest you write yourself a simple framework for doing graphical demos. Forget about trying to make a full 3d game just yet as it will take far too long and you will probably get frustrated ;)

Personally I would recommend looking at the stuff humus is doing http://www.humus.ca
He has his framework for download, and it is a really nice starting point for writing graphics demos.

I'd write a few fun demos, play around with shaders (you can get some rewarding results with very little effort), and when you feel comfortable with the code maybe try writing your own framework.
 
NRP,

Well, part of my problem is that I can fully understand code that's in books and I understand theory as I read it, but when I sit down with an empty project in Visual Studio without the help of all the books and example code, I find that I can accomplish very little.
:(
 
Intel17 said:
NRP,

Well, part of my problem is that I can fully understand code that's in books and I understand theory as I read it, but when I sit down with an empty project in Visual Studio without the help of all the books and example code, I find that I can accomplish very little.
:(

That's why you have to set yourself bigger goals and struggle through it.

Building a real program that does something isn't the same as copying examples out of a book, you need experience and frankly the only way to get it is to write code.

At this point it pretty much doesn't matter what your writing the experience is more important, pick something doable and go for it. There will be frustration involved, but work through it.
 
in other words I guess your ability and understand is developed enough but your experience and skill has yet to develop.

It's nothing to be ashamed about, but I can understand it being frustrating.

Simple fact is, programming is very very hard. It's not just the programming thats hard, the designing is even harder, the testing is hard too, and managing a project (even if it's just you) is damn near impossible sometimes. These are all areas that take a long time to develop. I've been making programs for way over a decade and still I feel I'm quite incompetent in a number of these areas.

The way around it is by starting projects that are slightly above your skill level (you need to be honest with youself when deciding this level). Do something that pushes you a bit, but not so much you get lost. The way I usually do it is by starting an engine project, but thats me and I still have a lot of difficulty. Usually I end up scrapping it after a year or three, but I still learn a lot. My current one is a hell of a lot better than my previous ones, for example.

Basically, understanding your own abilities and, more importantly, knowing your own limits is critcal to sucessfully completing a project.

Perhaps doing something utterly different may be a good idea too. Consider, for example, making an audio player. It doesn't need to be winamp, but just something that is usable is fine. This sort of thing requires a lot of design and needs to be thought out well first, so ideally it should stress you quite a bit in those ways, as there will be signifcant work required to get the program structure sorted. Also, this sort of project requires a lot of research, which is also a critical part of programming.
 
Graham said:
in other words I guess your ability and understand is developed enough but your experience and skill has yet to develop.

It's nothing to be ashamed about, but I can understand it being frustrating.

Simple fact is, programming is very very hard. It's not just the programming thats hard, the designing is even harder, the testing is hard too, and managing a project (even if it's just you) is damn near impossible sometimes. These are all areas that take a long time to develop. I've been making programs for way over a decade and still I feel I'm quite incompetent in a number of these areas.

The way around it is by starting projects that are slightly above your skill level (you need to be honest with youself when deciding this level). Do something that pushes you a bit, but not so much you get lost. The way I usually do it is by starting an engine project, but thats me and I still have a lot of difficulty. Usually I end up scrapping it after a year or three, but I still learn a lot. My current one is a hell of a lot better than my previous ones, for example.

Basically, understanding your own abilities and, more importantly, knowing your own limits is critcal to sucessfully completing a project.

Perhaps doing something utterly different may be a good idea too. Consider, for example, making an audio player. It doesn't need to be winamp, but just something that is usable is fine. This sort of thing requires a lot of design and needs to be thought out well first, so ideally it should stress you quite a bit in those ways, as there will be signifcant work required to get the program structure sorted. Also, this sort of project requires a lot of research, which is also a critical part of programming.

See, I'm frustrated because I really want to become a professional game engine programmer, but at this moment my future as becoming that looks quite bleak.

So, basically, I have to pick a small project, and see it through to completion? Does the research that you mentioned mean basically reading papers/books and learning how to do the things that my project requires? Or did you mean me actually developing new algorithms?
 
Intel17 said:
NRP,

Well, part of my problem is that I can fully understand code that's in books and I understand theory as I read it, but when I sit down with an empty project in Visual Studio without the help of all the books and example code, I find that I can accomplish very little.
:(
Well, sitting down in front of VS with a blank project and expecting to create something is a tall order. As Graham said, doing anything this way requires very detailed planning before you ever write a line of code. You must have a very clear idea of what you want to accomplish, and how you're going to solve the problems. If you understand the theories and the code in the tutorials, then take that understanding and try to use it to do something you think is cool. That was the essence of my earlier suggestion.

For me, I'm still trying to learn how all the pieces work together, so looking at working code and using it as a basis for trying new things on an incremental basis is very helpful to me. I too would be lost if I had to sit down and create something cool from scratch.

If you desire to gain employment in the game development industry, perhaps you could get experience by joining one of the community mod teams that are working on rewriting an older game to add current technologies. Although it isn't the same as creating something from scratch on your own, it has the advantage of working with a group of like-minded individuals, so you can use other people on the team as inspiration and to bounce ideas off of.

Whatever you do, I wish you the best of luck.
 
Last edited by a moderator:
Sometimes it's a very good idea to stay away from the computer (and especially from coding!) for a while.
If you just sit there too long doing nothing, you can easily get burnt out.
 
Sounds like you had what I had awhile back. While Im no expert I have knowledge in game coding and I ended up getting a sort of "writers block". Where some projects that should normaly give me no trouble ended up making me want to toss a few keyboards around :) I instead started to dable in other in other coding areas just for sake of "change of pace and atmosphere" I'm focusing more on A.I. right now and it has given me the boost I needed to get me back on track not to mention helped me expand my coding knowledge in other areas.

If you are at that block but insist on sticking with engine code then I would suggest take a breather step back and go back to the basics and fundamentals. You would be amazed at how that can refocus you as well.

I agree with ERP: "At this point it pretty much doesn't matter what your writing the experience is more important, pick something doable and go for it. There will be frustration involved, but work through it."

Although you have alot of coding experience you are just scratching the surface (as coding becomes more and more consuming) and if you stick with it the skys the limit. Push yourself but make sure you give yourself goals that are obtainable but challenging none the less.

*** There is No Luck...Only The Will and Desire To Succeed !!! ***
 
Intel17 said:
See, I'm frustrated because I really want to become a professional game engine programmer, but at this moment my future as becoming that looks quite bleak.

So, basically, I have to pick a small project, and see it through to completion? Does the research that you mentioned mean basically reading papers/books and learning how to do the things that my project requires? Or did you mean me actually developing new algorithms?
Hi Intel17,

Like you, I've had aspirations of getting into the gaming industry. I've not yet had a lot of success (I'm probably not going to leave Minnesota, and there are very very few gaming/3D companies here), but I think there are some things I can tell you that may help you along.

1) I've spent 6 years getting my B.S. in computer science, a year and a half working as a software engineer in industry, and am now going back to graduate school. I still have many many things to learn, and get frustrated over how much I don't know. You'll need to get used to this, becuase you will likely be dealing with it throughout your career. People constantly are developing new techniques to deal with problems, and trying to keep up can be exhausting. I'm not trying to disuade you, just be ready because you've got a big mountain to climb, and catching up with the professional mountain climbers is hard work, especially when they move so fast themselves.

2) It's good that you've learned C++ and C# as those are the kinds of tools that you'll need to use to build your software. It sounds to me like you may not have a strong background in algorithms and mathematics (as you don't really know what to do without a book providing some guidance).

You'll need a very strong background in these areas to actually do anything useful as far as game engine programming goes. Study BSP Trees, Kd-Trees, Barycentric coordinates, search algorithms, event loops, execution threads. Familiarity with various sampling and filtering techniques and statistical algoritms will be useful. You'll want a strong familiarity with matrix and vector maths. There's tons of other stuff you'll need to learn as well. Find a topic that interests you, and research what kinds of knowledge you'll need to implement it.

Personally I'm interested in real-time global illumination technqiues, so I studied various raytracing papers, wrote a basic raytracer, and am trying to learn all I can about optimzation. At some point I'd like to start writing a photon mapping (or similar technique) implementation on top of gpgpu.

3) Don't only focus on game programing. Learn to write object oriented code in Java, learn design patterns. Often times you'll want to avoid certain things for the speed tradeoff, but other things may be applicable to your game designs. The important thing is to know when to use these technqiues, and when they are less useful.

4) If you are getting frustrated, take a break for a little while. I've found that as much as I want to cram everything I can into my head at once, my brain just won't allow it. It seems necessary to do some mindless activity like go to the gym, watch TV, or play a video game from time to time.

Anyway, I'm not actually a successful game programmer, so take my advice with a grain of salt. I hope you make it some day. :)

Nite_Hawk
 
Last edited by a moderator:
You've got some good replies so far, so I'll keep this brief to save re-iterating :smile:

I've been programming for 8 years now, and the vast majority of that has been games and multimedia related (writing database/office apps never interested me). I'm still finding new things that I don't know about - I've got 4 years experience with C++ but I would most definitely avoid calling myself an expert. I'm a regular on a number of forums, and I could probably only names a few people that I'd consider as "expert" in C++.

Anyway, in a random burst of inspiration, I started writing a game yesterday afternoon. Spent 3 hours - from D3D's "EmptyProject" sample to something like this:

FirstEverImage.jpg

Most of the time was spent at the architectural level (memory leak tracking, xml log files, resource management etc..). Obviously, you can't really see any of that in the above image ;)

I don't wish to be cocky, but i'd expect the above to take you the best part of a week.

Set your sights a little lower if I were you. I would even go so far as to recommend you get a simple 2D game up and running before you set your sights on a full blown 3D world.

hth
Jack
 
ERP said:
Pick something sizeable an write it.

I used to write texteditors over and over, not because I really needed one (I've probably written 30 or 40 of them) , because every one I looked at sucked and I wanted to understand architecturally how I would write one solving the problems. Each time I would throw it away and design it again with hindsight.

I've done the same thing with writing basic 3D packages, aswell as compilers.....

Just depends what problem I find interesting at the time.

OK so I'm a bit obsessive.

The code is trivial to me, the architecture and problem set are what makes it interesting.
My pick was editors, OS'es, sprites and (G)UI's. I wrote many of those as well. ;)

Editors are definitely fun, and much more complex than most people think. :D
 
So, did you guys start programming when you began studying at a university/college? Or were you making useful, complex applications before then?
 
Intel17 said:
So, did you guys start programming when you began studying at a university/college? Or were you making useful, complex applications before then?

Hrm... that probably depends on what you mean by useful/complex. ;)

In highschool I did some work with 3D graphics, but it was mostly povray. I barely knew C at that point, and had only made a couple of rather poor programs that would generate povray and radiance models for me. I was a lot more familliar with sysadmining than programming back then.

It wasn't really until university/college that I learned how to program semi-competently. Runtime and memory complexity, object oriented design, recursion vs iteration, buffer under/overflows, computational theory... All of this I learned at University. Still, it took me another year and a half in industry before I really became a decent programmer. University taught me ideas, and industry forced me to put them into practice (and I picked up some other things like design patterns, code repositories, and good documentation practices in the process). Now I'm going back to the University to pick up things that industry couldn't teach me (advanced algorithm design, current research into diffuse illumination, etc).

Nite_Hawk
 
Nite_Hawk said:
Hrm... that probably depends on what you mean by useful/complex. ;)

In highschool I did some work with 3D graphics, but it was mostly povray. I barely knew C at that point, and had only made a couple of rather poor programs that would generate povray and radiance models for me. I was a lot more familliar with sysadmining than programming back then.

It wasn't really until university/college that I learned how to program semi-competently. Runtime and memory complexity, object oriented design, recursion vs iteration, buffer under/overflows, computational theory... All of this I learned at University. Still, it took me another year and a half in industry before I really became a decent programmer. University taught me ideas, and industry forced me to put them into practice (and I picked up some other things like design patterns, code repositories, and good documentation practices in the process). Now I'm going back to the University to pick up things that industry couldn't teach me (advanced algorithm design, current research into diffuse illumination, etc).

Nite_Hawk

Well, I'm 15, and it seems a lot of people (here) started when they were younger, and when they were my age, they blew me away by an astronomical factor.

I'm just worried that my mind may not be geared toward programming and/or I'm simply not intelligent enough.
 
Albert Einstein didn't speak until he was 5.
We could say that any average child blew him away by an astronomical factor. :)
So what? :D
 
Back
Top