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