I am a budding game programmer trying to get into the industry programming for PS3, Xbox 360. The main problem I see is the need to demonstrate my skills to a potential employer, but without access to Dev kits for the PS3 or Xbox 360, doing this directly is impossible.

My question is, what is the best alternative way to show console developers my skills?

C++ programming in DirectX for Windows seems close to showing Xbox 360 programming skills, and C++ programming in OpenGL seems relatively close to showing PS3 programming skills. Unfortunately, it seems from web research as if both Xbox 360 and PS3 actually have their own propietary libraries, therefore seeming to make this not a 100% fruitful endeavor. This approach seems closest, but also most time consuming. Plus you're not actually making anything run on the console.

On the other hand, programming in XNA has the benefit that your games are actually on the console, though I get the impression that this is looked upon as not "the real deal" since it is just a wrapper around DirectX and uses C# instead of C++.

Does anyone have knowledge or experience from inside the industry so as to know what kind of game demos would be most useful to show to a potential employer? C++ in DirectX, OpenGL, XNA, Unreal Engine, Unity3d, Flash, etc etc etc? There are only so many hours in the day, and I'd love to know how to direct my efforts.

My gut feeling is that DirectX would be the best choice, as it seems closer to what is used on the Xbox 360, but if having a good demo in another language/engine is just as good, it would obviously be less time consuming to go another route.

7 Answers
7

Depends what path you are going down, frankly most people don't expect specific platform skills in a junior.

If your a games programmer, make a lot of games.

If your a technical programmer make a load of tech demos. Read interesting white papers and try new stuff out. If you do something interesting that makes the programmers go OOOoo we will WANT to talk to you. We want to chat about this little interesting thing you have done. It doesn't need to be a game.

KEY FACT: Your demo's should run on a wide range of machines, include a video recording as a back-up. Edited not raw.

For a junior role I'm not looking for a lot of experience in any particular API, but instead a good grasp of the concepts involved.

If it's a graphics related position you're looking for, demonstrate you know 3D maths, and how to use an API well (OpenGL or D3D, don't care which really - just make sure you optimise it well). Frankly all APIs more or less boil down to making lists of things to draw, submitting them, and managing state - and there are good ways and bad ways to do those things, so understand that.

For more general console programming, make sure you have a handle on the particular problems an embedded platform entails. Limited memory (no swap, fragmentation bad, etc.), strict rules on coping with crashes, limited I/O bandwidth, no (or limited) ability to patch/update, etc.

It's about the style of coding, not the specifics.

I'd actually avoid XNA if you're looking for a commerical position, because it's not actually that useful in that arena.

FWIW, I would consider programming on Xbox 360 in C#/XNA to be a very good substitute for "the real deal".

Consider:

In XNA on 360, you have to deal with garbage collection; specifically, you need to avoid making too many, if any, allocations per-frame. While in C++ on 360, you don't have to deal with garbage collection (unless you're dealing with a scripting language, like Lua), but you do still want to avoid making many, if any, allocations per-frame.

In order to take advantage of much of the 360's processing power, you need to make your code multi-threaded. This is just as true, if not more so, in XNA as it is in C++, due to the desire to make up for Managed code being slightly less performant than C++.

Aside from a great many helper functions and classes XNA provides, the graphics API in XNA, given that it is based on DirectX, is extremely similar to DirectX/C++ on 360.

The wonderful thing about XNA is that it allows you to focus less on the technical issues of getting something on the screen, and more on making your game. Simply making a game (any game!), that is relatively bug-free and runs at a decent frame rate -- especially in the limited environment that XNA affords -- will give you a lot of experience, a demo that you can demonstrate, and hopefully, a foot in the door.

knowledge of the PPC architecture; this you can get by doing C/C++ development on a PowerPC machine, be it OS X on an old G5 Mac, or Linux on any PowerPC machine including the PS3.

knowledge of AltiVec; again, you can get this with a Mac or with Linux on a recent PowerPC machine, but knowledge of SSE3 might be enough.

knowledge of the SPU: you can only practice this on the PS3 using Linux.

This won't teach you how to program the PS3 video chip, or how to use the official SDKs. Though for the video programming, generic OpenGL and DirectX skills will probably be enough, with some HLSL too. There is also a lot of information and material all around the Internet, not all of which is illegal to get ahold of (for instance, Sony's modified version of GCC for the PS3 is covered by the GPL).

If you want X360 programming skills, you will look for:

knowledge of the PPC architecture: see above

knowledge of AltiVec: see above

knowledge of DirectX: this you can practice on Windows.

knowledge of the Xbox 360 SDK: the similarities are such that practicing XNA will help a lot.

This question (or rather, your aspirations) need scope. Nowadays in the industry there is hardly such a thing as a 'game programmer'. Unless you're aiming to go for a very small studio or rendering programmer, DirectX or OpenGl doesn't really matter.
The things that set consoles apart from PC's are limited performance, limited memory and multicore issues. No matter what branch of programming in the industry you aspire, those are important, so showing that you are aware of how to deal with those will, imo, help.
Know your C++. Know the pitfalls of C++. Know how not to use STL.
Make sure your code is framerate independent, multi-threaded, and uses custom memory allocators. Highlight that, of course.
I think what is really important is that your demo is finished. A lot of programmers stop when the core mechanic works, whereas the drag in game programming is the finalling - show that you know how to do it.

Most studios want to know what your skill is, AI, Gameplay, Rendering, Systems, Audio, Physics, whatnot. Try to figure that out. Being a generalist, without experience in the industry, will be a hard sell.

DirectX is a great choice. It's the easiest demo for us to run as we have PCs with Windows already most likely. If you do choose to go with the console option, a video is a nice demo instead. But nothing beats looking at your live code running.

Do try and run your code on several machines to make sure you're allowing for different video cards etc. These days that's mostly automatic, but some differences can still occur.

Knowledge of any 3D API is good. It shouldn't matter whether it is DirectX or OpenGL. 3D concepts are the same everywhere, just the APIs are different. Knowing OpenGL does not put you at a disadvantage to someone who knows Direct3D when competing for a junior level XBOX job. What you need to be demonstrating is your ability to code something and that you understand C++ (or any other language), the standard libraries, data structures and algorithms. Knowledge of a game engine such as UDK or Unity is a bonus. This demonstrates your ability to work with middleware, which is common in games companies. Flash has been used in front-end development, it is also a skill not to overlook.

Most important is that you just build a demo (in any language), make it good and see it through to the end. Good luck!