Where to start as a Professional Programmer who want to code games?

Started by
7 comments, last by frob 10 years, 1 month ago

So unlike a lot of people I see posting in this section, I already know how to code. In fact, I do it every work day to pay my bills. Past experience has been in C/C++, then C#/>Net, then Java, and now Python on AWS. Its been a while since I touched C/C++, but I know not to try to deference a void pointer and I know enough about memory management to know I would rather not do it in a multi-threaded environment with only printf as my debugging tool.

My biggest hangups are on the graphics side. I can code a REST api, build a scaled out architecture that will service millions of calls at a time, secure communications, write back end servers, set up and architect systems, etc all day. (and I do as part of my day job) but the local client just makes me derp up and freeze. Its a black box, and I have no clue what to do or where to start.

Looking around the forum - I have lurked for a while - the most common answer to this sort of question has been "first, you need to learn to code". I have that covered. I just cant find something I can use to get started. I lack confidence because I don't know this "graphic stuff" and all of the other skills I have seem worthless.

I tried a book by a guy named Lynn T. Harrison, titled "Introduction to 3d game engine design using directX 9 and C#". The first thing I see when I go to the site and get the source code for the book is a note that states that due to changes in the sdk, none of the code will ever compile.because - as I know now - he used classes that no longer exist and they are used in utility methods used everywhere in his engine.

So I did some research and found the "game programming gems" series; bought the first 6 titles, sat down, and started reading them cover to cover over a weekend with the full intention of learning everything. I then realized I just didn't' have the graphical foundations i needed to make use of the visual parts so while a lot of it was interesting, it was not something I could use to make a local client/game, and in some cases, I felt lie I was reading the second book of a 2 part series.

This is not easy for me to ask. I'm used to being the smartest guy in the room; this makes me feel dumb. How do I learn this? Where do I start? Amazon has so many options.. how do I know whats good or not? I'm stuck in this odd place where i feel like either I'm too ignorant to be able to judge the books effectively an pick the correct one, or too advanced to be able to get anything out of them except for the scraps from the one chapter.. is that the way to go? Just buy a lot of books for the one chapter out of 20 that I can learn from?

Or am I just starting at the wrong place? Should I try something else first? What is the recommended thing for a professional programmer to do in this sort of situation where its just the graphical part that is the black void he doesn't understand?

Advertisement

It's not clear exactly what you want to do. There isn't a single resource on how to write a "client application". It could involve anything from AI, to sound, physics, 3D graphics, 2D graphics, animations, shaders, file IO, resource management, threading systems, etc.

If you want to learn 3D, for OpenGL I suggest this http://www.arcsynthesis.org/gltut/

It explains pretty much all the theory behind all the examples it provides. Its C++, but the language is more or less irrelevant, you want to pay attention to the OpenGL API calls.

Its not a hard cover book, nor its 500 pages long, but give it a try. After that you'll have some idea on how "computer graphics" works (from 10 thousand poly models to sprites, it all boils down to the same principles). Then you can keep working on OpenGL or move to some other API (most of the concepts translate to other APIs).

Now if you want to learn how to code other kind of systems (as I said, audio, AI, etc), then you'll have to look up resources on those specific topics.

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

If you really do have experience in programming, GD is just around the corner.

One important thing to notice is that you don't really need to be a graphics expert. Actually, there's plenty of room for good server/multiplayer engineers/programmers, as you implied you have experience.

But there's also tools programming, audio, gameplay, AI...

As game programmer, despite the area you choose, you'll need a good portfolio. For that, you'll need code samples, prototypes and, if possible, one or more games.

If you want a tip, stop neglecting practice. Studying theory, reading books, is good for you, no doubts about that; but if you never sit down and mash your keyboard you'll never get there.

