A Plea For Rapid Prototyping

OpenGL is a mess. You will not hear many people agree to this because its counterpart DirectX is considered to be evil proprietary OS-dependent software. I prefer to see any professional attempt at 3D stuff to be done in OpenGL just as much as the guy next door, but it is just not that great for easy 3D development. It is of utmost importance to quickly prototype ideas and features without having to worry about some bug because you forgot to restore some rendering setting after drawing a model. OpenGL and DirectX is not a one-package-solution. Together with C++ you need a bunch of external dependencies or you'll have to reinvent the wheel yourself. External dependencies are very, and I repeat, very annoying. Every library you import has another set of dependencies and each library has its own standard in both interface and documentation. Libraries keep you up at night solving weird bugs or strange platform dependent issues. Loading something as simple as a PNG files and actually rendering the transparency is only considered to be easy by people who have done this numerous of times before. Not to mention adding audio or something as simple as creating a window. Have I already talked about handling keyboard input and gamepads. What about loading 3D-Models with stick-animation from a file? Jeez, there is a lot you can't do as easy when coding in C++/OpenGL. A language like C++ does not give you the ability to easily debug your program. Pausing your program at any point, changing a bit of code and resuming it is a very powerful tool for testing your game. Want to create some ambitious new feature like cliënt-server stuff? No need to scout the internet for the highest ranked library that only seems to be supported by linux users, the .NET framework already has all that stuff. And you don't even need to create wrappers to make it object oriented. Somebody tested your program and it crashed? That happens a lot with 3D rendering programs because of the difference in hardware. XNA doesn't doesn't crash as easily compared to programs using DirectX or OpenGL and even if it does, you'll get a nice stack trace. C++ probably gives you some message that it was unable to access memory at 0xFE3FAA03 in shlobj.c, good luck with that. Asking your testers to install Visual Studio or GCC just so you can understand what is going on is not what I call 'good practice'. Maybe you can find a nice library that does this for you, but you'll probably have to clutter your source  with all sorts of debug code.

I'm not saying that you should abandon OpenGL or DirectX or C++, I encourage everyone to learn about them and to try and understand what they do and how they do it. Not only will that make you a better programmer, you also need it to create a game that is top-notch in the graphical department. But even for those games, I recommend to prototype with something like XNA first. The popularity of your game can also be measured by a Windows test panel and most likely its not determined by the fact that you were able to use the latest shaders or because you could sent 100 more polygons through the pipeline. And lets be serious, the chances of success are not that high. Aren't you glad that when your project failed you didn't go all out with C++ and OpenGL? And even if it's a big success you can always port your code to make more money from the people who favor designer notebooks from Apple or open-source operating systems. If you are afraid of porting your code some time in the future it's always possible to outsource it, Notch did it and he programmed in Java.

Before a flamewar is started remember that I'm not pro-XNA or against OpenGL or DirectX. I'm not even biased on operating systems. I just think  that quick prototyping is very important and that a development environment should be used that supports that. If you find an existing well-documented game engine that makes your life easier, just throw away XNA and use it. Simple as that. Lets draw an analogy.

I you want to set up a blog, will you download an existing package like WordPress or will you just program the whole thing yourself? Its foolish to start programming in PHP just so you can use Smarty to theme your blog. I'm well aware that you can 'precompile' your webpages with Smarty and that you get a better performance out of your blog. It will also be easier to add features that are not particularly standard. You shouldn't be scared to start with WordPress (or any other decent blog-product) and just port it when the need arises. Porting is tedious work, but its not like you'll have to rewrite everything.

Know the limitations. Figure out what your easy to use programming environment cannot do and just be okay with it. I know its hard, we all want the best of the best, right? Oh, and by the way, I still think C++ is the best language :P, but I probably won't use it.