If you could go back X years and start again (but with today's resources!!), how would you teach yourself games programming? Would you:

start with an engine and teach yourself [insert language here] through tutorials & community feedback, but constrained by the engine's framework, or would you

start from scratch (e.g. through a book) and only look at an engine once you'd got the basics of the language nailed down?

Or maybe a combination?

I've spent the better part of this past week looking at threads, articles and tutorials on getting started in game development. There is so much conflicting advice because the majority of it seems to be in response to the person asking the question (i.e. "what features do you want" or "what experience do you have" or "which platform do you want to programme for").

My intention is not to start another "where so I start" thread, but rather seek your own experiences from a bit more of a "lessons learned" perspective.

I would pick a managed language, such as python, and get a 2d library for it like pygame or pyglet. Study the language first and then write some games with the library. I still consider it the best way to get a general appreciation for game programming. You will do your own rectangular collision algorithms and simple physics, and possibly a-star path finding from a top view, and have a general idea how everything works. I think it would be possible to also start with an engine like Unity, but it leaves a lot of holes in your knowledge base since most things are already done like collision detection, etc. 2d games are also easier to get resources for and are more elemental, so it helps from a game design stand point. The only real problem is that 2d animation is horribly complicated, so you have to keep it really simple on that end. That's sort of better too, though, because you will write games that are games, not graphics. Another 2d engine choice might be flashpunk if you are more interested in web games. I think python is really the best starting language, though, and has many purposes, so will always be useful. What generally happens is people choose an engine like Unity, then decide to do something like an rpg because getting models in the engine and using someone else's script is pretty easy. They find out that they can't produce enough models and they have to write their own scripts which are quite a bit of work and eventually give up. If they had started out with realistic expectations and had a little patience, they may have found a hobby or career they enjoyed. I have known a lot of people that have started rpg's, but none that have finished one.

Truth be told, every developer feels like that. I can't think of a single moment where I had something on hand that was ready to go. There's always upgrades, better algorithms, better designs, and more coding. Whether I use 3rd party software or my own, the end result is what I keep in focus at all times. How I get there is really a matter of choice and careful planning to ensure my needs will be met.

The best advice I think you can ever get is to just go and do it. There's no subjective opinion, there's no pros and cons, no hidden meanings. Only a task, an outcome, and experience earned. What matters is what you want and the best way to get that is to try. You don't walk into a car dealership and buy the first thing you see. You have to get in the driver seat and take it out for a spin before you can make a sound decision. If you feel in the mood to try an engine, check out the DevDB here on DevMaster to find one that suits your needs. As long as it has a friendly website with supporting documentation, it should be a straightforward exercise. If you want to try and go solo, find and read some articles on DirectX or OpenGL and work your way up from there. At any time you feel something is wrong, you can easily switch paths. Nothing is stopping you from walking on both sides of the river.

I've gone with the suggestion about learning Python (version 2) and have just run through the first 4 chapters of Al Sweigart's beginner's book "Invent Your Own Computer Games with Python" (as it is availble as a free PDF on his website!). He also does a follow on book "Making games with Python & Pygame" which is also free and runs through slightly more advanced concepts using Pygame.

After I've finished these, I'll see where I end up, but I'm no rush to create the next big thing. Sounds like OpenGL (thanks, fireside) and Panda3D (thanks for the heads-up on the DevDB, TheNut) could be good choices, but I'll see how I feel after I have a better handle on how it all works!

Option 4: "What do you mean by games programming?" because it includes making games, making game engines, making tools, etc.

Assuming you mean games, then I would learn by making successively more complex games, starting with a "single-page", text-based, console app all the way to a WoW-busting MMO. (Obviously, there are lots of steps from start to finish.)

When I started we worked in machine code. In fact when I first got my hands on a ZX80 I spent the first three weeks writing some code to emulate the Apple system which allowed you to type in hex codes and then disassemble the program you have just typed in.

Why I didn't just write an assembler I will never know, I was young and stupid.

If I did a lap around a singularity and ended up 13 with a computer today, I would probably be one of the idiots we get on this site who wants to write everything in a MMORPG from scratch.

Unlike most of them, I would have probably done it as well.

It would have been a huge waste of time of course. By the time I had finished it, the technology would have moved on and my home grown engine would be out of date.

If I was advising my young self, I would probably tell me to pick a platform. Pick an engine. Then write games. Doesn't matter how good they are, just get some games under your belt.

The amount you learn from actually completing a game is amazing. It cannot be underestimated. The things you come across that can trip you up even on a simple game will amaze you.

I once had a bug report on the Atari ST, "press these five keys with your left hand, these five keys with your right hand, and press the spacebar with your nose. Game crashes"

I would advice myself to stop playing with the amiga and (re)start coding like in the good old c64 days, i had the amiga for 4 years and those years were sweet, but with almost no programming at all. Second, i would stop myself pushing hires svga programming because all that time was totally wasted. Don't jump from an university to another just to be nearer home.