Think of simple small games, create them with code quality in mind (2D will do if you don't want to go 3D just yet). If you have already chosen an area to work in, focus on it, be it graphics, tools, AI...

After you successfully created a small game, start fooling around with performance/memory profilers, version control systems and anything you may not have used.

The only thing you're lacking is research, and research no one can do for you. Still, I can name some game engines for you to look up.

  • UDK
  • Unity
  • Monogame
  • Cryengine
  • SDL
  • Maratis3D

SDL and Monogame are probably the most accessible ones I listed for a single experienced programmer that is giving gamedev a try.

I just wouldn't go straight into OpenGL and DirectX, as they usually require a lot of time to do even simple things. Give game engines a try, and if you ever decide to go the 3D Graphics programming route, then you come back to OpenGL and DirectX...

A number of professional game programmers never touch graphics as a part of their job throughout their whole careers. Even those of us with a grasp of graphics typically don't touch it; I haven't touched a line of graphics code professionally but have done lots of tools, gameplay, systems, performance, UI, networking, and core engine work. There's a billion and two things you can do in game development besides graphics.

So I did some research and found the "game programming gems" series; bought the first 6 titles, sat down, and started reading them cover to cover over a weekend with the full intention of learning everything.


Those Gems books are great resources but they're not meant to teach you to make games nor do most game developers really read them cover to cover. Use them as references for specialized topics after you've already got a solid basic skillset in game development.


You should start with some simple tutorials. Do them in Python (PyGame, Panda3D, etc.) or JavaScript or Flash (plenty of frameworks and even a few engines in those) if that's what you're most comfortable in. The concepts of the game loop and simulation of motion and audiovisual effects and game structure are far, _far_ more important than the language you use at this point. C# or Java are also valid choices especially given that C# is used rather a bit in the games industry these days thanks to Unity3D.

There's also the option of doing what you do now but doing it for games. Modern games need big scalable REST services just as much as any other multi-user application. MMOs of course really need your kind of expertise but even smaller multiplayer games or a (sadly) increasing number of single-player games need extensive game-specific integrated Web services as well. There are also game-related services and tools; Steam or Origin or XBOX Live or PSN or so on. You may find it more satisfying to work on something that helps games succeed rather than developing the game itself, given the nature of the game industry.

Having a vaguely similar background to you, my personal path into the games industry included going back to school and studying game-specific technology more in depth than I had been able to do on my own. It was an expensive and time-consuming path but I don't regret it.

Sean Middleditch – Game Systems Engineer – Join my team!

It's not clear exactly what you want to do. There isn't a single resource on how to write a "client application". It could involve anything from AI, to sound, physics, 3D graphics, 2D graphics, animations, shaders, file IO, resource management, threading systems, etc.

If you want to learn 3D, for OpenGL I suggest this http://www.arcsynthesis.org/gltut/

It explains pretty much all the theory behind all the examples it provides. Its C++, but the language is more or less irrelevant, you want to pay attention to the OpenGL API calls.

Its not a hard cover book, nor its 500 pages long, but give it a try. After that you'll have some idea on how "computer graphics" works (from 10 thousand poly models to sprites, it all boils down to the same principles). Then you can keep working on OpenGL or move to some other API (most of the concepts translate to other APIs).

Now if you want to learn how to code other kind of systems (as I said, audio, AI, etc), then you'll have to look up resources on those specific topics.

I am aware that a game is multiple systems working together, thank you. My blind spot is the graphical layer; Its something that i have no knowledge of. i do have prior experience in:

  • Audio (writing codec's and audio subsystems for mobile phones, mostly),
  • AI (FSM's, Path Finding, Some neural Network and Bayes systems experience with 'big data" data-sets, mostly, but I suspect I will need to brush up as genetic algorithms are of interest to me).
  • Physics (simulation of scientific models, mostly)

Things like file IO (memory mapped, steam based, and fd based) and threading and other resource management seems sort of "normal" to me (Unless I'm missing something special about it in a gamedev context?) Am I missing something special about these?

I see the graphics things like shaders, 2d and 3d animations, as my biggest gaps in knowledge. I am very ignorant of them and are not sure of where to start; And clearly the data I thought i knew is now outdated and can not be trusted; its a shame too as I just got a big black book titled "Michael Abrash's Graphics Programming Black Book (Special Edition)" I found at a second hand bookstore, its really old, Is that data/book still any good? Is it worth reading or did I waste my money?

I will read that link next, It looks like a nice deep dive that could last me a while. Thank you.

If you really do have experience in programming, GD is just around the corner.

One important thing to notice is that you don't really need to be a graphics expert. Actually, there's plenty of room for good server/multiplayer engineers/programmers, as you implied you have experience.

But there's also tools programming, audio, gameplay, AI...

As game programmer, despite the area you choose, you'll need a good portfolio. For that, you'll need code samples, prototypes and, if possible, one or more games.

If you want a tip, stop neglecting practice. Studying theory, reading books, is good for you, no doubts about that; but if you never sit down and mash your keyboard you'll never get there.

Think of simple small games, create them with code quality in mind (2D will do if you don't want to go 3D just yet). If you have already chosen an area to work in, focus on it, be it graphics, tools, AI...

After you successfully created a small game, start fooling around with performance/memory profilers, version control systems and anything you may not have used.

The only thing you're lacking is research, and research no one can do for you. Still, I can name some game engines for you to look up.

  • UDK
  • Unity
  • Monogame
  • Cryengine
  • SDL
  • Maratis3D

SDL and Monogame are probably the most accessible ones I listed for a single experienced programmer that is giving gamedev a try.

I just wouldn't go straight into OpenGL and DirectX, as they usually require a lot of time to do even simple things. Give game engines a try, and if you ever decide to go the 3D Graphics programming route, then you come back to OpenGL and DirectX...

GD? What is that? You mean gamedev?

Game programmer Area? So I should specialize? Or do I have to? What if I like being a "full stack" guy? Is that possible?

I looked up a lot of engines; But the people I sent emails to about details to use them to learn them didn't get back to me, as all of them seem to be commercial with undisclosed prices. Its almost as if they are scared of telling people the price? Or maybe they don't have one and just make one up based on how important looking the person asking for it is? Most of the effort seems to be in getting these companies to respond to you, else you cant get the devkit to use to learn... and they don't seem to think I am important enough to reply back to, so I have nothing to learn with. :(

You did list some opensource ones too, I will look into them as well. At least I should be able to get source on them without waiting for weeks for an email response :/

Thank You.

Since you mentioned you know C# there's a free book you could check out:

Introduction to Programming Through Game Development Using Microsoft XNA Game Studio, by Rob Miles. http://www.andrews.edu/~greenley/cs2/IntroProgXNAGameStudio_eBook.pdf

Of course, these days you'd want to use Monogame in lieu of XNA, but I've heard it's pretty simple to transition over. And hey, price-wise it's hard to beat free!
Others have mentioned SDL, and on that note I'd recommend checking out this video from Steam Dev Days:
" title="External link">
. The guy goes into all the different functionality you can get from SDL, to include some very simple graphics as well as an easy way to use OpenGL. It's a fascinating video that I think I'll be linking in threads here for a while, and you might also check out some of the OpenGL videos they have (though I haven't watched those yet, so I can't comment intelligently on them).
GD? What is that? You mean gamedev?

Yes!

Game programmer Area? So I should specialize? Or do I have to? What if I like being a "full stack" guy? Is that possible?

If you want a job, you can try to go generalist or specialize yourself. I, myself, try to specialize in AI, as it is tightly tied to my mechatronic engineering background.

I can't say this for sure, but it is easier to convince someone you're a specialized engineer and a fairly competent generalist than that you are an exceptional generalist. Usually, specialized coders are just as good generalist as those who didn't pick an area of interest to dedicate a little more time...

That is my experience working on small projects, with small teams, where the generalists were just as good generalists as the other ones. That may not be true on higher standards gamedev...

But if your intention is actually to code an entire game by yourself, it certainly is possible.

I looked up a lot of engines; But the people I sent emails to about details to use them to learn them didn't get back to me, as all of them seem to be commercial with undisclosed prices. Its almost as if they are scared of telling people the price? Or maybe they don't have one and just make one up based on how important looking the person asking for it is? Most of the effort seems to be in getting these companies to respond to you, else you cant get the devkit to use to learn... and they don't seem to think I am important enough to reply back to, so I have nothing to learn with. sad.png

You did list some opensource ones too, I will look into them as well. At least I should be able to get source on them without waiting for weeks for an email response :/

Thank You.

You will want to download non-commercial copies of these commercial engines, I'll provide links here, if you're interested.

Remember, you'll just be getting experience and building your codefolio, not really releasing commercial games with them just now.

UDK - http://www.unrealengine.com/en/udk/downloads/

SourceSDK is available under Steam, need a legitimate account- https://developer.valvesoftware.com/wiki/SDK_Installation

Cryengine - http://mycryengine.com/

Monogame, Maratis3D and SDL are all Open Source.

If you want, here's post I made some time ago: http://www.buildandgun.com/2014/02/my-gamedev-bookmarks-danger-minefield.html

There's an engine list at the very bottom of that post.

From what I can see, you are having issues figuring out where to start with graphics? There are several libraries that have been already mentioned, and all of them should have simular graphics setups, much as all the physics engines I have played with were simular in nature.

I recommend starting with a simple 2d setup at first (for myself, I really enjoyed LibGDX, which uses java, when I was first getting into figuring out some things, and it looks like they now have some more nice tutorials, such as http://obviam.net/index.php/getting-started-in-android-game-development-with-libgdx-create-a-working-prototype-in-a-day-tutorial-part-1/ ).

As you have seen since lurking, it is often recommended to start with pong. It is very simple to make, easy graphics, and a good way to learn a new system.

Anyway, many libraries will keep you from having to do the low level details. I started using LibGDX because I needed to do low level details, then looked at their source and saw most of it was written how I would have done it. I recommend using an open source library, seeing if you can get anything on the screen through looking up some tutorials, then reading through any render functions called if you want lower detail. Examples would be sprite.draw(),

Of course, if you were referring specifically to animations, then for 2d it is often a series of sprites from a spritesheet or textureatlas (in libgdx), and I believe 3d is vertex manipulation. I haven't really done much 3d outside of school years ago... have started playing around in blender, and can import things from blender to the Playstation Mobile Development Studio now, which has simple models and shaders available to do what I have needed thus far.

Seconding others (beyond the up-votes) -- based on your described experience you could probably go get a job as a video game programmer right now.

The days of one programmer knowing everything about everything in a modern game are long gone. They went away almost twenty years ago. Games today can be massive engineering exercises with hundreds of developers. They can also be smaller teams, which means 20-35 developers. On smaller teams people will touch multiple systems; most people above the junior levels are expected to have ownership of one specific domain rather than a shotgun splattering across all areas.

Right now you are working on back-end database work, you probably seldom (if ever) work on the front end work of making the user-facing components beautiful. That work is usually given to a team who focuses on it specifically. So it is with games; server backend teams, network communications teams, AI teams, tools teams, graphics teams, GPE (gameplay engineering) teams, and more.

If you are looking for a game development job, just start applying. It is unlikely (but not impossible) they will pay for moving costs as you don't have industry experience, but if you live in or near a city that has game developers (see gamedevmap.com and similar sites) you could apply for and likely get interviews for jobs focusing on networking.

/edit: The gems books are good. There are lots of books, basically if you want to learn you need to start somewhere. They assume a pretty solid math background, and if necessary you might want to brush up on college-level math like linear algebra. 3D graphics is little more than applied linear algebra, the math of manipulating things in spaces.

This topic is closed to new replies.

Advertisement