Carmack isn't all that talented. He's good, sure. But I suspect his reputation far surpasses his real talent. Nothing he has done is particularly hard to do for a competent programmer that wanted to spend the time to do it. I mean, he isn't actually inventing anything as far as I can tell. If you just read some papers and "do the math" you can accomplish the same stuff.

The other guys in id are probably a lot worse though . Has anyone actually looked at the Quake source? I mean the game source that they make available for reference when you are doing mods. It's total crap.

Enough of my off-topic banter though... too bad your interview didn't go better, but I can understand where the COO was coming from. It's so hard to find good people these days that I can see why they would want to see more experience in a candidate.

I think far too many people have tried to be programmers simply because they were told it would be good to get into "computers". They have no real passion for it, and many of them don't have the aptitude. Faced with that, I appreciate how cautious one must be when hiring.

While I can also understand where the COO is coming from with his warnings, he also made it sound as if working in gaming is absolutely horrible - full stop. Simply put, he didn't address any perks at all (I wonder if he even knows there are perks besides "slaving like a dog and be happy doing that").

However, I must say that I am still keenly interested in gaming and nothing can disuade me from going that way since coding + gaming is basically my inclination - it's just what I want to do. I suspect all of you here probably know what I mean by that.

Why I said that my interview didn't go so well was this: For all of the so-called "difficult" questions that he posed to me (like "How many times are you willing to redo a work you've submitted before you finally give up?"), I just answered realistically and reasonably and truthfully (ie "if it's not satisfactory, then until it is since I'm a bit of a perfectionist myself."). But I doubt that was the answer he was looking for. I think he was looking for a ultra-optimistic-to-the-point-of-stupidity, gung-ho-can-do-anything-and-everything-i'm-a-superman attitude.... maybe to prove my determination to stay commited. Sigh.

If you keep an eye out, you'll notice that I regularly lambast java's complete lack of support for people attempting to write the pinnacle of re-usable code: 3rd party libraries. The whole language is geared to making it easy to write applications, and no thought was really given to libraries.

This, I think, will be the main differentiator between java and the language that consigns it to history (whatever that may be; and IMHO we haven't seen it yet): java makes it too damn expensive to build and maintain really good OOP really usable really high-quality 3rd party libraries. In C++ there are many cases where you can reach for the STL and do some really convoluted stuff that *seems* stupidly difficult to maintain but ... if you've seen the application spaghetti code that it can neatly avoid it starts to look like a bit of genius. I don't believe that STL solves that set of problems - but it gives you a lot more of the power you need to do so yourself.

People frequently tell me (with reference to particular problems in this area) that I should just customise the JVM or etc. That completely misses the point: a language that places as much emphasis on code reusability as jav does should not force library developers to make proprietary hacks. Dropping to native code doesn't work because you need to make in-java OOP structures that are modifiable in-java - but you need more powerful polymorphism than java lets you have.

NB: 1.5's co-thingies and generics together go a long way to freeing up the expressive power that you need for this stuff. I've not seen them used on a large project yet, but I have high hopes for them...

Crikey, someone advocating the STL.. I've used it for a fair few years now (in earnest) and frankly its crap. I wouldn't even go as far as calling it powerful.

1) The naming is extremely poor2) The understanding of object ownership isn't communicated3) Large sets of useful (and commonly used) functionality is missing4) The syntax is unwieldy.

The really really scary thing is that in the land of C++ STL is the _better_ option.

I'm also a bit confused here. Where would you say C++ was better for writing 3rd party libraries? The lack of commonality between C++ developers and their styles of documentation, language use and for that matter name mangling really caused me problems over and over..

Here's how it went:Unfortunately, my other interview with the COO (chief operations officer) didn't go really well. He was stressing that the game industry has horrible 80-100hr working weeks and the tightest deadlines. Then he basically said that he's afraid to hire me because I have no professional game industry experience and that all the guys he has interviewed and hired have experience in that area.

