EVERYONE READ THIS

Started by
101 comments, last by VXG 22 years, 2 months ago
OK...I''m writing this post to hopefully answer some vital questions and "tune" the way of thinking and approach to programming of all newbies and many experienced programmers and game developers out there. This post will most likely have two outcomes: either a major flame war, or a major revolution in approach to development. Hopefully, it will be the second one. Everyone feel free to comment on the subjects I discuss and ask questions. Here goes... Everyone wants to be like John Carmack (the creator of Doom and Quake) these days, yet do almost nothing about it - that''s the problem. It seems that all newcomers to the programming industry think that they can just learn C++, then make Quake 4 and tell Carmack that he can go home now. Well it''s not like that. Compilers and High-Level Languages were initially designed with the intention of providing assembly programmers with a quicker and easier way of development. However this new invention was quickly abused and the phenomenon of "I know how to program but I don''t know how it works" programmers was created. I''m not bashing anyone here, just trying to explain something that has been misunderstood by many people. Just think about it...If all the real programmers would instantly disappear then what would happen to the industry? The answer is long yet simple - no new graphics cards coming out every month, no new operating systems, no new consoles, no new 3D engines, no Doom 3, no DirectX 9, no OpenGL 2.0...no technological progress in other words as far as computer industry is concerned. And considering the fact that technology rotates around the computer industry, things would be messed up badly. As far as assembly language goes, I think it''s about time someone noticed that nVidia, ATI, AMD, Intel etc. release a new product each month. And no, their hardware does not understand high-level languages, just like it doesn''t understand plain english. Of course, this is rather obvious, but then why is it that game developers want to make their game engines as good as possible relying on the raw processing power of modern graphics cards, but ignoring their new technological advancements? C++ is definitely a powerful language, but its core power is limited to the technology that was available at the time of it''s creation. So why is everyone speaking against assembly language, yet complaining that consoles are years ahead of PC''s when gaming is concerned? Have you noticed that the progress made in the software industry has started to decline? New operating systems, games, you name it, have started to be cloned and mass-produced, resulting in countless repetitions of the same concepts. How many "different" operating systems are there? 10''s? 100''s? Yet many of them are the same thing with a different flavour. How many cloned games are there? Countless! The game developers in this community, as well as the commercial gaming industry, spend so much time on making "new" engines and games. OK, so you''ve just made the one hundredth clone of quake. So what? Those who have just made the one thousandth clone of Tetris, no matter how crap and simple it is, have potentially achieved more than you have because starting with small games like Tetris is the best way to learn programming. Then these makers of the tetris clone can apply their new skills to make something which is really NEW, instead of going on by spending months to clone the latest hit by ripping apart its source and modifying it to make a game which adds nothing new to the genre or to the technology. I''m not saying that cloning is the totally wrong thing to do. It would be the totally correct thing to do if you add something new to each clone you make. Even a small improvement, a single bit of code which employs a new hardware capability or a new algorithm, counts. It takes some knowledge and experience to understand this, but even after having done so most programmers just happily go on making clones of already existing technology as if nothing ever happened. My question is why? It doesn''t take alot of brain power to understand what the word "clone" means and that you''re developing something which already exists. Reinventing the wheel. So why does everyone carry on going in the wrong direction? To understand this even better let''s think about some examples of what I''ve just babbled about. Every new gaming console creates chaos in the gaming industry. Counter-Strike is still the most popular multiplayer game, although it originated from an ancient game, considering the fact that Half-Life was made from a highly modified Quake 1 engine. Every new engine from Carmack brings a revolution to the gaming industry. Updates on the development of Neverwinter Nights has RPG fans drooling all over their monitors. It seems that new series of Final Fantasy can go on being released forever and manage to gain more and more popularity each time. What do all these examples have in common that makes them so popular? - the element of technological progress. However, why are we no longer excited when hearing the news of the release of another Command & Conquer clone? Well simply because it''s nothing to be excited about, since it''s the same concept with supposedly new features. But we know that there''s nothing new to see in it, so we don''t bother looking (except for those who can''t think of anything better to do than play games all day). So what''s the conclusion of this story? WAKE UP! It''s time to realise that we''re sinking. Start using your time productively, rather than spending it on "reinventing the wheel" over and over again. The infamous newbie question "How do I make Quake?" can be answered much more simply than you think - don''t make quake, make something with your own design in it and make sure that it''s worth the effort. Also understand that either you implement a new concept or technology in your project or it just won''t be worthy. Another question answered - "How do I become like Carmack?" - you spend your time on learning useful and powerful things and making sure that you learn from the start. ie: don''t learn any useless/dead programming languages and don''t jump into C++ thinking that because it is the industry standard you''ll become a guru if you learn it. Start off from the beginning - learn assembly language and how hardware deals with your code. Afterwards you can jump into C++ knowing that you''re on your route to success. ie: You can''t learn Nuclear Physics without learning basic maths. Many people speak against assembly. But what if you actually used your brain to think about whether it''s really that bad? You''ll actually figure out that due to new processor technologies like MMX, SSE, 3DNow... and graphics PROCESSING units on which modern graphics cards are based, assembly language is the only way to making better software. Even if C++ had support for these technological advancements, it still wouldn''t be possible to become an expert without learning how programming works at hardware level. When hearing expert programmers saying "I don''t use assembly that much anymore" people tend to get the impression that assembly is a waste of time. Well it is the opposite. It is not used that much anymore because compilers and high-level languages were created for providing programmers with a quicker way of development, PROVIDED THAT THESE PROGRAMMERS KNOW HOW PROGRAMMING IS IMPLEMENTED AT LOW LEVEL. In other words, if you want to become real experts LEARN ASSEMBLY. It is true that assembly is hard to get a hold of, but once you know the basics it is MUCH EASIER to master than High-Level languages because there are no complicated functions, loops, algortihms etc. to learn. One important advice, however, is to start off by learning the basics of a High-Level language (preferrably C++, Java or Visual Basic) in order to understand what programming is all about and once you''re confident that programming is your thing you can move on to learn assembly language. Believe it or not, all those new CPU''s and GPU''s produced by Intel, AMD, nVIdia and ATI are not made to make the list of features of graphics cards and processors look cool. They were made to give developers more power and control, which can only be achieved if you know how to use the new technology. This is the reason for which console games look much better than PC games - power and control provided by modern hardware is employed in the games'' engines, while the PC, which has alot more power than consoles, suffers from an "I''ll buy a new PC and my 3D engine will be faster" attitude. I certainly hope this post has answered the newbie programmers'' questions as well as giving inspiration to the experienced programmers. Now I''ll either have my ass flamed for "disturbing the peace" or get some intelligent and understanding replies
Advertisement
Good point, even though it is a little long winded.

