Adventures in XNA 2: How Hard is XNA Development, Really?
You probably don't read the Official XBox Magazine, which is billed as "The UK's Number One XBox360 Magazine." All you need to know is that it's a magazine written by fanboys, for fanboys. Impartiality doesn't seem to be on tap there, but admiration for all things XBox certainly is.
So imagine my surprise a few weeks back, when I read the Official Magazine's first article in a series called "XNA Masterclass." In a nutshell, it chronicled the misadventures of non-developers who were trying to get a handle on game development with XNA. I took away three things from that reading: (1) XNA development is hard, (2) It's really hard to get started with XNA, (3) You know, the whole XNA thing is just really freakin' hard.
The authors' transparent frustration with XNA, surrounded by a sea of blathering uniform admiration for everything else XBox, really threw me. Is XNA really that impenetrable?
XNA significantly lowers the bar for game development, but doesn't compromise when you want to dig deeper. It isn't a toy, and it isn't a dumbed-down tool for game development.
Consequently, XNA needs to be approached with reasonable expectations. Creating a new instance of the Spacewars starter kit which ships with the framework, and reading through its code, will NOTmake you comfortable with XNA. You need to go into XNA knowing that your weekend (and perhaps longer) is a total write-off.
I acknowledge up front that I am not typical of the target audience. I developed extensively in Managed DirectX, which was the precursor to the XNA framework. I have decent knowledge of both the graphics pipeline and game engine architectures. And the .NET language C# is practically my native tongue.
But with that said, here are:
3 Reasons XNA is Development is Really Hard
1. There's a lot to learn.
If you're not a C# developer, you're learning a new language. If you're not a .NET developer at all, you're learning how to use the Visual Studio development environment, which has been injected with custom extensions for XNA.
You'll need to understand the XNA Game library (which is very elegant, by the way). And you'll need to understand at least the basics of the XNA Content Pipeline, the existance of which eliminated the need for over 50% of the code in my previous Managed DirectX game engine.
So in summary: there's a whole lot of new stuff you have to learn.
2. With Great Power, Great Responsiblity, etc. etc.
If you want to see how deep the rabbit hole goes, XNA invites you to hop on down.
For example, if you want to write "custom shaders" which change the way your graphics card renders things, you've got that option, but you need to learn a whole new language called High-Level Shader Language (HLSL). Or to take a sonic example, XNA's Content Pipeline uses the same feature-rich Cross-Platform Audio Creation Tool (XACT) to manage audio that's used by the complete DirectX SDK.
Consequently, when customizing elements of an XNA game, you tend to find yourself brushing up against (and aware of) the Hard stuff.
3. You're forgetting about the art pipeline.
Even if you're a hardcore developer - actually especially if you're a hardcore developer - someone's got to author your content. I'm not saying you're not capable of making impressive models, animating them, and creating sound effects too, but I am saying that it's a completely different talent from coding.
3 Reasons why XNA Development really isn't that hard
0. The XNA Framework's design is superb.
The XNA libraries feel like they were written by a team that understands the Sellsian mantra: "First, I write the code I would want to write if I were the other programmer [i.e. you, the developer working with the XNA Framework]. Then I do whatever it takes to make that code the real implementation."
Much more on this in future articles.
1. Strong and enthusiastic community support.
And by "community" I mean both Microsofties and the world at large.
From the Microsoft perspective, start with the XNA Team Blog and branch out from there. I also read Dave Miller, Mitch Walker, and Shawn Hargreaves among others. [Update 7 Mar: You should be sure to check out the XNA Creators Club as well!]
In the broader XNA community, I've really enjoyed working with David Astle and the folks who are discussing the XNA Animation Components Library on CodePlex. The discussion boards there are buzzing.
2. Visual Studio is an amazing environment to learn and work in.
Let me put it this way: you can debug your code, and step through it, while your game is running on an XBox360. You get oodles of Autocomplete and hand-holding in Visual Studio which is really best-of-breed.
And the Visual Studio Express Edition, which you'll use for XNA development, has been streamlined so that you can quickly hone in on its most useful core features.
3. Excellent documentation and starter kits.
The XNA documentation is superb. 'Nuff said. Hit F1 and read it.
In addition to the documentation, tutorials are popping up all over the web. In fact, my favorite "getting started with XNA" tutorial at this point is actually the Animation Components Library Tutorial!
And although I previously said that inspecting the SpaceWars starter kit won't make you comfortable with XNA, it has served as my "reference implementation" any time I wanted to learn how something works - particularly XBox360 vs. PC nuances.
So perhaps the Official XBox Magazine has a point. XNA development is not for the faint of heart. You are not going to install this thing on Friday and have the next Gears of War up and running to show your mates on Monday.
But learning XNA is not intractable - far from it - and if you give it a try, you become part of an enthusiastic community that is equipped with a very powerful tool, and the unprecedented opportunity to build applications that run on a cutting-edge game console.
If you're just starting out with XNA, I'd love to hear of your experiences, and would be happy to give additional pointers to anyone getting started.