Sounds to me (based on the scant information you've given us) either:

- he was not good at hiring and recruitment - you have never done any serious commercial work in your life

If the latter is true (or even close to true), then forget what he said about 100 hour weeks; that is not what he really meant. What he really meant is that there is almost always (I can barely think of two exceptions out of hundreds of cases I've seen) a massive gulf of difference between a programmer on their first job and a programmer on their second job. The benchmark is that it takes 18 months of working in a programming job IF you are smart and hard-working to learn all the stuff about working in an office, in a team, on a commercial product, with real-life management and real-life project problems. This is the main part of why people with extensive work experience (those who took a year out of university to work in a full job in industry - not unpaid slave interns, but actual real jobs with a standard salary) are so highly valued: you know that they've probably learnt the majority of the stuff they need to.

I've tried to buck this trend myself by hiring people with no serious prior commercial experience. It was, at times, extremely stressful (and even painful) both for them and me, as I tried in the space of weeks or months to impress upon them all the lessons that they would otherwise just gradually have learnt, and to impose upon them the structures that would prevent them from getting into bad habits. I also learnt a lot of stuff about solving particular problems in people management that are usually too subtle to be easy to notice - but with first-timers it stood out like a sore thumb, and so I had plenty of practice!

I think it is probably not worth trying, usually, even if it works, simply because you have to tie up your most experienced staff for a long time just to bring a almost-useless newbie up to the speed of a "standard" programmer. That newbie may be gifted, or highly experienced in some areas already, and so you get a huge net gain - but is that enough to outweigh the productivity you lose in tieing up someone much mroe experienced?

Like so many people lament these days, "if only schools and universities actually taught to a high standard, we wouldn't have this problem...". It doesn't mean you'd expect them to arrive knowing it all, just that instead of needing 18 months they could arrive needing just 4. Seriously - if I taught a uni course on C.S. I could achieve that just by spreading some stuff out over the 3 years so that by the end they really understood that 14 months worth without having to spend more than a month or two overall...

It's maybe been discussed to death, but I will add my 2 cents regarding wearing a suit to an interview. In my opinion it's a must. Got to do it. You might distract someone, but the worst they'll think is "you cared enough about the interview to make an effort."

If you don't know the culture, or the person conducting the interview, much better to err on the side of looking good.

Crikey, someone advocating the STL.. I've used it for a fair few years now (in earnest) and frankly its crap. I wouldn't even go as far as calling it powerful.

I'm not even going to dream of contesting the problems you highlighted. But together with C++'s generally low-level access to things it lets you do some tricks to subvert OOP that are extremely powerful for library developers. These are tricks worthy of a perl obfuscator, in that they pretty much make no sense to the casual reader, and they may be extremely difficult to maintain - but in java you don't have that option, and instead of creating a small kernel of "very expensive to maintain, but you only write it once and it makes life easy in everything else you do", you have to struggle with trying to force stuff into Java's limited perception of what OOP means (which is a subset of what it really means) and end up creating lots of messy code just to try and work your way around the application-centric stuff that is forced upon you.

For a trivial example (which doesn't exhibit that stuff above, but does demonstrate the application-centric view of java-the-language), look at package-protection: it is not possible to make data or methods "only accessible to my subclasses".

From a library-development POV this is stupid. The assumption appears to be that "anyone writing a class in the same package as me is going to be working with me or actually be me, so they don't need to be isolated from the implementation details of my class".

At the other end of the stick, the fact that packages have no inheritance - their hierarchy is a fake - means that library developers have to put masses of classes into huge monolothic packages, because IF they attempt to subpackage things, they instantly (and irrevocably) lose access to everything in the super package that is not public.

It wasn't planned from a library-developer's perspective, and it shows.

PS I once got offered a job (illegally - breach of contract: they had to make the offer through the agency because I was working as a contractor), and then they told the agency they'd turned me down on the grounds that I hadn't been wearing a suit jacket. The temperature was over 35 celsius, and I'd been carrying the jacket on my arm instead of wearing it! LOL. FYI, that was a division of Carlsberg (I never attempted to sue them, so I might as well shame them), and I think the temperature must have been affecting the brains of the interviewer...

80-100 hour work weeks aren't normal work weeks... just normal work weeks when you are behind schedule and approaching a deadline (which is probably only most of the time, not all the time). Hopefully you can land the job, you were probably supposed to somehow convince that COO that your godly skills and effective communicatino would easily get you through the team work involved in commercial development, but it'd be hard to come up with an arguement to prove that on the spot.

I've never worked as a programmer in a company that primarily did programming, though I have worked as a programmer and built the entire backend of some pretty large projects, the kind of stuff that'd probably land me a job at most programming companies without too much hassle, but I'd be stuck on the same points as you, when it comes to programming I've always been self taught, there's probably enough code conventions taught in college courses that I'm completely unaware of and don't understand that someone would regret hiring me, but that'd be their problem (and I doubt it'd take more than 3 months for me to get up to speed).

I've been working on a project lately that I needed for a game I'm building, and I plan to post it as soon as it's tested a bit more, the reason I mention it, is it'll need more work than I plan to put into it, and I'll give open sourcing it a try, I expect that will help teach me some of the things I lack that are necessary for working in a programming company, anyone care to elaborate on whether or not managing (or just being highly involved) in an open source project is comparable to company work? (Obviously since no one is paying you anything, there isn't a lot of leverage they can use if you aren't meeting a deadline but other than that it should be pretty similar).

For a trivial example (which doesn't exhibit that stuff above, but does demonstrate the application-centric view of java-the-language), look at package-protection: it is not possible to make data or methods "only accessible to my subclasses".

"protected" what am I missing?

Quote

From a library-development POV this is stupid. The assumption appears to be that "anyone writing a class in the same package as me is going to be working with me or actually be me, so they don't need to be isolated from the implementation details of my class".

At the other end of the stick, the fact that packages have no inheritance - their hierarchy is a fake - means that library developers have to put masses of classes into huge monolothic packages, because IF they attempt to subpackage things, they instantly (and irrevocably) lose access to everything in the super package that is not public.

Yeah, that does suck. But does C++ offer anything better? I'm not sure how namespaces (the C++ version of packages it seems), do this.

In any case, I don't think many people are really having any trouble with this given the vast amounts of Java libraries out there.

While I can also understand where the COO is coming from with his warnings, he also made it sound as if working in gaming is absolutely horrible - full stop. Simply put, he didn't address any perks at all (I wonder if he even knows there are perks besides "slaving like a dog and be happy doing that").

I think this COO talked quite honestly and frankly to you, which is a good thing. :-)

For example the working conditions of my few years in the gaming industry (Europe) have been the worst I've seen in my career. I traded a solid and well payed but boring IT job for one in the gaming industry "just" to have much more to work, get much less paid (no perks and such, when it's common in normal IT) and also to face the worst deadlines...However, it's also been the most interesting time in my career! I really didn't want to miss it at all. Also it's been very satisfying to work with a game fan team and produce a complete game, seeing all the other guys and gals working on the same title (the 3d artists have been my favs) - it's kind of "dream come true". I still enjoy to read forums when customers talk about our "baby" (=game) which took us years of nerves and stress. Today that's over and others enjoy this formerly hard work, so everybody's happy.

Quote

However, I must say that I am still keenly interested in gaming and nothing can disuade me from going that way since coding + gaming is basically my inclination - it's just what I want to do.

Yes, go for this chance. At least for some years. ;-)Later on, when you're (getting) older, you can still move to a more solid and better paid IT area, or become a farmer, or a successfull independent game dev.

My conclusion: it's a wave with a big amplitude, and such is life: where there's much light, there's also much dark, but the alternative is just a dull constant grey - no light, no dark...

Oh, C++ is no better at namespacing, definitely. I was just using java's god-awful namespacing as an example of where it wasn't planned with library dev in mind.

AFAICS it's an oversight: the original designers spent all their effort planning the 1st-order OOP support (as we know well: much better than that in C++), and didn't get around to really considering the ramifications this all had for higher-order OOP (i.e. they thought well about making classes and objects easy to re-use etc, but not how to do the same with sets of classes - when you get to more than a few tens of classes, java's support to help you vanishes (for a start, you can't explicitly create a data structure to record package information - IMO there ought to be source files for: "class" "interface" and "package", there being a lot of very valuable things you could place in language-integrated package files - although I appreciate it takes some careful planning to avoid the worst mistakes of header files!; JAR's have a hack to simulate some but far from all of this), and all your management has to be done externally. Witness the crappiness of the add-ons and hacks to JAR to make J2EE a bit more bearable (where you often have hundreds of classes to organize and maintain); the spirit of java is that such things would ideally have been included in the base language design, and have much stronger, more tightly integrated support).

Carmack isn't all that talented. He's good, sure. But I suspect his reputation far surpasses his real talent. Nothing he has done is particularly hard to do for a competent programmer that wanted to spend the time to do it. I mean, he isn't actually inventing anything as far as I can tell.

Carmack is very talented and he's a master in good timing (CPU/GPU and market wise). Have you seen Doom3? I totally dislike the game itself, but technically it's just brillant and of course invents a new generation of real-time 3d-engines. Amazing. A pretty talented 3d artist I know summarized his Doom3 watch like this: I didn't know it could look that realistic.

By the way: in short ID's going to GPL their nice Quake3 engine (like they did with 1 and 2). Anybody wants to write a Java wrapper for it? :-) Yes, it's old but still very solid (ask my Jedi Outcast II & III mates) - and it'll be free.

Maybe carmack isn't all that far ahead of other people writing 3d commercial games with practically unlimitted budgets, but there was a time when he completely revolutionized pc gaming, the only game that could even be remotely compared to doom was wolfenstein, which is like comparing the atari 2600 to nintendo, and seems like carmack was working for apogee at that time and probably had a lot to do with that game.

Carmack pretty much pioneered 3d gaming, in turn he probably had a pretty big influence on hardware and even might be partially responsible for some of the tools that make it possible for us lowly independant people to dream that we can create good games too, after all, opengl didn't exist for doom, graphics cards were so much slower. Believe it or not, a 386dx 33mhz comp with 8 mb could run doom reasonably well and doom 2 ran even better, a low end 486 could run doom very smoothly. I tried to find a comparison benchmark of a 386dx to a modern computer (like say a PIII 500 mhz with a reasonable vid card) but couldn't, but the numbers would be pretty crazy.

The only reason todays programmers can dog carmack is due to the tools and techniques that exist now that didn't exist when carmack started out, if carmack hadn't, someone else would have built a game that shifted things to 3d (apogee obviously was already working that direction, though maybe only because carmack was employeed there at the time did they even realize that it was possible to create 3d games at that time). Basically the tools that exist now have levelled the playing field a great deal. I'm looking forward to the next big change in gaming... I assume it's going to be something of a virtual reality deal, probably the biggest hold up to that is the 'controller', I think I'd be willing to donate a 3x3 or maybe even 4x4 area of my office to some kind of 'controller' that would handle running, direction changes, and maybe some other things (I imagine some kind of full body suit that sends info about what you are doing).

Maybe carmack isn't all that far ahead of other people writing 3d commercial games with practically unlimitted budgets, but there was a time when he completely revolutionized pc gaming, the only game that could even be remotely compared to doom was wolfenstein, which is like comparing the atari 2600 to nintendo, and seems like carmack was working for apogee at that time and probably had a lot to do with that game.

Nah, go back and read your history books: Ultima Underworld was released in 2002 - at the same time as Wolf3D - with graphics the same as *quake*. Carmack was a big crappy suck-artist who brought the right product to market at the right time: the main reason he made it big was that he accidentally discovered Deathmatch.

FYI for those not around at the time, Doom was getting free publicity to die for with e.g. corporate sysadmins banning it - at a time when no-one at corporates really thought about gaming at all, this was prior to the internet and web browsers on every desktop - becuase the amount of LAN bandwidth people were soaking up with deathmatch! (and networking hw was expensive enough back then that you had cheapo "ethernet" networks that would often crash if you overloaded them...bad news; very bad news).

Deathmatch was an accident, and nothing else in the entire gaming world came close until EverCrack found a sweetspot with "Level Treadmills". Arguably, EverCrack's treadmills still come second in terms of comparitive (adjusted) commercial success: they're more like Pokemon's optimizing of the "collectable" addiction ... not quite as powerful as the lure of deathmatch mano-a-mano gaming. Doom had the first truly world-changing game style since Tetris, and it was *all an accident* (early versions of doom did NOT have deathmatch in, at least not as we know it. They tweaked it, hit the perfect combination, and BOOM!)

Carmack is very talented and he's a master in good timing (CPU/GPU and market wise). Have you seen Doom3? I totally dislike the game itself, but technically it's just brillant and of course invents a new generation of real-time 3d-engines. Amazing.

Doom 3 looks good. But it doesn't take "a master" to do it. I know people that could do the same if they had the same luxury as he had with time and resources - with graphics card vendors giving him the latest stuff, and changing their hardware to fit his needs. Seems the timing is adjusted to suit him rather than the other way around. And a lot of that can be scaled at the last part of development to fit the hardware that is available when he wanted to release. Keep in mind that there is no Graphics card that can run D3 in all-out quality mode - which is good, but is that how Carmack timed it, or just a consequence of him having to scale back because the hardware wasn't ready?

The Doom3 engine was the only piece of code (other than his rocketry stuff :) http://www.armadilloaerospace.com/) that he's had to write for quite some time, and basically 3D engines is all he has done for 10 years.

The only thing that seems new with the D3 engine is the better dynamic lighting, the rest was done by the artists, with better textures, use of bump mapping etc.

Looks awesome, but Carmack is just one of many that could put that sort of engine together. I bet there are a couple people on these forums that could have done it had they been in his shoes.

I know this is an off topic forum but what would it take to cut out the c++/java library discussion and the doom/carmack analyis into separate threads? Its a shame this stuff gets buried.... You guys are some off-topic-fiends.

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org