Getting Started

Published October 01, 2007
Advertisement
Anyone who's been around GameDev, or, indeed, any online game development or programming resource for any significant length of time is familiar with the frequency of beginners asking, where do I start? They sometimes have grand ambitions (insert MMO joke), and sometimes they have a better understanding of how accretive skills acquisition is, but they all want to get started and progress as quickly as possible. Here on GameDev, it is universally agreed that our Start Here page is woefully out of date, so much so that there are projects to overhaul it (again!)

Here's the thing: I wonder if the fundamental method employed by that resource and similar articles/tutorials across the internet isn't wholly inadequate. We start by asking them to make decisions - by trying to guide them in making selections such as what language to choose, etc - as if those things matter. They Don't (My Opinion(TM), which I will be dispensing liberally without caveat or condition since this is, after all, my journal [smile]). There is a growing acceptance within the community that which language you start with doesn't really matter, so long as you stick with it enough to learn the basic concepts of programming. Concurrently, there is a rough consensus that tools that help the beginner make a game quickly are more valuable and preferable because they stave of frustration. So a good foundational programmer's resource is one that familiarizes the student with core concepts more quickly and thoroughly.

Another common question is what engine to use, to which jpetrie's essay Write games, not engines is quickly becoming a handy and comprehensive corrective, in much the same way that questions about how to use multiple C++ files invariably elicit a post of Kylotan's Organizing Code Files in C and C++. We've seen hobbyist after hobbyist slave away for months and years to create an engine, and then not be able to use that engine to create any games. So a good foundational programmer's resource focuses on making games, not bits of technology in isolation.

Software engineering formalisms are beginning to percolate widely through the game industry and indie/amateur/hobbyist community. More individuals are using revision control to manage their source and assets. More developers are writing unit tests, and some are even employing test-driven methodologies to validate their design and code as it is written. I'm not a fan of buzzwords, and I hate secular religions/cultisms, so I'll stay out of any debate involving any idea that was articulated in a manifesto. Nevertheless, I think introducing these formal tools and practices earlier rather than later is a huge boon - I've argued that proper use of the debugger (and preferably of a modern, capable, graphical debugger) should be a university computer science prerequisite. In any case, our third maxim is that a good foundational programmer's resource teaches good use of tools and good development habits from the onset.

I'm working on an experiment. I'm writing a new foundational resource for game programmers, and I'm trying to embody all of the above guidelines. I'm writing a complete game, a non-trivial game, and providing the complete sources. I'm starting with a simplistic prototype, building it up gradually, and refactoring to improve code quality and add features. I'm placing all the code into source control, and I'll make the repository publicly available when the resource is published.

I can't do everything in one resource, so I'm actually planning to write multiple - at least three. The first covers the construction of a Tennis game by prototyping as Pong and refactoring into the final product. The second will work from a formal design document to create a multi-directional shooter, while the third may be a small RTS. I haven't decided yet. My hope is that the resources will be useful not just to absolute beginners, but also to people with some programming knowledge but questions about how to actually go about making a game.

I'm writing it in Python. Not because Python is "better," but because anybody can read Python syntax. It also lets me focus more on the programming concepts rather than language constraints and/or workarounds. Also, the basic Python toolchain required is simple and universal (and free).

I've already started. The Pong game is almost feature complete; I just need to add player-directed serves, frame rate independence and menus (a one-night job, if I can find one night this week... day job is hectic!). After that I'll do replacement of crude rectangles with sprite graphics, then we're a few steps away from a very basic Tennis game.

I won't release until it's complete, because there's nothing worse than adding to the plethora of unfinished "tutorial series" on the intertubes. I'm projecting submitting the whole mess to GDNet editorial (read: Drew) by mid- or late November, then I'll take a vacation before getting started on Resource 2.

Thoughts, requests, comments, criticisms. Fire away!
Previous Entry Parties!
Next Entry Showing vs Telling
0 likes 2 comments

Comments

Telastyn
Yay in general.

I'm skeptical that any 'Start Here' will be sufficient for beginners since they tend to ignore advice even when it comes with good reasons since they tend to think they know better (since they've not yet learned the value of experience). Still, good advice is good and this sounds pretty good.
October 01, 2007 06:33 PM
Oluseyi
That reminds me of something I forgot to cover in this first note, so I'll address it in depth in a future note. I think current resources have too much text, trying to describe visual things. I plan to rely heavily on illustrations, animations and even video if possible. Show, rather than tell.

I also figure that most beginners will ignore it, but after floundering for a while will come back and discover it and then post a comment like, "I wish I had found/followed this when I was just starting!" :p
October 01, 2007 06:46 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement