Before anybody starts making other suggestions or declaring that I "r teh ghey!!!1" for using C#, here's the reasoning behind it: We're a Microsoft house. The boss loves Microsoft tools. All our web development is done with Microsoft Visual Web Designer, our database is Microsoft SQL Server, everybody uses Windows, etc. Doing everything the Microsoft way might not be optimal to all people, but at least it's a consistent standard. If we're sticking with MS languages, we have 3 real choices for programming language: VB, C++ and C#.
VB is out of the question. A few people at work know it and can make reasonable things with it but, simply put, it's not the quality of language that we need for our applications.
The choice really comes down to using C++ or C#, and this is where the argument has erupted. Some of our engineers have started doing development in C++. Others, myself included, have been doing work in C#. When we're talking about Microsoft Visual Studio, both these languages compile down to CLR bytecode and have access to the entire .NET framework. Simply put, anything that you can do in one of these languages can be done in the other using the MS tools, no exceptions. The only difference between these two is syntax, but that hasn't stopped people from getting riled up about the decision! You'd think people's livelihoods were at stake the way they argue back and forth about these two languages.
I prefer C# over C++ for a number of reasons. I've never really been a fan of C++ anyway: It has a lot of muscle and a lot of great ideas but I always felt the syntax was a little messy. This coming from a Perl programmer! Since both languages use .NET, there's no performance difference between the two. I heard the argument today that C++ code could be compiled into native code on a different compiler for a performance win, but that's not even true when you consider that .NET has a decent JIT compiler built in to it. Plus, when you start talking about compiling down into native code you lose all those things in .NET that we currently rely on: Managed memory, safe pointers, and all the .NET libraries. Plus you'd have to support a second toolchain to write, compile, test, and debug all your compile-to-native C++ code.
I've seen all this crap before. I've seen the Perl people and the Python people and the PHP people go at it. I've seen Perl people versus Ruby people. I've seen C/C++ people against Java people. I've seen the Haskell people against everybody. Programming lanuage zealotry isn't a new thing, but it also isn't getting to be any more of a rational way to spend your time. Here are the facts about the situation at the office:
- Doing things in one language makes it easier to share people and resources between projects. All the coders have all the fundamental skills necessary to work on all projects written in that language. Plus, staffing is easier because you only need to find programmers who know that language, not programmers who know many specific ones.
- Using one language requires one tool chain. And when you're buying licenses to use professional IDEs, the amount of money is non-negligible.
- The performance gains of using natively compiled code over virtual-machined bytecode is really negligible. We're talking a 2x-3x speedup for most applications, which isn't going to do more then stall our need to update our hardware if we're so lucky to have a huge amount of traffic volume.
- And even if we can save money by pushing back a new hardware upgrade for a month or two, we are still losing because of the increased cost of development and maintenance.
- I'm the only person in the office who's doing full-time application development, and I'm doing it in C# (and doing it very well, might I add!). All our web developers are working in C#. All our embedded systems people are using C. Adding in a third language is just asking for trouble.