Been meaning to blog about this for a while, but I just haven’t gotten around to it. I mentioned my new job a while back and gave you updates about the resulting move throughout that process, but I never really mentioned much about the job itself.
I work (as a contractor) for a company called ManTech. I’m currently working on a number of projects, all of which either directly interface with or are satellites of our main project, which consists of computer based training for the Navy Reserve. We’ve used a standard called SCORM to develop a Web-based learning management system. We then take a series of computerized training courses–some developed by a partner company and converted by us to a Web format, and some developed in-house–and provide the necessary back-end to maintain the learner’s training history and progress. My first project was actually to build a content management system to manage photographs and other content that support our artists while they generate graphics for these lessons. I’ve now moved more deeply into some of the other projects directly interfacing with the LMS, and I’ve been tapped to become our resident expert on CORDRA.
The real meat of where I’m going with this, however, is that I’ve had to learn a whole new programming language. I’ve worked with a number of languages over the years, most notably Perl, Java, and SQL. The complete list is actually quite lengthy, but many languages I “know” (like C/C++) I haven’t touched since college or I’ve taught myself to use for my personal amusement and have little to no professional experience with. Perl fit into the latter category until my last contract assignment; technically, so does Java, as I’ve mostly used it for personal projects. (I did do some Java work on the early GPF site though, but mostly behind the scenes.) Unfortunately, a good chunk of my professional work since college was tied up in report writing using technologies such as BusinessObjects and FOCUS, a realm of the IT industry I’m thankfully starting to escape from. (I graduated from college expecting to program, not build reports with pre-packaged tools.)
When I applied for this job, I knew they were looking for someone with Java (or some other object-oriented programming) experience. What surprised me was that while they seemed to be looking specifically for someone with a little Java know-how, the real language they were planning to use was C# .NET.
Now anyone who has followed GPF long enough should know by now that I’m not a big fan of Microsoft. Yes, I use their products (one almost has to if they want to function in the computer world), but their history and business practices speak volumes about their corporate ethics. I’ve dabbled a little in Windows programming over the years; I’ve toyed a little with Visual Basic and took a course in Visual C++ back in college but never did much with that beyond a little playing with fractals. In general, though, I prefer to focus on technologies with strong cross-platform capabilities, mostly because I feel that users should not be discriminated against due to their personal choice or corporate mandate of operating system. This, among many other factors, often makes me lean toward open source.
The Reserve, however, like many government and corporate technology departments has mandated a “standard” platform for use within their organization. This platform, as you might guess, is largely based on Microsoft technologies. Thus, almost all of ManTech’s development work (at least on this family of projects) is done in Visual Studio 2005. Many of our projects are Web-based, so we do a lot of ASP .NET work with C# as the chosen language. (.NET uses a common language infrastructure so it doesn’t matter what language you actually use to build your application in. It all compiles to the same bytecode, which the runtime then executes.)
Now I had heard a lot of comparisons between Microsoft’s .NET and Sun‘s Java platform; indeed, a Google search turns up a ton of them (over four million results at this writing). I remember when Microsoft first announced .NET, and recall the buzz that it would destroy Java much like how Internet Explorer decimated Netscape in the browser wars of the 1990s. (Personally, I don’t see that happening, especially since .NET is only available on Windows, but projects like Mono could help bring .NET to other platforms while biting into markets that Java currently has dominion over.) So I was quite curious to see what .NET could do, and whether or not I might find myself on the other side of the fence once this was all over.
Well, I’m not over–or even on–the fence, but I’ve learned to appreciate the various tints of green on either side. My previous experience with Java made jumping into C# and .NET relatively easy, and I found myself writing real, useful code quicker than I expected. There are even some things that are much easier to do in C# that they are in Java, like designing the GUI. (This, though, is more a function of the IDE than the language, and is one place where Microsoft has always shined. Visual Studio can sure make a programmer lazy, which isn’t necessarily a bad thing. Then again, I’m also trying out Eclipse for Java work, so that might swing that factor into balance.)
My experiences with C# these past few months haven’t killed off my interest in Java, but it did prompt me to download Visual C# Express to do some off-the-clock experimentation. It even reinvigorated one of my old side projects; there’s a chance that Mandelbrot Madness! may get a new .NET 2.0 Windows version that is roughly comparable to the much more up-to-date Java version. I’m curious to see where .NET is going to eventually end up. If I can keep up with it, I’ll try and post more thoughts on these technologies when I can.
In school I was in the “MS-is-bad-linux-rules” club. I was on the sparc g++’ing away as much c++ code as I could write. Then I started learning Visual Basic to create GUI programs that could actually help people who are not computer literate or c++ and linux-environment-variable-fixing geeks.
So I realized that anything one could do in VC++ or C++, one could do faster and “almost” better in VB. Of course, it won’t buy your brownie points with the geek culture but programming is about making things simpler not harder. 🙂 Of course, the above statement exclude processor intensive code. Mostly server side coding which is heavy on the loops and number of sockets and such would be faster in C++. For your average vanilla user applications, using file I/O and database dips, and regular stuff VB is more than adequate and in fact the best choice.
Moving to the corporate culture, I realized that Java cross-platform mantra broke down pretty fast since most of the corporate products I saw had to have third party plug-ins for Java to do this or that. This really broke it since most third party controls were geared towards your MS Windows user. Plus configuring 10,000 environment variables and %JAVA_HOMES% all day long is hardly programming or having fun. Add to that the fact most of what Sun has done in the past 5-7 years has been 1) b**ching about MS and 2) break all backward and compatibility between JREs. Try telling a customer who paid $100,000 for a piece of software that only runs on JRE1.3 that they have to move to JRE1.5 because your app uses some new features. We’ve had real corporate clients who can’t move because sometimes two JRE won’t co-exists without breaking a ton of stuff.
Anyhoo, I did quite a lot of Delphi 5 – 7 (which is Object Pascal) and liked it. Also been doing VB for a good while. Now moving to the C# world, I see things that were Java influenced and they’re really annoying. Namespace abuse is definitely one of those things.
I’ve also done some Java using Eclipse and yes, it does makes things so much easier. I mean talk about right-clicking to make your JAR files.
Anyhoo, I much prefer MS products now. Someone bought the product. They paid for support. When you implement a solution and the MS side of things break, the customer can call a support number and it’s not your issue to lose sleep over. If it’s open source and it breaks and no one’s seen it or fixed it, then it’s your problem. Especially, if most of the open source your try to use is only used by a niche market. Like compiling some open source SIP SoftPBX just to realize 5 weeks before production date that it doesn’t support some feature yet the way you expected it or the way the RFC called for.
Besides, none of us is coding in assembly (like Yoshi :)) anymore so really are any of us any more geeky than the other?
Just some thoughts, I felt like I’d share from the other side of the fence you mentioned. 🙂
I’m still open minded to using Java and non-MS stuff and I do use it for work. Just sharing personal preferences.