I get some amusement from the all-assembly crowd, and it can be impressive, but it is certainly not effective
- John Carmack - June 27, 2002

From: http://www.directx.com/carmack.htm
Posted on 2005-07-20 09:03:05 by SubEvil
Correct me if I'm wrong, but I've had the impression Carmack doesn't know asm well enough, from what I saw in his games' code.
Posted on 2005-07-20 16:36:03 by Ultrano
SubEvil, keep in mind that Carmack is a real-world programmer doing real-world code... he has to take things like release dates into consideration. (And yes, they often break those, and no, Carmack certainly isn't as good a programmer as some people belive he is; look at how sloppy Doom 3 is :)).
Posted on 2005-07-20 17:27:49 by f0dder
Also, finding a team of good asm coders is much much harder than finding a team of C++ coders.
HLL coders are usually much more attracted to graphics than asm coders. Their primary target is things to look good at any cost, while we tend to limit the costs. Thus, usually HLL coders' creativity is visible to the gamer.

Coding game-objects' behaviour in C++ is much easier and readable than in asm, in most cases. That goes for managing the whole project tree, too.
OOP is important for games, and just last year ATC and OA32 became any good.

I'm in favour of using HLL for games' higher-level interfaces. Still, I'd really love to see completed games, coded completely in asm ^_^
Posted on 2005-07-20 19:26:43 by Ultrano

I'm in favour of using HLL for games' higher-level interfaces. Still, I'd really love to see completed games, coded completely in asm ^_^

I would (a bit more realistically :P) like to see some better data structures, algorithms and design in games, as well as assembly optimizations where they really matter. Too many games are simply too sluggish... but it's nice to see that at least some okay ideas are popping up, like loading game content on the fly (dungeon siege, world of warcraft, ...)... of course those were done already in the amiga days, and has been done extensively on consoles too.
Posted on 2005-07-20 19:31:18 by f0dder
ya, on my N64 in goldeneye, I noticed when I switched guns the game momentarily froze (for a very short time, unnoticable mostly). I am guessing the game compressed the data and decompressed it into RAM on the fly.
Posted on 2005-07-20 21:32:31 by x86asm
Points to keep in mind (mostly personal opinion):

1) Carmack knows his assembly well enough to know when to; and when NOT to use it! And that is ... I believe in the case of games like Doom 3 ... absolute speed critical code ONLY!
2) How can ANYONE claim that Doom 3 is sloppy? Personal opinion!
3) At least he gets the job done! Which is MUCH more than can be said of the assembler community in general. We TOO often take on mammoth tasks/projects (or even small ones) that never see the light of day (I'm VERY guilty of that!) At least Doom 3 is 'finished!'. So are all the other Dooms and Quakes etc.
4) Who the hell are we to judge one of the most influential programmers and game designers of all time.
5) You CANNOT possibly compare the final Doom 3 product and engine to Carmack's expertise, skill and ability alone! I'm sure he has an army of developers who each had a hand in the pie!

And finally, I firmly believe that Michael Abrash and John Carmack have the right idea in mind when approaching problems. And that is a point clearly expressed in Michaels Graphics Black Book (which I've read, 150MB PDF, 70+ chapters, didn't understand everything though), the idea is not to resort to optimizing C/C++ algos in Asm, but to "re-think" the algorithm as a whole, profiling the code, finding the inefficient algorithms and finding better ways of solving THOSE problems. Not to resort to asm level too quickly! For these reasons I am no longer actively involved in assembler programming. I believe the background is absolutely essential for anyone who wants to be a better programmer, and gain a better understanding of what happens behind the scenes, but seldom is it mission critical to resort to asm to solve a problem (often associated with performance). Rather take a minute to re-think the algorithm as a whole and you will often end up with faster code (and sufficient for the job/project) than a slow algorithm converted to asm. My experience in general is that C/C++ programmers tend to produce, sloppy, inefficient and often unmaintainable code! When I look at most C++ projects (especially younger university level programmers) I wanna vomit! One other thing, I have noticed that sometimes converting code to assembler or at least looking at the assembler ourput of a C/C++ algo can help in understanding the algo better and actually help to find ways of (at least) helping the compiler produce better code!

My opinion, I do not believe (as a professional C/C++ programmer) I will ever be involved in a project where it is MISSION CRITICAL to produce the fastest, cpu clock cycle counting code implemented in pure assembler. But the background of assembler knowledge is absolutely vital to me and makes me a MUCH better C/C++ programmer!

NB: Even though I express my opinions strongly, they are STILL only opinions. I cannot claim to know Carmack at all! I just thought it a good and interesting topic!
Posted on 2005-07-21 09:31:20 by SubEvil

4) Who the hell are we to judge one of the most influential programmers and game designers of all time.


We're a bunch of people hanging out in a forum. That gives us the same moral authority a bar discussion gives to quote on any topic, be it John Carmack, world politics, the cure for cancer, anything. Also we get to believe we're always right, even against the facts. That's our priviledge! ;)
Posted on 2005-07-21 10:32:03 by QvasiModo
SubEvil wants to kiss Carmack  :lol:
Posted on 2005-07-21 10:35:24 by JimmyClif
Now who's John Carmack?  ;)

After taking a crash course on computer science, I realised that asm is important in speed critical routines, but most importantly the correct algorithm is used. There is no point optimising a O(n!) algorithm when there exist a O(n^2) algorithm.
Posted on 2005-07-21 10:38:13 by roticv

There is no point optimising a O(n!) algorithm when there exist a O(n^2) algorithm.

However, being a good programmer (assembly or whatever), one should also realize that using the "best" algorithm isn't always the best :P. For example, we can all agree that quicksort or heapsort are better than bubble sort, right? Now, off goes the novice comp. sci. programmer and uses quicksort to sort 3 elements...
Posted on 2005-07-21 11:19:05 by f0dder
;)

Talk about overkill. Haha.

Nevertheless, I think John's comments hold some truth to it, but I don't agree with it entirely.
Posted on 2005-07-21 11:35:53 by roticv

Points to keep in mind (mostly personal opinion):

4) Who the hell are we to judge one of the most influential programmers and game designers of all time.


The next generation of the most influential programmers and game designers of all time?
Don't get too deep into the hero worship thing. You'll discover that people like Carmack (for me it's people like Knuth and Dijkstra) are just human beings who are just as fallible as the next guy. The difference is that most of these "heros" have gotten a decent education (yes, formal) and lots of experience to back it up. And that's what everyone should be shooting for.
Cheers,
Randy Hyde
Posted on 2005-07-28 21:42:58 by rhyde

Don't get too deep into the hero worship thing.

That's an extremely important thing to keep in mind.

Respect (but don't worship!) people for the good they do, but don't be afraid to criticize them for the bad things (just try to do it in a civil way).
Posted on 2005-07-28 21:51:09 by f0dder