Higher Education

C# and XNA – Are Universities Teaching The Wrong Things?

XNA Logo

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.

23 thoughts on “C# and XNA – Are Universities Teaching The Wrong Things?”

  1. What you forget is that C# and XNA are a great way to closed source + selling it. In fact it was a reason why Java became so popular.

    For everyday jobs, languages such as python or ruby are a lot better to solve a given job at hand, but its also obvious why Microsoft has put so much effort in XNA.

  2. I agree – how could graduates who had just spent their degree fiddling around with C# and XNA be any good at all? Surely, to be a game developer you need to know (at least):

    – C, C++, assembly language
    – A lot of theory about algorithms, data stuctures and graphs
    – Advanced calculus (for physics)
    – Linear algebra (for moving things in space)
    – Compiler design (in-game scripting language)
    – Networking (again, graphs)

    I’m sure that C# and XNA is a great time saver for people who already know all that stuff, but you need to start with the fundamentals. Too many students have the ‘i want to wriet gaem lol’ attitude instead of the ‘i want to be a computer scientist and brilliant programmer’ attitude.

  3. You have keener insight than most university professors. I hope the pendulum swings back. If not, I guess we could send ’em to India where they would be a better match to training requirements.

    Academia no longer leads industry, but I guess that could mean that the best move on to where the real money is. It’s a shame, nonetheless, when Industry has to remind Academia to attend to its core responsibilities. Hope somebody is listening.

  4. :Author:
    I mostly agree. I feel the problem is that the students do not know the theory behind what their tools are doing for them

    “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.”

    It sounds as though you are blameing the technology for the problem. I think that it is the university’s responability to ensure that their students understand the theory behind what they are using the technonolgy for. I also think that there are a decent amount of student who come into gaming degrees because they like to *play* video games, not *make* them.

    :Jonathan Ville:
    I agree with all the points except the C, C++, assembly laguage part. A student cannot gain a good knowledge of any of those languages through any course taught at a university, (not is it their responsability.) A student should at least have looked at some C and assembly code. They need not be good at programming. Learning how to code well is part of working at your first job or internship.

    I agree that too many students are not willing to put in the effort to learn how things actually work. They just want to learn how to use the tools given. Quickly.

    Disclamer: I am a student and on internship myself.

  5. This is a great topic not just for future Game Programmers but for all programmers.
    If we are just talking about programmers in the USA…we have to remember why do at least 50% of computer science students want to learn as much Java, C++, C#, or any other language as soon as possible?
    One reason is college (ie: higher level) education is so expensive that they need to be able to earn as soon as possible when they get out to the job market and pay their =~$1000 a month student loan bill (which is what i am doing) on top of all of their other expenses.
    If college and higher ed. become more affordable i can assure you higher ed. would be able to increase standards and increase enrollment.

  6. You couldn’t be more wrong.

    The future is RAPID development tools. Not everyone needs to geek out on the maths in order to write great GAMES. Games are about fun, what you’re talking about is graphics and ui libs. Not at all the same thing.

  7. I don’t doubt that graduates experienced with C#/XNA will be able to work on a game, but I fear their ability to grow will be limited. If XNA doesn’t offer exactly what you need — what are you supposed to do? You were stuck writing offline games until the next XNA framework came out with networking support.

    I agree not everyone in a company needs to be able to read a SIGGRAPH paper and be able to understand and implement it, but I’d doubt the capabilities of a team of pure C#/XNA programmers in the long run.

    @lagattack:
    I believe universities should offer a balance between required courses and electives. The required courses offer the groundwork for a lot of the topics listed by Jonathan Ville and it then becomes the student’s responsibility to specialize in certain topics based on the electives they choose. My undergraduate program made me take a lot of courses I didn’t like at the time, but have proven to be very useful on the job and understanding problems outside of my range of expertise.

  8. I recently graduated and my only experience with C#/XNA is self taught so you are making some generalizations. Programming and games are moving from the dark basement of your parents house to a big mainstream business. Why should I have to reinvent the wheel for things like vector math when its been done for me? Like the other poster said it is more about rapid development then being a nerd in a wizards hat. Kind of sounds like you are set in your ways and don’t want to change. I’m pretty sure there were lots of similar articles when games starting making the shift to classes and C++ from regular C/lots of asm. While you are beating your head against the desk still working on a graphics pipeline I could have a game out the door making money and starting on the next. Its about using the best tools to get the job done the fastest, not clinging to tradition. Besides, any programmer worth their salt knows that if you want to do games for a living most of the things you need to know will be learned outside of class.

  9. In response to Dude’s post…

    “I recently graduated and my only experience with C#/XNA is self taught so you are making some generalizations”

    Of course I am. Unfortunately there isn’t enough space to cover the various differences between the thousands of Universities in the world. I know there are excellent Universities out there, but not all of them are.

    As for the rest, this is unfortunately the naive outlook a lot of graduates have. Very few development studios’ are in the position to develop for one platform and one platform alone. It doesn’t matter if you can write games faster in XNA or that you don’t have to invent the wheel again and again. That’s worth nothing when you have to port it to the variety of platforms in the market today (most of which will not support C# for a very long time – if at all).

    And even if you are working on the PC/X360 exclusively, there is a pretty good chance that you will end up working with one of the many middleware engines out there, the majority of which are not written in C# and XNA (again due to the cross platform nature of most of these development solutions).

  10. For business applications and software that solves logistial problems ie: database programming, website programming, high level rapid dev tools seem to be the industry standard. Java is prevalent among the large companies that have their own software team. However, when working with performance problems or hardware problems, solutions really reside in the low level language. Linear Algebra, graph theory, data structure analysis, advanced algorithms (sorting), networking and similar advanced and difficult topics are REQUIRED for this set of ‘hardcore’ problems.

    XNA only gets you so far. And it’s perfectly fine to produce a game for the objective of producing a game. For the objective of showcasing your code, it’s too easy to do stuff in XNA. Might as well compare yourself to a script kiddie.

  11. I agree with dude totally. Its about progress making things easier. I also agree that you need to understand what your doing. You should not though however have to rewrite it though. Like dude said why reinvent the wheel. True encapsulation? Make it sound like only a veteran programmer can pull this simple design off. Understanding garbage collection. How much easier does it get, object goes outta scope and the finalizer is called on it(from a managed code perspective). Some things you state are quite valid other are well frankly BS.

  12. A thoughtful post! I’m sorry that I am commenting on an article that is over a year old, but I felt compelled to answer anyway. I am 18 and about to go university to do a Games programming degree. Currently, right this moment, I am compiling a ‘how to get started with XNA’ for some 17 year olds. Whilst taking a break I stumbled upon this post and it certainly made me think. I believe that Lee is correct in the majority of what he has said, as I can see from my Computer Science A-Level, that XNA is putting a hell load of wool over student’s eyes. I think that in some sense XNA is very dangerous to students, as if this is going to be the norm for them, why bother with going deeper and more ‘hardcore’? And the rapid development that others have mentioned, surely if a company wishes to do this, it is better for them in the long run to have programmers that can create their own tools, customized for their use, and, as Canagan Dirus metioned, the real solutions rely on low-level code, of which someone will eventually have to use. But, in the defence of XNA, you can’t deny that it is an excellent starting block towards games development, even if it does encourage bad understanding of what is going on under the hood.

    Hope I’m not being to naïve! KeegY

  13. Ok so I finished my online university degree in game programming and now I’m looking to really learn how to program… where do I start?

    You hit the nail on the head with this blog post. My courses couldn’t have been more chaotic. It was as if the course creators were battling over whether to teach C# or a lower level language during my entire college experience. I walked out with little confidence in my abilities to program.

    Currently I’m trying to focus on learning XNA so I will have a game to put in my portfolio but where will that really get me?

    I’m very determined to learn but I feel so slighted by my university and I’m so far in debt that I don’t see getting a degree in computer science as a solution to my problem.

    I’m willing to admit defeat and just stick with my current profession (Game QA) and just work on indie games on the side. But a part of me feels this would be a big waste of time and money. Isn’t there a way I can teach myself the required skills for an entry level game programming job?? Are there any books or maybe cheap community college courses that would prepare me for the real world?

    Maybe I’d be better off starting a class action lawsuit against my university. I can’t be the only one who put everything they had into school just to have it fail them.

  14. Good article, and you have brought up an interesting question: what classes “should” a CS student take?

    While I agree that most colleges are getting away from command line debugging in favor of IDEs and they are going in favor of .NET as opposed to more native languages, there needs to be a balance. When I took my undergrad I had to learn Scheme, Prolog and ML. I certainly don’t use any of those today, and wouldn’t most likely in the game world, and would conjecture that they could have better spent my learning on something more modern and useful (to an undergrad).

    Sure, Lisp and Prolog are great for scientific research, but I wasn’t going for a PhD, I was going for an undergraduate degree. I think that universities should still teach basic classes about assembly (MIPS w/e) and data structure classes in ANSI C, but they should do away with the COBOL / Lisp classes in favor of something more usable in today’s market.

  15. @Randy

    I’m sorry to hear that you’ve finished your course feeling like you didn’t get everything you wanted, and needed, out of it. I think since I wrote this post courses are getting better and people are starting to know what to look for, but that doesn’t help people in your situation.

    But don’t give up. A degree is by no way a requirement to land a role as a professional programmer in all companies. In fact, if you are already working for a developer in a QA role then you are in a fantastic position already. I know quite a few programmers, designers and artists that started out in QA, some of them not knowing a development ‘trade’ until they’d been working for a couple of years.

    Working on indie games in your spare time is exactly what you want to be doing, as these will inevitably build up to produce a portfolio that you can then use as part of your application, and knowing people already in the industry will make it easier for your application to end up on the right persons desk.

    So don’t lose hope. The road might be a bit longer that you were hoping, but if it’s what you really want to do, then stick at it and you should be able to build up enough work and experience to get to where you want to be.

  16. I partially disagree with the original post; C# and XNA programming should be a core part of any programming curriculum. I think you would be hard pressed to find a programmer at the top of the industry that didn’t start learning by programming games. I know I for one started programming games when I was twelve. It was spaghetti code written in Basic, and the programs where only a few pages of code, but it gave me a foundation to go on from. Today I have a six figure income in the I.T. industry (though I rarely program).

    Programming students need to get started with something that’s rewarding and fun. I took a game programming course and paid pretty good money money for it. We spent months learning about how Direct-X does different things to the graphics card, we learned about back buffering and Z-Buffering, etc. etc. In months we never did get to actually program anything. And I have to say that although I learned some key skills that might allow me to render 3D graphics if I could bypass Direct-X and just write bytes directly to the video buffer, but in the real world I could not even draw two primitives on the screen and make them collide while following the path of a 3D terrain. It was practically a waste of time. I’ve spent about 5 to 7 years trying to figure out how to program in Direct-X picking up skills in 3D Max, Torque, and all sorts of art tools along the way, but I’m just now figuring out how to write a 2D tile engine in Direct-X on my own.

    In comes XNA and C#. I accomplished more in a week in XNA than 7 years in DirectX. The problem is not that I can’t program; I’ve experimented with writing Windows (WIN32) programs in Assembly Language. That’s enough to scare away more than a few professional programmers.

    The problem was that I just want to write some code that gets some results so that I can maintain my interest level; if I can start making some simple games, I may start getting interested in improving those games and digging in deeper. But after reading about 30 books on game programming (mostly DirectX) and other ways I’ve tried to learn, I can say that most of those who teach “real” game programming either don’t understand how to teach, or they just want to show off what they know rather than pass the information on. Many of them like to pretend they understand more than they actually do. After a few years of this I eventually taught myself Trigonometry and started realizing that a lot of the people teaching it didn’t really understand it. (I later took a college Trig class to get credit for it since – having already learned it – I figured I might as well get college credit for it. It was a joke. The professor didn’t have a clue; he was teaching it straight out of the book without any real understanding of the underlying reality. 75% of the class dropped out and the rest struggled through while I made straight A’s because I already understood it.) The emphasis on linear algebra is greatly exagerated; maybe vectors and matricies make the code easier for those that understand vectors and matricies (as well as make it more efficent thereby improving performance in some cases), but the CPU doesn’t know what they are, so ultimately they aren’t necessary at all (I say this after struggling for years and finally understanding them).

    Sure, right now, you can’t get a job as a real game programmer without the ability to write code in C and probably not without a solid understanding of Direct-X. However, if you get students programming games for a few years, you can teach a lot of the high level concepts and then as they get more excited about programming you can drag them into C/C++ and Direct-X on the premise of having more control over what is going on and improving the performance. After all, while much can be avoided in XNA that doesn’t mean that you CAN’T do it in XNA. For example, you can learn all about linerear algebra for rotations and transformation, calculus for physics, and other aspects of game programming in XNA where it’s easy and quick to implement. The quicker students get done, the more they can start over again, and get more practice.

    Also, don’t discount .NET/C#/XNA. First of all, a significant number of the business programming jobs out there are C#, not C++. The only industries that I know of that would regularly hire a C++ programmer over a C# programmer is the gaming industry. Furthermore, as processors become more powerful, storage becomes quicker, and memory cheaper, the computer industry tends to “relax”, “get lazy”, and throw out efficency because “the computer’s fast enough”. Don’t be suprised if ten years from now 90% of the games sold aren’t written in some sort of high level language like C# with only the programmers at Microsoft understanding the C/C++/Assembly Language code behind the scenes (This has been happening throughout the computer industry since the very beginning everywhere except game programming). I don’t know if you’ve seen XNA lately, but the performance it offers is already quite amazing on a modern machine (I’m not sure that I’ve seen an “Apples to Apples” comparison between my 8 core, 12 GB of RAM, 64-bit 3.4GHz processor with a 1GB video card running XNA and the XBox360 running what ever it runs in commercial games, but so far they look pretty equally capable). (Granted, I’m comparing a $4,000 machine to a $150 machine, but consider Moore’s Law and also that we’re talking about a learning platform.)

    I program in Assembler and C for fun occasionally, and I’ll probably continue to learn more about Direct-X at some point. Certainly, I think they should be required courses in any “Programming” degree, but they should be saved for final courses after everything that can be learned in XNA and C# has already been learned and students are ready to add some polish to what they already know.

  17. C is probably the only language you need to know.
    If you have done any real programming you would have noticed that C++, Java, Javascript, etc… is all pretty much lazy languages and are not open ended or universal the C language is!
    People or corporations that develop these languages seem to just be creating obsolete things so they can make money which goes against the concept of what programming is!
    A universal language for any description for a human to understand and be able to compute huge mathematical problems.
    Languages that are not open source and have legal attachments is censorship and goes against programming altogether also they are useless to even get involved with.
    This is how companies and schools steal, plumage, censor people so that the will always be on top and get their money And the last thing they want is somebody to actually know an array of things this would add to their competition right?
    Also Direct X legalities make it useless to a developer.
    if you develop a game using direct X you owe them fees.
    If you think this is rubbish than look at what they did to that program “computers for kids” they are probably trying to figure out a way to steal ideas from kids know!
    Since that is the sole purpose of windows to steal your information so they can make the money right!
    and once they notice this message they will probably erase it and use my personal information that they collected in India or wherever when I registered windows because India has different legalities right?
    Are you starting to even see a glimpse of the criminal activities that are going on DUH?????

  18. I am really glad I stumbled across this article! I am a sophomore at the University of WI – Stout, where I am majoring in Applied Mathematics and Computer Science with emphasis in Game Development. Our school does spend some time teaching Java but the majority is spent in C++. Some of the classes for the program are:
    Trig
    Calc 1-3
    Linear Alg.
    Data Structures (C++)
    Algorithms & AI (C++)
    Computer Org. (Assembly)
    Graph Theory
    My question is, is there anything I should spend my free time learning beyond this? I want to graduate as a legitimate programmer! I was thinking about spending some time this summer learning about Direct X (or Open GL, or both) but are there any other suggestions?

  19. It sounds like you’re on to a pretty good start. Having a solid grounding in Maths and Computer Science is going to set you up well for what ever you want to do, games or otherwise.

    If you want to do something in your free time, the best thing you can do is simply make some games using recognised tools. Dive into DirectX or OpenGL (I wouldn’t get hung up on ‘which is best’ the trick is to show your skill in using an external API well rather than showing your ability to use many poorly).

    Look at playing around with, and making something using, some of the great Open Source engines out there (Ogre is a great place to start in that regards). Often people get hung up making their own ‘engine’ when working purely with DirectX or OpenGL and this will get you past that into game logic, game play, effects or any other area you are interested in exploring. Even using these engines will allow you to do some lower level programming if you want so don’t worry about ‘missing out’ if you give them a try.

    As a Sophomore you’ve got enough time to try things out while having enough knowledge to have a good idea where to start.

    Have a look at the serious of articles I wrote regarding demo portfolios for graduate programmers (http://www.leewinder.co.uk/blog/?cat=22) which will give you an idea of what you’re aiming for. But demo portfolios are a year or so away for now, so use it as reference rather than a destination for now!

    Good luck with this, both on your course and with what you decide to do after.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s