Welcome to the Programming Tournament National Championship! For the sake of drama, I was going to make a Tournament Highlights blog first, but I figured that everyone was probably so overly excited that putting off the decision any longer would be inhumane. For anyone coming to the party late, I have spent the last 6 months (or 3 half-lives of Antimony Sb-124) reviewing the positives and negatives of different programming languages that I’ve worked with, pitting them head to head in a NCAA style tournament.
We’ve had a few upsets along the way, but for the most part, the favorites proved why they earned the high seeds. After a last minute video review overturned what looked initially like a C++ victory in the semi-finals, this inaugural championship is between Microsoft’s C# .Net and review beneficiary, Sun Microsystems’ / Oracle / Open-Source-Independent, Java.
Amazingly, put perhaps not surprisingly, the architectures and syntax of these 2 platforms is remarkably similar. For a complete look at the similarities, there are a number of great sites exposed by a simple Google search. Some of these differences are significant, while some are cosmetic, but diving into all of them is well beyond the scope of a simple blog post.
Now, admittedly, I have done much more work on C# projects than I have with Java, and my Java experience is strictly from what I’ve done working with Android Development and anything I could learn from the Java Unleashed book I bought back in 1997 (you know, when I was in seventh grade and they had to give you a CD-ROM with the SDK and examples, since AOL dialup was still too slow to download anything real from the new-fangled “Internet” thing.)
Jumping from C# into Java, I’ve been perfectly able to make basic Android apps, and all else being equal, I honestly would lean towards Java for the simple reason that it is inherently cross-platform. Like other cross-platform languages, this means that code I write on my Windows computer can be compiled and run on a Mac without worry. This advantage means that we don’t have to build the same application 3 times to run on Windows, Mac, and Linux devices, a huge business case for commercial software companies. The Java VM mechanism used to achieve this is pretty neat too, even if it does mean that we are constantly getting barraged by Java update requests at startup. C# is making progress here with the Mono Project, but there is still a long way to go to get the same foothold that Java has.
So the winner is Java, right? Well, not so fast. C# gets a chance for a rebuttal, and rebut it does. By most accounts, C# is slightly ahead of Java when it comes to features, although both, it seems, have been doing a flip-flop where one adds a useful feature and then the other copies it. The biggest area where I think C# stands out is the integrated usage and implementation of types and classes for each. It might just be because it’s what I’m used to, but the system in C# makes a lot more sense to me than does Java.
For example, Java lacks static classes, doesn’t have a tool like LINQ, won’t allow named and optional method inputs, can’t pass inputs as references, doesn’t integrate arrays and collections, and has only watered down support for Generics. Project file management also seems better in C#, with conditional compilation flags and a level of abstraction between assemblies and files and between files and classes. Now, I know that each of these are subjective features, and you can probably even argue that some features are intentionally left out of Java, but I personally have become accustomed to the C# programming style and think that it makes sense.
The bottom line is that both C# and Java are excellent, high level languages, with many similarities and a few individual strong points. I think that environment has a strong impact on which you prefer, but for me, being in a strongly Microsoft-centric workplace, C# is my go to language. Therefore, strongly weighing my own opinion of my own opinion, in a wild game, with a controversial play, at the very last second, on a strongly contested Hail Mary, C# wins in what will safely go down as an Instant Classic.
Semi Final Flashback
Relive the Excitement