C++, Baby

I was catching up on the Communications of the ACM, and noticed this article, Computer Science in the Conceptual Age. The “catch your eye” text on one page was: “Programming interns/job seekers from our program Spring 2009 (35 interviewed in the game industry) found no companies administering programming tests in Java.”

There are other chewy bits, such as: “The USC experience is that 100% of its students interviewed for programming positions are given three-to-four-hour-long programming tests, with almost all companies administering the tests in C++.”

Also, this: “The game industry will also tell you that it wants the first four programming classes in C++, not Java, according to M.M. McGill and my own private communications with directors of human resources in major game-development companies.”

One final morsel: “Many game companies say they will not interview or hire someone whose first programming language is Java.”

Wow, that last one’s harsh, especially since my experience with two teenage sons (one in high school, the other a freshman computer science major) is that Java is the norm for the first “real” language taught (I don’t count Scheme as a real, “you’ll get paid programming in it” type of language). I don’t think I’d rule someone out for knowing Java first, though having gone from C++ to Java and then back, the transition from Java to C++ is like being thrown out of the promised land: you suddenly again spend half your time messing with memory in one form or another. C# and Java are darn productive in that way. And, no, for me at least, those auto-pointer classes in C++ never quite seem to work—they need a different sort of discipline I don’t appear to have. I also love that my first Java program, from 1997, still works on the web; some of my C++ programs from back then won’t run on Vista or Windows 7 because the WinG DLLs are not a part of those operating systems (thanks, Microsoft).

Nonetheless, the article’s right: at Autodesk we’ve dabbled with Java and C#, I’ve seen Python used for UI control around the fringes of a program, but the heart of client-side graphical programs is almost always C++ (or isn’t, with regrets and cancellation often soon following—been there myself, though Java was only a little bit to blame, to be fair). Also, XNA, which uses C#, does not have a 64 bit version. In addition, Microsoft’s managed code support usually lags behind the “real” DirectX, i.e., the one for C++.

Looking around, I did find an open-source project, SlimDX, that does support 64-bit assemblies for interfacing with DirectX. Interestingly, they claim one AAA game title shipped using SlimDX, but no mention of which. So I asked. They’re keeping the information confidential, which is fine, but the other comment sounds about right: “The large majority of professional commercial PC/console games are still developed in C++ because of the sheer amount of legacy code the studios developing those games have that is already in C++ (and because of the generally poor support from major console vendors for languages other than C or C++, which contributes to lock-in).”

Long and short: it’s C++, baby.

5 thoughts on “C++, Baby

  1. mosaic_school

    C++ it is..

    At least for cross-console games as I doubt that current JVMs or the .NET runtime would perform well on the PS3 or Wii hardware. It also makes sense to choose C++ for programming tests because those who master this are likely to succeed in a Java/C# oriented test as well.

    In my opinion, universities do well by starting to teach a high level language, e.g. a functional language like Haskell, concurrently to C/C++. I am glad that in my case this was continued by having Java and Assembler courses in parallel as well. However, I still think that the concepts (e.g. OO or functional styles) are even more important than low-level mechanics, which is where most tests fail.
    Furthermore, I believe that the entertainment industry would benefit from having a common low-level layer like the java/.net runtime. Instead of complaining about their short-comings, we should help improving them towards the specific needs of real-time applications.

    Btw. did you know about the Blender Java port? As far I know it’s on hold until ver 2.5 is final but an early version based on 2.4x showed that it’s is totally feasible.
    ( http://www.dooglamoo.com/software/blender/75-blenderjavaabout )

  2. oleg

    Btw auto_ptr will be removed in the next revision of C++ standard. It was a failed concept from the very beginning, it was overcomplicated and too error prone even for such a patchy and inelegant language as C++.

  3. Pingback: Real-Time Rendering · 7 Things for February 6

  4. Lee Winder

    “Many game companies say they will not interview or hire someone whose first programming language is Java.”

    This really does surprise me. While I would be hesitant to hire (though it wouldn’t necessarily stop me interviewing) a _graduate_ who’s principle language was Java, an experienced developer is another story. While there are obvious differences between the two languages, an experienced developer is an experienced developer with skills that can move between languages regardless of their type.

    Though as a SkillSet accreditation panel member (which is the UK’s Sector Skills Council for Creative Media) we do expect (and only award accreditation to) Universities that teach C++ as the primary language on the course, and that certainly won’t change any time soon.

  5. Pingback: Real-Time Rendering · Predicting the Past

Comments are closed.