OK. This one is not really an article. It was originally a post to John Romero's forums (http://rome.ro) as a reply to one wannabee game programmer. However, the response was quite long and some starters might want to see it, so I put it here :) Oh, and btw, the original post was here: http://rome.ro/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=1;t=000153 .




Hello, Keen is Good!

PageFault gave you great directives. Follow those
links and you'll learn a *lot*. However, those portals
are enormous agglomerations of information and it's easy
to get lost. I'll try to give you a few hints and make
a few statements that may give you some sense of direction.

Graphics/technology:
--------------------
First of all, decide the path of learning you'd like to
follow. I don't know why and I can't give arguments, but
the greatest programmers I know started with `oldskool'
EGA/VGA programming (I call it PCGPE school). [Here I mean
indie game developers, not professionals like John Romero,
John Carmack, Michael Abrash and all other great dudes, though
they did too of course, but for (maybe) different reasons]
This way of doing things features applying the exact (or
very similar) methods that were applied in Dangerous Dave,
Commander Keen, Wolfenstein 3d, Doom and Quake (in my personal
opinion Quake finishes the era of PCGPE school game
programming). That means locolor, software rendering,
lots of assembly and handoptimising.

Advantages (of following this path):
(o) You'll definitely feel the power of programming titillating
your liver. Trust me :)
(o) The most important thing about this path is that you'll gain
a very good knowledge of what's going on "out there", behind the
curtain, at lower level than programming language or API.

Disadvantages:
(o) Whatever you do is *exclusively* for educational purposes.
There's no way you'll be able to do any modern game
immediately after learning the wisdom of PCGPE. You'll still
have to learn OpenGL, DirectX and other modern techniques
if you want to become a professional game programmer.

Resources:
(o) What the hell is PCGPE? It's PC Game's Programmer's
Encyclopedia, assembled by Mark Feldman in 1994. You can get it
here:
http://www.fluidstudios.com/pub/3D-References/GameDevelopment/PCGPE/pcgpe10a.zip
(o) Books and articles by Michael Abrash. Namely,
The Graphics Programming Black Book (ISBN: 1576101746).
Google up more (dunno the ISBN :D )
(o) Portal Engine Series by Jacco Bikker at flipCode:
http://www.flipcode.com/portal/
(o) Read these first and then I'll give you a bunch more :)

Another path you may follow is diving right into today's
technologies. I don't mean starting to fool around with dynamic
shadowing and DOT3 bumpmapping techniques Carmack explores
now in Doom3. I just mean starting off with basic windows
programming, OpenGL basics, DirectDraw (it's back again in
DirectX9!). This way you'll be exploring *much* more up to date
techniques and learning the latest technologies will be only
further improvement, not starting everything over. However, i
find this path of learning a little bit fuzzy. This mainly
relates to the nature of programming for such an advanced OS
as Windows. For example, if you're not familiar with programming
(which i guess is the case), then the code for a simple window
creation will be a mess for you. IMHO, wasting time for learning
how to setup a window is an unwise thing to do.

Advantages:
(o) You'll be much more up to date if learning this way. Consider
this: era of VGA programming finishes with Quake and era of
OpenGL programming only starts with Quake2.

Disadvantages:
(o) You'll waste lots of time learning things you don't need
at a time. Like setting up an environment, learning basics of
your API of choice, etc.
(o) You won't get as good knowledge about internals of how things
work. This may trip you up at some point.

Programming languages/tools:
----------------------------
That is definitely an important decision. So how can you decide
so early, when you have no clue yet? You're the only one who
knows the answer, as far as it is *highly* personal. The only
thing i can tell for sure is that BASIC is high level languish
and APL is high level anguish :) *Don't* start with BASIC.
Go Pascal or C or C++, or Java. Whatever. But not BASIC.
W.r.t. tools, it highly depends on the path you choose (and maybe
vice versa). If you choose PCGPE school, there's no point of
obtaining MS Visual Studio Professional edition. If you choose
OpenGL/DirectX, you won't be able to do a thing with Borland
Pascal 7.0 or Borland C 3.x.
One little hint. Don't mess around with open source tools at
first. Dont get me wrong, these are excellent tools, i use them
and i am happy with them. The only bad thing about 'em is that
they require quite a bit of experience to set up and use
efficiently. Don't waste time, borrow/buy some good professional
software and learn the basics first.
Oh BTW, i know one freeware tool (well, actually it's donateware)
that is exception. It's Dev-C++ and you can find it here:
http://www.bloodshed.net/devcpp.html
Oh, one more thing. As LoneWolf said, it is possible to write
programs in Notepad. Any editor that outputs plain text may be
used. Even `ed' or `sed' :) But writing programs in Notepad is
a real pain in the ass; don't do it.

Attitude/motivation:
--------------------
Wow! Quite a bit written yet! I probably should have started with
this, b/c now i'm not sure if you had enough determination
to read up to these lines :) So, the *most* important fact about
game programming and programming at all is that it is *very*
difficult, it's taking all of your time, you'll loose you family,
your friends, everyone will treat you as riffraff and all the
Demonic powers of Hell will rush on your poor back! Scared yet?
No?
Then so be it, from now on i pronounce thee as a wannabee!
(sorry for so theatrical gesture :)
Despite the dramatic nature of the last paragraph, almost
everything there is truth (except for family and friends).
Programming is not a profession, it's a way of life. If you
know the real meaning of the word Hacker, then the shortest
definition of a game programmer starts like this: "a typical
hacker". By the way, read the `How to become a Hacker'
( http://catb.org/~esr/faqs/hacker-howto.html ) and you'll
find lots of information about how all hackers (including game
programmers) live, how they build up their lives and careers
and how do they get motivation.
If you ever run out of motivation on your way to mastering
programming, remember one thing: there's no negative experience!
If you make something wrong, that's _positive_ experience,
because you know not to do it again. An excellent example for
this statement is a story of total fiasco of Daikatana. I bet
my ass John has learned something (which is good) during those
years. No matter how painful is the set of events that give you
experience, the experience itself is _good_.

Final words:
------------
Oops, this post became quite a big rant, i'd say :)
So in the name of not making it even bigger, i'll just add that
if you have any questions/obscurities/ambiguities, feel free
to ask. Forums, newsgroups, mailing lists, personal emails,
it's all yours. Don't be frightened by the fact that people
don't like newbies. Follow the RFC1855 and `How To Ask Questions
The Smart Way'
( http://catb.org/~esr/faqs/smart-questions.html ) and your
questions will be answered.
Well, i think that's all for tonight.

Cheers,
Vytautas Shaltenis, a.k.a. rtfb

P.S. Note, that i'm not a professional programmer. These are only
my observations. Everything i state in this post is just
my humble opinion and does not necessarily match my humble
opinion ;P

P.P.S
John, you have a bug in your forums. The URL detector refuses
to recognise text inside parentheses as URL if there's no
whitespace. At least it does in the preview mode.
Compare:
(http://rome.ro) and
( http://rome.ro/ ).
Happy bugfixing :)

-------------
Vytautas Shaltenis, a.k.a. rtfb