Original Post
Over the past few years, I did a lot of research in an attempt to find out what the best technology would be to produce my game. I was looking for a 3D engine to use, and as a result I was also attempting to decide on the language I would use for my game's core code as well. I originally was using Auran Jet (which is now a dead project evidently)... because of the lack of support and updates for that engine, I moved to Ogre. Both of these engines are written in C++... and I was content, at first, to use C++ to develop my game. I was under this really strong impression (beaten in to my head by language fanboys) that "No self-respecting developer would EVER make a game in anything but C++." I think that at the time (circa 2003 I think?), this was fairly true... But here's the problem... I absolutely HATE C++. I hate its antiquated syntax, the long compile times, the hodge-podge method of linking god knows how many dependencies together, and having to update them from god knows how many websites, etc... (ie: stlport, among others), just to get things to compile. It was, to me, like having to learn how to build a car just to get to the point of being able to learn how to drive it. The language barrier, in short, was a real downer for me... but one I was resigned to deal with simply because that was the only real option... ... or so I thought. Sometime in 2005, I found .NET. I was doing a windows maintenance utility for a company I was working for... and after starting on it in VB6 (*shudder*), I found out about VB.NET! (This was about 8 months before VS2005 was released). In a MONTH I rewrote an entire VB6 app in VB.NET, learning the syntax as I went... with no compiler problems, or having to debug linker issues, or having to track down problems with invalid paths in my dependencies, etc... It was amazing! And what I found even more amazing... I learned that VB.NET was fully capable of doing damn near EVERYTHING that C++ is capable of doing... at least in the meaningful things. It truly was like driving a Cadillac! So, I started looking for other engines for my game... I did my research, asked a lot of questions about performance, etc... what I found was this: C++ programmers, in general, are fanboys that don't want to even LOOK at .NET because they simply can't allow their egos to risk having their "leet skillz" become obsolete. They will trash .NET (especially VB.NET) at every opportunity. (On that note... I found it hilarious when I would ask if they liked C#, and they would be like "Oh yeah, that language is fine... but VB.NET sucks!" Then I would point out to them that they're stupid, because C# and VB.NET compile down to the same intermediate language that is compiled by the JIT compiler... made them eat a little crow there...) I found that there ARE C++ programmers out there that are knowledgeable about .NET... amazing how they don't mind it at all, but the C++ programmers that haven't even LOOKED at it, and know nothing about it, make it out to be like it's worthless. I found that .NET is about 95% to 98% of the performance you'd get from a C++ application... and I determined that the minor performance hit was worth it for the reduced headaches and shorter production time. I found that .NET has a lot of premade stuff in it that, while available in C++, you'd have to find the right addon library for it, and add yet another dependency... it's all just THERE for .NET. IT was then that I realized that the .NET library is pretty much an UPGRADE of the old C++ "MFC". So anyway... I am now working with a .NET-based 3D engine (Truevision3D), which is basically a front end API for DirectX... it exposes all of the capabilities of DirectX to VB.NET (and C#, and Delphi, and ASP.NET, etc... even VB6!) SO here I am, with a client app written entirely in VB.NET... with an input system, a GUI system that I wrote FOR Truevision3D, a fully functional networking system (using TCP and UDP), that communicates with a server... again, which is written in VB.NET, using an ODBC connector to do the database work, a multi-socket network listener... even a Windows Form on top of it all to control the game server's settings while it's running! And the damn thing is SCREAMING fast! There is one thing missing from it all... AI. That is the ONLY thing I haven't even bothered to do anything with, because my brother (Dave, aka InnocuousFox) is going to be handling that. Here's the problem, though. Dave seems convinced of the same things those above-mentioned "fanboys" all chirped at me... maybe not specifically with game programming as a whole, but specifically with AI. He seems convinced that AI is best done in C++, and that we'd rather deal with the hassles of interop/CLI/COM, than for him to learn a new language and library. Now, he may very well be right here... maybe AI *SHOULD* be done in C++... But I'd like the opinion of some fellow .NET people here, as well as other AI programmers, or just other game developers in general. Am I being anti-C++ here? Is Dave being anti-.NET? Would Dave benefit in other ways from learning .NET? Should Dave ditch his "C++ only" mindset? Am I not realizing the limitations of .NET, or is Dave not realizing its potential and power? Is it really necessary for game developers to know C++ when they're not doing any low level hardware-layer stuff (like you would do in the actual 3D engine)? Hell... is C++ even NECESSARY for non-engine game programming? If given the choice, would YOU pick .NET over C++ for your game development, specifically for things like game LOGIC (not just AI, but game flow and message processing between systems like input to GUI, network to... anywhere?) Discuss please! [Edited by - EagleEye on March 9, 2007 3:33:00 AM]