To summarize VXG''s point: Start small and build from there. LEARN ASSEMBLY!
You make a few interesting points, but overall I''d have to disagree with my interpretation of what you have said.

Before I give my opinion, I''ll summarize what I consider your opinion (just to avoid any confusion).

You want us all to stop writing the same old clones and spend our efforts on becoming kick ass assembler programmers so that instead of us wanting to be the next Carmack, Carmack wants to be the next us. You believe that game inovation is derived mainly on the advancement of technology instead of creativity (since you made no mention of the creative aspects of games I''ll assume this is true).

Ok, here''s where I throw my opinion in.

If that''s what you want to do, great. All the power to you. For many of us, we are trying to write games based on our own ideas of what we want the game to be like. Sure, some (or many) aspects might be the same as other similar titles, but it''s still our game, our way.

I personally believe that technology is only one small part of making a sucessful game. Along with it, the programmer must write all sorts of cool code for AI, user interfacing, networking, and so on. There is also the artists and musicians who bring vibrant life to the code we programmers create. Finally, you can''t forget the foundation of every good game. A solid playable game design. Without it, you can have all the features in the world and you will end up with crap that nobody wants to play.

After talking with a few other members on this and other sites, it''s clear that many of us are getting tired of the "Technology Push" that has dominated the game industry. Yes, Technology is good, but focus on the game. Believe it or not, you can still write the next best game with 2-5 year old technology. You just need an imagination.

borngamer
Whereas I agree that it is ridiculus that far too many "I know how to do it, but not how it works" programmers flood the market today, I do not agree that we should move backward.
C++ and (gag) Visual Basic are the blue collars in programming. If someone wanted to make Doom 4 in ASM, it would take three and four times as long. Here is the catcher: we DO need to add hardware enhancements to our compilers. It is possible for the developers of compilers, like (my favorite) Borland, and (vomit) Microsoft, to add these enhancements to their compilers, or leave it open for OTHER programmers.
And, yes, your column was too long winded
-- Crash Matrix "Still the Man"
As a member of the class "learned some asm" and "continuing to learn asm" I'm afraid this topic makes little sense. I agree that knowing what computer hardware is and how it actually works is important (and may improve results), but it isn't required to program.

I doubt that all people who know asm, know about transistors. Yet modern CPU’s are built upon that foundation. So, my question is, do I learn how to make transistors?

Next transistors are made by (well many substances) molecule(s) X,Y,Z. Do I need to know how molecules X,Y,Z interact to effectively program? Obviously not.

A certain level of abstraction is required for progress. Do you know how to calculate pi off the top of your head? No, but you (hopefully) know what pi is, and how to use it.

Point?

You can use something without knowing how it works. That's part of the reason most people can do math. They don't really know how the equations work, or how the variables have certain relationships. They just know that by doing certain things, they can produce certain results.

