Michael Abrash on Games Programming
An anonymous reader sent in an awesome article by Michael Abrash (If you don't know, I'm not telling). Tons of great bits in there, advice, anecdotes etc. Definitely worth a read if you are
either a programmer, or a game fan.
One counter argument to the notion that violent games like Quake cause violence is that such games actually give an outlet to violent tendencies, preventing them from manifesting themselves in everyday life. If you believe that argument, you could extend it to believe that games have prevented some people from becoming serial killers, thus saving lives.
I doubt many people who write games believe either side of that. I know I don't. But it's what you asked for, an argument that games save lives.
No one needs to sell a programmer on the benefits (both personal and professional) of a job programming games (or of scientific programming). How about giving us a few urls discussing how one prepares for and ultimately lands a job developing games?
As I sit in my cubicle coding financial crap, I feel like articles like these only aim at making fun of me! Don't just talk to me about the value of freedom when I'm stuck in a prison... liberate me!
w o r l d w i d e w e b e r
"There are two ways to answer this; one is by paraphrasing the man himself. Games programming is one of the last bastions of 'pure' code; you can write from scratch, and optimisation counts. I stopped being interested in programming when Windows was becoming ubiquitous; I don't like using other people's libraries. So as Obi-wan would say, games programming does transcend; from a certain point of view."
I thought most people no adays who work as programmers usually had to use the libraries of others. I sure see that when I look at several hundered such libraries needed by various programs.
"As for the fulfilment: the big software that keeps hospitals running is first and foremost accountancy software. I've written this sort of thing, and it's soul-destroying work. Knowing that it was used in a hospital and was helping keep people alive would have made the pill a little less bitter, but not by much."
The tool is neutral. I see little way in which writing a program could destroy my soul unless I kept failing to be able to actually solve the problem and the compiler kept bitching at me and this continued over a very long time then yes it would destroy my soul. To be perfectly honest I am in CS not for the fun but for the possibility of a job. I have other interests which are more fun and interesting but I just don't have the nerve to approach them.
"Are games trivial? Of course they are. How many people do you know who wouldn't benefit from reading a book or visiting a museum rather than fragging ass?"
Not all games are FPS games. Many RPGs have a deep and meaningful plot which is very enjoyable and are usually my first choice for a game genre to look at when buying. Games are only made for a while and will eventually be no more. That old museum or book will be around in some form for probably longer than I am alive.
"But much as I like reading and museuming, I still like crushing the weak underfoot, and consider that aspect of my character - and social life - to be one of the many traits that make me the wonderful human being that I am today."
Was that a faceous remark? How are barbarism, savagery, violence, and acting like some hard ass navy seal officer good traits to propragate?
"Is the absolute aim of each human to live longer, or to live better? If I wrote a game that brought enjoyment to millions, and pushed the envelope slightly so that future generations of games - and/or hostpital software - benefited from my insights into coding, then I'd feel pretty fulfilled."
Well long life is a plus but having a crappy long life is nothing that I would welcome. The idea is to make sure you have the same quality of life that you have now and keep that quality as you extend age.
PS. The lameness filter is really bad for quoted text and dosn't like anything that it thinks is a "troll". It must be fixed.
The death of one man is a tragedy; the death of a million is a statistic --Joseph Stalin
This is, by far, the most salient piece of advice Michael offers. Do what you love. If you don't love what you do, or stop loving it, do something else -- fast.
... or if you don' love what you do, do something else until you find it.
I count myself lucky to have known so many of the seminal game designers "way back when." Michael, whom I met years ago when he was working with Dan Illowski's game company, is one of those folks who always seemed to be right-focused, and he inspired me to stay happy.
I count myself fortunate to be able to say that I've always loved the things I have done for a living. But that was only because of a willingness to change what I do. When game-design turned into a drag, I found the law. When that stalled, I went back to engineering for a brief time. Now I'm doing both, and loving it.
MIchael's observations will seem kitch and cliche to some -- but if you think its pointless, you are most certainly missing a very important point.
Just do something you love
Yes, but remember that in worst case binary search can degrade to O(n) if the tree is unbalanced. To ensure quick search the binary tree must be balanced (AVL tree).
For those of you really interested in 3D games such as Quake, you may want to check out id's collection of source code. There you can find the source to Quake, Linux Doom, and Wolfenstein 3D.
~Ken
reminds me of a guy i worked for who told me he used to be an engineer at motorola or something up in dallas... his team found a way to make some feature on cell phones speed up by 1/10 of a second or something like that. saves billions of dollars for the megacorp, but what does it do for the engineers? not much.
eudas
Blessed is he who expects the worst, for he shall not be disappointed.
I found a reference to the "It's Great To Be Back" as being a short story published in 47, but I can't find a book anywhere that contains it. Does anyone have any leads on where it may be on the net or book?
Thanks
Glutious
Jeremy
"Opinions are like assholes; everyone's got one..."
When I tell people that I'm a Computer Science major, their first reaction is that I'll probably make lots of money. Regardless of the truth of that statement, it saddens me that people think of that first. Even many of my peers are in this program because they think it will be a ticket to a high paying career, even though they hate what they are doing.
So its incredibly refreshing to see an article like this. This reminds me why I chose computer science -- because I love it! Its in my blood! Call me a geek, but binary search is beautiful (log n!!). I can't stop reading about this stuff after school and on weekends.
It almost seems like Abrash really enjoyed his time with game programming, but wanted to 'do the right thing' and go into "a software field with deep structure and long-term challenges-something more significant, difficult, and ultimately rewarding." But in the end, his love for games and graphics programming won out.
Thank you for this inspiration, Mr. Abrash!
For Team Fortress 2 they have, but for HL it's mostly a mix of Quake/Quake2 engine code. If nothing else it saved them time to work on the content.
Games programming is one of the last bastions of 'pure' code;
don't believe the hype, I had fairly recently a short stint at a games development company (whom I will not name) and nowadays pure coding doesn't seem to be the case anymore.
I should know, we had to use an IMHO sucky gaming engine just because our publisher wanted us to, and we wouldn't have offered a contract if we offered to write our own engine (which IMHO would have been a zillion times better than what we were forced to use).
Nowadays games programming is getting closer and closer to assembly line programming, it's all milestones, milestones, milestones, using pieces that you can buy off the shelf as much as possible to minimize publisher's exposure (your team tanks ? who cares, the publisher still has the license to the engine you are using, while if you were developing from scratch, they wouldn't have anything).
IMHO (again) games programming used to be fun and 'pure', now for many developers it's as rewarding as sucking rocks through a straw, I mean, to get into games programming (I wanted to see it first hand) I had to take a significant pay cut, work nearly twice as many hours, and have far less freedom in my technical decisions than I had at any other company I worked in: after a while I figured it was not for me, and found a much much more rewarding (financially and professionally) job elsewhere.
Before buying in the hype, please do yourself a favour and research how the games industry really is nowadays. While there are some fun software houses to work in, the likelyhood you're going to end up in one of them (especially as your first job) is not that high.
While some of what's posted there is mostly flames etc. reading Fatbabies will give you at least an idea of the flip side of the coin.
-- the cake is a lie
They might be fulfilling to the programmer, but that does not necessarily mean that games programming is the highest form of programming.
In addition to the errors in this statement that have been pointed out by others, also note that he said that games push the limits of hardware (700 Mhz processors and 3D accelerators) more than most other kinds of software. In other words, games are not a higher form a program, but they do consume more of the computing resources than most other categories of program.
I don't know about this... I don't consider Q3 or UT to be definitive shooters at all. The definitive modern graphic engines maybe, but that was the whole point of their development and release, I always thought; to spend all the time making a great engine so that OTHERS could spend their time instead making great games... like Quake III engine has led to such beautiful games as FAKK2 and American McGee's Alice, because they didn't have to spend all their time writing a kickass graphics engine. I think we will see more of this in the future.. we live in an age of specialists.
"Valve focussed on playability, story, and fun in HL"
Absolutely... because they didn't have to write the engine from scratch... as others can now do with the Q3 and UT engines. I expect to see a lot of incredible games come out over the next year or two based on these (and other) engines.
"Mind, as manifested by the capacity to make choices, is to some extent present in every electron." -Freeman Dyson
Not everyone plays the games 24/7. I consider myself a gamer, but I play in moderation. I balance out the free time I have (I work in IS so that's very little free time) between, family (except my in-laws), friends, hobbies (mountain biking), games, etc...
But I can say that playing games drastically improves hand/eye coordination, and games like Myst (puzzle type games) help improve problem solving.
The entire Java industry is based on this assumption. Check back in 5 years or so to see whether it's correct or not.
Some "old" stuff just won't die, it'll live forever.
Brooks and Abrash are my heroes in computer programming.
www.everything2.org:
Gate A20
(thing) by Merlin83 Thu Jul 20 2000 at 14:26 utc
A20 refers to system address line 20 on the address bus in IBM-compatible PCs.
8088 processors, when referring to address lines greater than A19, would wrap around to the first address line. Some programmers made use of this 'feature' in their code. When the 80286 came along, with it's larger address space, lines above A19 existed and so the wrap around 'feature' no longer worked, and the processor would simply address higher areas in memory (those in the HMA - the Higher Memory Area.)
There is an option in BIOSes these days called 'Gate A20'. The purpose of this option is to restore the system to the state it was in the 8088 days, ensuring that addresses above 1MB of memory actually do wrap around, as they did before, thus ensuring that older programs would still work. It's a bit of a useless option really, since the programs that did use this feature have surely been superceded by newer programs, but it's there nonetheless.
For a more detailed explanation, see http://www.smsc.com/main/appnotes/an612.html
****
I don't get it either. But my guess is that the twist is that if you need this instuction to invoke virtual memory or something you've already exceeded the 256bytes.
/Patrix
I consider Mike Abrash my personal hero. His writing inspired me to get into graphics programming. He has a simple way of writing, and he makes it a pleasure to follow him thorough the complex concepts he writes about.
Mike's "Zen of..." books should be on any graphics programmer's bookshelf.
It's kind of sad that he now works for Microsoft, but I guess it's good for MS--if nothing else it proves that they CAN hire talented (and old-school) coders.
His tips on the second page are golden! Particularly:
Get past the abstractions and know what your code does. Profile in many ways: profilers, NULL drivers, bracketing key code with timing calls, breaking into the debugger at random and seeing where you are. If you don't do this, you're guessing.
Knowing what to optimize matters as much as knowing how to optimize. Otherwise, you'll optimize the wrong thing, and end up with really fast slow code.
He changed the way average programmers thought about hardware. For anyone who dosen't know, michael abrash espoused 100's of algorithims and assembley techniques in his books which were non-intutitive uses of the hardware and language -- but which ran dramatically faster. And he made some great games in the progress ... Doom ? :)
Free Techno/Jazz/DNB/MI Music by guys obsessed with monkeys!
Its amazing how facts can get so twisted. :P
> games cover a huge range of technologies-graphics, physics, modeling, scripting, AI, networking, databases-more than any other kind of software I can think of. What I finally realized was that, for me at least, game programming is the sweetest spot in all of software development.
They might be fulfilling to the programmer, but that does not necessarily mean that games programming is the highest form of programming. Don't get me wrong, I like a Quake deathmatch with the rest of the office as much as the next guy, but to say that games programming somehow transcends other software is wrong.
Surely it's much more fulfilling to say that you created the software that runs a hospital which saves people lives, or that we sent man to the moon on one of your programs. Compared with these games seem just a little trivial.
I have a spot for those in my source tree. :-)
Need a Python, C++, Unix, Linux develop
I'm a game developer working on the Open Source Genesis3D game engine for a new version coming out.
It has always been my dream to do some type of programming that was constantly a challenge as I tend to become bored very easily. There is always some challenge to game programming as you do your best at something then have to do even better next time around. You are constantly trying to out perform the best out there and constantly pushing the computer to it's limits with the latest games.
It can be a great field to be in but getting in is the difficult part as along the way you are viewed as a game programming wannabe and most people don't even make it over the "write a simple game" hurdle. Even after getting into the area you have to prove your worth against others at or possibly above your level of knowledge. Reading a ton of tutorials doesn't always help as you have to break away from the tutorials sometime and take your own steps out in doing a game or an area of a game. Alot of people fall down at this point too and never get back up because they decide it is too hard and don't really understand what is going on so they continue on the tutorial path or just quit all together. For those that break away from tutorials and understand what is really going on to make the game run can great some good games. From there it is a matter of finding a game company to take you in. Of course you would want to get into a company that is constantly using the latest things and this isn't always easy either.
The road is long but can be very enjoyable for those that have the patience, always want a challenge, and have fun with their job.
You slashdotted Penny Arcade!!! Gah!
ReadThe ReflectionEngine, a cyberpunk style n
I think the goal of the contest was to demonstrate that you can still have a game in minimal resources, i.e. you have to concentrate on gameplay rather than on graphics or sound or whatever (things that take up lots of space). Since this guy couldn't imagine a game that didn't start by going after high memory, he was missing the point of a minimalist contest.
www.HearMySoulSpeak.com
I have no idea if I explained that like I wanted to. But I know what I meant.
www.HearMySoulSpeak.com
fluffluffflufflufffluffluffflufflufffluffluff
I completely agree. The near-last bullet about using your right brain: "go wild, listen to that little voice inside" made me cringe. It was like some Oprah Winfrey moment, or a page from one of those little "Life's Little Book of Quotes" crap that they sell near the cash registers at bookstores.
---
https://www.accountkiller.com/removal-requested
There's a similar sentiment in the hacker community I have witnessed in open source projects. I've participated in a few, and I inevitably get blank stares when I ask for an SRS or architecture document so my components blend well and extend the current structure elegantly. Nevermind when I ask where in the source tree to drop my UML diagrams. I just ask that for kicks nowadays :)
In the business world, no one gets paid to write code. We get paid to ship software, and I've found that regardless of their attitude coming into the project, everyone is delighted when we ship a solid product on time and within budget. It's so rare a thing in this industry that coders get simply giddy at the thought of telling their friends they actually did it.
From my experience, a realistic estimation and budgeting system and thorough engineering process is the number one most effective perk in terms of retaining happy programmers.
-- ShadyG
Nerd Rock In Progress
He says, "games are pushing the envelope harder than almost any other kind of software-what else does a consumer need a 700 MHz machine with a high-end 3D accelerator for?" This pretty much sums up the motivation of the 'Average Consumer' in picking out a PC, and supports my belief that PC users play games on their 1 GHz PC's and Mac users do work on theirs -- It's also why PC users constantly whine about the 'high prices' of Macs -- if I weren't making my money back one-hundred-fold on my hardware investment, I'd bitch about it too. Just something to think about. BTW I use six computers, and they run everything from OS9 - OSX - MS95 & Linux so I'm not partial -- well actually I am ;)
We apologise for the fault in this post. Those responsible have been sacked. -- Signed RICHARD M. NIXON
You have to be comfortable in the basics at least. Actually, to do well in any area of computer science, you have to be generally good at math, not necessarily a master, but you still proficient and if you run across something you don't understand, you need to have the ability to sit down and teach yourself. IE, I know basic linear algebra, when I run across something that requires a new skill, I sit down with a text book and acquire it. When I read Abrash's book "Zen of Graphics Programming", I remember thinking to myself about the difficulty of the math (I was in late middle school, early high school), but after working through it, it's kinda neat to see what you can do with numbers. And Abrash is one hell of a programmer and thinker. He and Donald Knuth are two of my favorite CS guys.
Humorless sig goes here.
Of course, java runs about as fast as C++ nowadays...
ReadThe ReflectionEngine, a cyberpunk style n
I think the perspective is the thing. Getting an extra 4 fps on the engine wouldn't turn my crank as much as finding a better, smarter pathing algorithm for the opponent, but I know a few coders that would be in situation nirvana if they got those extra 4 fps, even if the engine was already at 120+ fps. :-)
If we didn't have different hot spots in our ambitions, we'd just be writing a bunch of engines with bad computer opponents, wouldn't we?
Head to blitzbasic.com, download the demo and get started :)
3D due out mid-2001, so get learning with Blitz 2D now!
This Spam is over...
Yeah, but because of the way you solved the problem you now have the gloves for use on other problems - a "reuse" situation.
Where's the beef?
I don't disagree but regarding your comment on Joe Schmoe, that's true of anything.
Makes it even more amazing considering that engine is now GPL'd and underscores your point completely, gameplay is king. I think the fact that a freely available Half-Life mod (CounterStrike) is now reigning king of multiplayer, at least by server count. The last time I checked, there were over 3000 Half Life servers in my list, with a little over 2000 Q3 and a little over 1000 UT servers. Thats not to say that someone is going to come up with an even better mod to one of those games and dominate the multiplayer scene in the future, but it sure makes for some interesting points right now.
Bleh!
I once said to a boss "Exactly how fast do you want it? I mean, I'll go lock myself in my office and put my optimizing hat on and I'll give you lightning. It'll be hard to follow the code and probably pretty unstable, but that sucker'll fly." That helps set boundaries on the expectations. :)
www.HearMySoulSpeak.com
If you had original Quake, you would have agreed with me on Half-Life being based on that engine. Compare the weapon-bobbing between Q1 and Half-Life: the same. Try typing in "killserver" in the console during a game in HL. Unlike Q2 (at which point it drops to the console with "Server was killed."), nothing happens. What's the extension for model files? Right, .mdl, and not .md2 like in Quake2. What protocols are supported for multiplayer? Incredibly, IPX as well as TCP/IP are supported in HL (Q2 only supports TCP/IP, while Quake1 supported IPX as well in the original DOS version). The only similarity I see between the HL engine and the Q2 engine is how you seem to drift when standing on moving platforms (in HL, it's most noticeable on tracktrains).
"Ancillary does not mean you get to rule the world." --U.S. Circuit Judge Harry Edwards, speaking to the FCC's lawyer
Actually, computer games do save lives in that they provide income and health benefits to a large populace in the electronic entertainment industry. That same multi-billion dollar industry also saves lives in the general populace by contributing to the economy at large. (Recall that there is a strong association between a nation's economic strength and its citizens' life expectancy.)
So, games do save lives, but in order to see the fact one must be willing to examine indirect economic effects.
Easy, automatic testing for Perl.
Abrash is a pretty good speaker, and I think the talk comes off a bit better in the video than as an article. The video is linked off of the page the article is now on, but here's the link anyway.
This is so true. Just visit Sourceforge and check out projects that die between working and complete. There are so few programmers who can actually finish a project. More so than pure programming ability it separates the great from the merely competent programmers.
Too bad there isn't a 'stupid' mod tag.
Steve's Computer Service, Hobbs, NM
I also think that it's pretty easy to work at Microsoft, then Id, then Microsoft again - always on ultracool projects, always optimizing assembly code - and think the games industry is wonderful.
If he worked at any other games houses he wouldn't last five minutes with that "I'm so happy happy happy" attitude. I'm talking about the kind of place where they restructure your code (badly) without telling you, write everything in spaghetti and expect you to interface to it, and where they use raw-pipelined RISC processors instead of the programmer's dream that is the superscalar x86.
The games industry sucks. That's my outlook, from my position deep within it. I'm getting out ASAP. But ... if I had Abrash's cushy jobs, I think I'd be pretty happy too.
It's like Marie Antoinette saying "Let them eat Cake".
I didn't pay for my operating system either
Gloves? Tarps? The obvious solution was to get a WalMart employee to carry it to the car for you ;)
I didn't pay for my operating system either
If you had Abrash's cushy little jobs you'd probabaly be as happy as he is.
I didn't pay for my operating system either
Keep in mind that because of graphics card advances, the number of polygons used has been going up as well, so per-polygon collision detection is also a moving target.
Hey, ever seen the part in Dune (DeLaurentiis/Lynch production, not the Sci-Fi series) where Gurney and Paul fight with the shields? How about if the bounding model is as grainy as that? It'd be a lot less hard to calculate collisions with such a low polycount, but the functionality would still be there!
"Ancillary does not mean you get to rule the world." --U.S. Circuit Judge Harry Edwards, speaking to the FCC's lawyer
I myself am on the verge of spending some serious cycles on NL programming (adding 'smart' bots to a MUD) and am curious what about NLP he didn't find satisfying. Seems to me NLP is one of those 'deep knowledge areas the industry is moving to'.
Well, at least in all the games I've ever played the AIs are stupid as fu**, especially when it comes to language, so obviously somebody needs to look into it.
I'm sure something like that will come to pass in the near future. Engines that already use progressive mesh algorithms that scale the model down for the current processor could adapt that technology to be used in the collision detection as well, so maybe you have a polygon that scales down to 5,000 polygons for display, but 50 polygons for collision detection. Still a lot more expensive than doing a rectangular box vs rectangular box check, but within the realm of possibility.
Well, the design and coding principles advocated by Abrash simply apply to any field where you need performant and robust software : games, scientific computing, but also operating systems (don't forget that your OS does *all* what your apps don't want to do), real time systems, etc.
:)
And as some others said, this article is not particularly brilliant. It can be useful to young programmers eager to develop their first game and seeking for advice, but in the end, it is mostly the common sense you acquire after a few years of experience in (serious) software development.
That being said, I do have a lot of respect for Mike Abrash, especially for his work in Quake and BSP trees.
As a layman, I ask the following:
Could it possibly be less expensive to just use faster hardware than spend time/money on programmer's to optimize code. I would imagine that at some point, code optimization becomes too expensive an alternative.
Praying for the end of your wide-awake nightmare.
In many games, polygonal objects are stored at several levels of detail; objects close up are drawn with more complex models. If you always use the lowest LOD model for collision detection, people will notice how much better it is than a cubic bounding box but will probably not notice a couple cm difference in the detail silhouettes.
Like Tetris? Like drugs? Ever try combining them?
Will I retire or break 10K?
PS2 and Dreamcast developers don't use much Middleware, actually. There's a lot available, but it's selling poorly. And it performs badly compared to a custom solution (well, what did you expect?) A 700MHz X-Box might be able to take the straing of running Direct3D but a sub-300MHz console certainly can't. Wasted cycles are a luxury only PC & X-Box developers have.
I didn't pay for my operating system either
-- ShadyG
Nerd Rock In Progress
If I ever get into game programming, my mantra will be this: the bounding box is the tris, the tris is the bounding box.
But tris games are supposed to do their collisions with rectilinear bounding boxes; that's the shape of the blocks in Tetris pieces. Even in games such as Dr. Mario, pixel-perfect collision detection is overkill, as pieces move in tile-sized units anyway.
Like Tetris? Like drugs? Ever try combining them?
Will I retire or break 10K?
You have neighbors don't you? ;) A feigned heart-attack can work wonders in such a situation ;)
I didn't pay for my operating system either
I remember reading his articles religously in DDJ--talk about some incredible stuff. They got me to the point where I wrote a real-time free directional 3d texture mapping engine in Pascal! (With a bit of inline assembly of course.) Of all people, I'd have to say that he's had the most profound effect on my coding style; what an edge.
Seeing his name on the X-Box team was a sort of blast from the past. It may even pursuade me to set aside my contempt for M$ and buy my first console since the nintendo.
While this article was great in terms of general programming knowledge, it seemed to neglect a detail that many game developers sadly overlook. A game is *nothing* without playability.
Mr. Abrash spends quite a bit of time in the article talking about the best ways to go about programming a game. This is obviously something that comes through in his designs, since the certain software company he developed for spent more time on their game engine than they did level design. This tendancy is even stronger in today's game market where the 'definitive' FPS's are Quake 3 Arena and Unreal Tournament. Both of these spent much, *much* more time on engine development and programming than they did on making their games enjoyable.
Don't get me wrong... Q3A and UT are loads of fun, but compare them to the playability of Half-Life, a little older game that is based (IIRC) on the Quake 2 Engine. There's a lot of custom code in HL, but the majority of it is still a big Q2 total conversion. Valve focussed on playability, story, and fun in HL, rather than code and this shows. I'll play Q3A for a little while, especially if I'm waiting on a long download, but I've lost entire weekends to the plot details in Half-Life.
Programming can be and end unto itself, and even *should* be in some circumstances, but its only half of the equation when building a video game.
The next Slashdot story will be ready soon, but subscribers can beat the rush and slashdot the links early!
Abrash is a great guy who has done great stuff but that article was total fluff. If it weren't for hero worship it would never have been posted. If Joe Schmoe had written it, it would still be languishing on some never visited web page. I got to the end and kept looking for a link to the next page because I couldn't believe that was all there was too it. I think that article was kinda like the geek equivalent of the post-game locker-room interview. "Well, we just gotta get out there and do our best and give it our all and work a team and whichever teams wants it more will get it!"
I'm work for MS (Yeah, yeah), in XBOX development. Per-poly detection is a real problem because of the sheer number of operations. We'll probably end up using a lower poly count to do the shadow volumes and the collision (with a higher poly count for the characters themselves). The biggest problem we run into is the memory to store it all- in the latest generation of video cards, it's bad to try to access the polies the video card uses, which means you have to duplicate polies. 64M is a lot, but it's still tough to fit everything in it.
This paragraph made me smile.
Aim high, think big. Right now is a particularly good time for ambitious game programming, because so much more is possible now than ever before, thanks to CPU performance and 3D accelerators.
You know -- that's as opposed to five years ago when CPU performance was at its lowest in over ten years.
I mean, you know, I dig the point and all, but won't it always be a good time for ambitious game programming?
-- dR.fuZZo
If you like it, game programming is about the best software job there is. It touches on practically every area of programming, and it's one of the few places where code can still be written clean instead of patched over or pieced together from canned parts. It's also one of the few places where optimization still really matters.
This only applies to non-sequel, non-port, non-home console games. Playstation2 and Dreamcast games developers often use middleware to achieve their games. Sequels and ports often involve revitalizing and fixing old code.
The really good programmers maintain their own custom sets of classes, routines, macros, and code fragments, which is the only way to "keep it clean." In other words, keep your own can of parts.
----------------------
All the talent in the world won't make up for bad management and counterproductive corporate culture. A little head hunting won't solve any immediate problems. Cutler and NT should be sound proof of that.
A Pirate and a Puritan look the same on a balance sheet.
Half life's rendering routines were updated when Q2 was released, but most of the network and game logic is descended from Q1.
:)
I could run across the street and ask for all the specifics, but it's raining out and it makes me miserable.
Good point, but then when you need the gloves they'll be somewhere else... would that be a library not found error?
The software itself is an off the shelf interface stitched together to hide a junkyard of database and reporting software.
Turnover per package is relatively low because the market is messy and the customers are unimaginative and uncooperative.
At least games entertain millions of people.
I bragged about my Karma at a job interview but I didn't get the job.
could you give the parent of this post a +1 funny?
-- Jeff Paulsen
Games programming and scientific programming can often be similar in spirit. If people are interested in either learning to program or want to push their skills elsewhere, they should try working in science, especially in the bio arena where programmers are needed....
-Moondog
I've been doing this subconsciously for years, but I didn't really take note until this past Christmas. My gf and I were at Walmart buying a tree, and it was pretty friggin' sharp. To carry it to the car, I needed gloves. No gardening gloves were to be found in the garden department, so my gf asked an employee where the tools were, thinking they might be there. I instinctively re-asked the question in a different way: "Where can I find gloves suitable for protecting my hands from the tree spines?" We found then in sporting goods. The tool department was a proposed design, but analysis led me back to the core problem that needed solving.
Of course when I got home, I realized that I didn't need gloves at all. The problem was scratched/punctured hands, not an explicit need for gloves. On that same trip, we had already purchased a tarp to lay over our carpet. I could have wrapped the tree in it and not needed the gloves. So I actually failed to address the original problem to determine the most efficient solution. Still learning after all these years :)
Back to software engineering, this new focus has been of tremendous help in developing product requirements, architecture, and design. I feel much more confident that the product my team develops is actually providing a useful service to the customer, rather than usefulness being accidental to the cool technology we invented.
-- ShadyG
Nerd Rock In Progress
What he meant by that is that the consumer hardware availible now far outclasses the complexity of games availible now. 5 years ago this was not the case, and it was very easy for what was considered a well-written program to perform horribly on expensive hardware. Does anyone remember playing Quake2 without a Voodoo? Even with a Voodoo my top of the line machine, which cost more money than the new stuff nowadays, couldn't top more than 60 fps even if I turned off all the juicy stuff. But now Tom's Hardware is assembling PCs that cap off over 150 FPS in todays games.
So what he was saying is that its much easier for people to buy machines that are powerful enough to run the new games well. 5 Years ago it was nowehere near as easy to get the hardware necessary for such amazing frame-rates.
:)
Abrash gave the light side. Now I'd like to give you the dark side of the games industry:
(1) Game coders are expected to work burn-out hours. The 60+- horu week si a NORMAL week. It gets worse at push tiems like ebfore shows.
(2) Game coders get periodically pulled off of realwork to code "demos" that mean neothign but are apprently just vital to show at trade shows.
(3) Game coders are, by sotfware industry standards, highly underpaid. this i particualrly sad in that the ones who survive are by and large very fine, if sometiems not formally trained, engineers. Some game companies hav held out royalties as a compensatio nbut generally you only get thsoe as long as you continue to work for the same company. (See tabiulity commenst to follow.)
(4) The game industry is highly unstable. Combine the fact that it is a boom/bust busienss with the fact that management is generally fairly incompetant and what you have is an industry where companies go from being industry darlings to out of business in 2 to 3 years. (Anyone remember looking glass? Thats just a recent example.)
(5) Typical coding siutation: you have no control over budget, you have no control over schedule, you have no control over functionality and you are totally responsible for the success of the engineering effort. In point of fact, when a proejct fails, it is typical game company behavior not to ask why but just to fire everyoen associated with it. (Ironicly the one palce the fault msotlikel lies-- upper management, aren';t the oens who get canned.)
(6) Viewable/playable milestones. Because management is fudnementally incompetant they are afraid to commit to decisons. Theya re also afrid of their own judgement in people, and thus do not trsut their engineering team to deliver. The result is a schedule that forces the engioneers to get little tiny peices of functionality working and "playable" at a time.
As any good engineer knows this is a recipe for disaster in the form of monolithic, redundant, bug laden code.
(7) Design changes. Again, thanks to managemetns inabilti to commit, once they start playing with thsoe peices likely as not they will start doubting and changing their minds. They will make snap decisions that "this isn't fun" before enough of the game is there to tell anything. And then they wil lstar tchanging your spec... without changing your budget or delivery dates.
SO if you enjoy working too hard for too little money in a situation where you are forced to work in ways that make no engineering sense and upon which, at the end of the day, your job depends. The game industry is it.
Abrasj hasn't really experienced tyhe game industry. he's experienced workign in one, ver special place-- ID. I'm sure if we coudl al work for John Carmack game programming woudl be a dream-- but we can't.
Remember to have fun! It's about the best job around, but like anything else, game programming can turn into a job if you let it. Don't let it. You're one of the luckiest people in the history of the planet, getting incredibly well rewarded for doing something challenging, fun, and just plain cool. Remember that and count your blessings every day. Then get out there and write some great software!
Well, I'm the first to admit that it would be really cool and I'll be psyched if one of the companies I'm talking to right now hires me when I graduate in June. However, game programmers do get shit on for pay, and get little respect outside of the industry. Small price to pay, but it puts being a basketball player or a rock star high above game programmer on the "coolest jobs ever" list.
-Brian
"Faith strikes me as intellectual laziness." -Robert A. Heinlen
Like he said in the article, take a lot of math classes. ;-)
Get a real computer science degree from a reputable university, work hard on the projects you do there that you could show off later, and be prepared to make $15,000/year less than all of the people you graduate with.
-Brian
"Faith strikes me as intellectual laziness." -Robert A. Heinlen
While reading the article, it seems I was just seeing the three last years of my life. I'm an undergraduate student at Brazil and since mid-98 have been doing research in games. On account of a job opportunity I had to stop researching that amazing area for a year during the last year (2000). That way, I spent the last year programming in Java for Web (servlets, Jsp, and so on). Fortunately, the company I work for has just formed a games development group where I am now. So I'm back working and researching the games area which, as the article states, is much more challenging and pleasant. For those who have not read the article yet, no doubt it's worth reading.
"Rub her feet." -- L.L.
but my boss tells me that we have 2yrs of work to do by July. Optimize code? Hell, as soon as something looks as if it might possibly work one day it is ripped from my hands, stamped with Version 1.0 and shipped to the customer. I'm told that 'we'll fix it later', but there is another list of features that are slated for the next release (December).
I do code as the author suggest at home on my own projects. I'll rework a program at the drop of a hat if I see or hear of a better way. But, at work, and I'm sure this holds for the vast majority of programmers, code is considered optimized when it works correctly on 95% of a regression test set.
Aah, change is good. -- Rafiki
Yeah, but it ain't easy. -- Simba
> it seemed to neglect a detail that many game developers sadly overlook. A game is *nothing* without playability.
THAT is the responsbility of the game designers!
Programmers implement the game rules, they don't create them.