Ever since their inception, there has been a lot of discussion regarding the viability of Game degrees, but instead of looking at them as a whole, I thought it would be interesting to look at various elements of them and discuss their relevance to the games industry and in producing graduates that are progressive and well rounded.
This idea for this thread came about due to the number of game degree and placement students I have had to review over the past few months, plus having been asked to look over a couple of degree course descriptions to feed back my impressions of them (luckily I didn’t have to do this alone!). I was also involved with carrying out practical interviews for a large number of students looking for placement or graduate work at the end of the year, and it was these experiences (plus many little things over the past few years) that made me think this was a necessary discussion.
The main thing that constantly stands out, in both currently taught and prospective modules is the fact that it is generally Java or C# that is taught as the primary language. And with XNA becoming more and more widespread (in both academia and the general indie scene), many courses see C# coupled with XNA as a valid combination for their principle tools. I think the reasons for this are pretty easy to spot, and unfortunately not so easy to change
- C# (and specifically XNA) allows people to get nice things on screen easily. This might only be a simple spinning teapot, but it’s a lot easier to do that in XNA than DirectX or OpenGL!
- By making it that much easier, people may see it as more fun, and the more fun they have the more likely they are to join the course and stay on the course
- More people on the course means the University is getting additional funding for both that course and research linked to the department (as this is one of the fundamental ways Universities are funded, there is nothing wrong with that in the slightest).
- People teach what they know, and a lot of Lecturers are experienced in Java and feel an affinity with C#. Being experienced in a language makes you a better teacher, so it makes sense to proceed with these languages.
Making these languages the language on which these students base the majority of their learning is, unfortunately, flawed, and that is becoming more and more obvious with every graduate that sends a CV my way (and it’s not always student’s game degrees).
Wherever you go you can always hear the phrase “A good programmer can program in any language” (easily taken from ‘Real programmers can write Fortran in any language’), but that claim is nearly always based on programmers who have been working with (especially compared to today’s tools) languages that are hard to use, hard to understand and most importantly hard to write well. I fully agree, a good programmer can (generally) program in any language, but it’s that disclaimer, a good programmer, which is where these courses fall over.
It all boils down to the sheer amount of support that tools like XNA give developers and how that stops people from learning what is really happening. XNA (and to a lesser extent C#) does a lot of things for you, and it does it under the hood, through calls to a few simple functions (lighting, animation and online spring to mind). A student might be able to knock together a pretty decent piece of work in a couple of weeks, but I would be surprised if the majority of the demo’s weren’t collections of calls to high level library functions, with the student at times fumbling around looking for the right package until they found something that worked. Unless they have thorough groundings in more low level languages (I am mainly talking C/C++ here but other languages are just as good), then they never really understand what is going on in the background, things like garbage collection, pointer arithmetic or true encapsulation and modularisation. They also manage to bypass some of the (possibly less glamorous) elements of game development and as a result struggle with things like basic vector maths, trigonometry and C fundamentals.
Without this basic foundation using languages that force you to do things the hard way, allowing you to make and learn from you mistakes, it is difficult (if not impossible) to take the skills and transfer them into different environment and different situations. This is, to put it simply, a core skill that is needed by every game developer currently in the industry. Unique hardware, new APIs, incomplete or incorrect compilers and multiple development environments are all problems that these skills allow you to navigate around making the developer an attractive proposition to any game company and an asset to any team.
This is a real shame, because due to their experience of using XNA, their demo’s might look pretty good and create an impressive demo reel which gives them (and an interviewer) an over-exaggerated impression of their skills and a real awakening when they find they don’t have the skills to do the job they want to do (the real shame here is that it is simply not their fault). Without a more realistic approach to basic programming skills on these courses, this will continue to be a problem as the distribution of these high level tools gets wider and deeper into academia and the indie scene in general.
So what should these students be using? C/C++? Well yes, that is pretty much an industry standard but concentrating on those would cause exactly the same problems. Try C/C++, try Lua, Prolog, Lisp, SML and a variety of scripting languages. Keep working with C# and XNA, but make sure the syllabus contains a variation on the skills, and then the students, if they really do have a desire to work in the games industry, can concentrate on the things they find interesting and become experts in the languages and areas of their choice as their experience grows, not as their tuition fees are paid.