PS Creativity has almost nothing to do with language choice. You can tell the same story in English and French, and have it mean the same thing. You can write a game in C, then in asm, and it could play the same way.



If all that matters is what you get in the end, why go through life?
~Michael Sikora


Edited by - guardian_light on February 5, 2002 4:06:13 PM
What are you babling about? are you bashing C/C++ over ASM? or are you bashing FPS clones?

It doesnt really matter what language you use to program as long as you get the spected results, and in case you dont know, inline assembly is part of C/C++ and Pascal, you can code critical parts of a game in ASM with those.

I dont like FPS''s (which seems to be your favorite gendre) as much as RPG''s, RTS''s or TPS''s, but in any case I think that what makes a good game is not graphics, engine or gendre, but a good storyline, which is why I dont care about Carmack, I dont want to be the next Carmack, no doubt he is a great programmer, but I would rather be the next Hideo Kojima, anyone can learn to program, but only a few can give you the thrills of Metal Gear.

Maybe you should join our DevTeam VXG, you sound like you know what you are talking about..
And no, our game in production is not a clone

"Everyone wants to be like John Carmack (the creator of Doom and Quake) these days, yet do almost nothing about it - that''s the problem"
What are you doing about it ?(not an attack)
Alough you have valid points your : if your not pushing tech in your project stop it. Well this would mean that almost all poeple would stop devloping. Im not at that level yet, I cant push tech and anyway I don`t even have a system with the latest video card and everything. But who cares ( you ? ) certainly not me. You seem to be taking this at hearth, thinking you will start a revolution which will save the game industry !!!
- If your not pushing tech, stop,
- But im having fun !
- Fun ? Since when did gaming become about fun, if you like programming and your not pushing the envlope at the same time you must be in the wrong field.
- But I can program even tough im not at this level. I'll push tech later. Who`s gonna stop me ?
- I WILL !!! BUY THE LATEST TECH and if you dont have the money whore yourself for my cause ! <thunderous voice> I WILL START A REVOLUTION!!! </thunderous voice>

WHO DO THEY
THINK THEY'RE
FOOLING : YOU ?





Edited by - bleakcabal on February 5, 2002 4:27:06 PM
WHO DO THEYTHINK THEY'REFOOLING : YOU ?
You didn''t understand my point completely...

I don''t mean that everyone should just drop out on whatever they''re doing and rush to become single-minded, kick-ass assembly programmers. I''m actually saying that many people look up to Carmack (and since he is looked up to I don''t think he wants to "degrade" and become like us ) and want to be able to do what he can. After all, his engines are undoubtedly the best ones out there. I''m saying that everyone who is serious about all this stuff has to learn assembly in order to achieve the maximum performance from today''s hardware. I might be wrong, but somewhere I''ve picked up the rumour that he''s currently doing some hardcore reprogramming of a Matrox driver. Considering the fact that the next game engine revolution (Doom 3) is on the horizon, it can be assumed that he has turned to assembly language and new hardware capabilities to make a new kick-ass engine. So what I''m saying is that in order to make revolutionary and jaw-dropping game engines, which is what most people here want to achieve, assembly language should be used.
In other words, the "impossible" has happened - hardware has sort of gone ahead of software, and the only way to be able to use this to your advantage is by learning to access this hardware at a low level - ie: assembly language has been resurrected. Of course, most of the game will still be done in C++(not even Carmack is crazy enough to make Quake 4 in pure assembly). Also, assembly is crucial knowledge if you want to become a kick-ass programmer. However, I''m not encouraging anyone to start writing engines in pure assembly. ONLY bits of code to improve your engines graphical capabilities and performance should be written in assembly (as well as improving your mind''s thinking capabilities ). Just imagine what you can achieve if you employ the power of AMD''s 3DNow/Intel''s SSE2 and nVidia''s new GPU - the NV25 (GeForce 4, or whatever it will be called, is coming out tomorrow (6th of February), by the way - check out www.nvidia.com). Anyway, I reckon there will be plenty of replies to my post, but I won''t ba able to reply until tomorrow, coz it''s getting late in my timezone and it''s bed time. Keep on posting, I''ll be happy to discuss this topic.
To the best of my knowledge, the Doom3 engine preview runinng on a geforce 3 used Nvidia''s opengl extensions (pixel/vertex shaders). There may be some asm in the code, but it''s probably not to interface the hardware.

Hardware drivers are for interfacing the hardware, not home made "game" specific drivers. Besides, the gpu on the geforce3 probably uses a very unique instruction set that no one except Nvidia''s engineers know indepth.

If you could write a better interface to nvidia''s geforce4 than the engineers that work there, you''ll not only be offered a high paid job, you''d _be_ the next carmack (most likely).




If all that matters is what you get in the end, why go through life?
~Michael Sikora

This topic is closed to new replies.

Advertisement