Way back when I first tried Windows XP, I actually sorta liked the default “skin” that it comes preloaded with. I actually remarked at the time how it “felt” good, and not like it was for idiots or something.

Yeah, that didn’t last. I quickly grew tired of the bright green/blue contrast. I hated that the close/maximize/minimize icons were huge. And outside of “neato” apps, I don’t like the rounded edges of the windows. I’ve been on servers running Windows Server 2003 where the default start menu and its recently used programs list are left on by default. Yeah, I’ve never seen how that’s been seen as more useful than the Start menu we’ve had since Windows 95 or so.

So whenever I do an install of XP, be it for my personal machine or work or whatever, the first things I do, always, are to set it back to the “Windows Classic” skin and the “Classic” Start menu. I guess this makes me the XP equivalent of Dana Carvey’s “grumpy old man” character from SNL. “In my day we didn’t have these fancy windows, we had to know what to click on and we liked it!”

Now really, this is just a personal preference sort of thing but it does make me wonder – is it really just that or is there something else going on here? Do I just like things to be more complicated?

I make my living doing development and a lot of it is using .NET. Microsoft has two main programming languages – C# and VB.NET. VB.NET is their .NET version of VB and C# is more like a C/C++/Java type language. So for example – here’s a code sample in C#:

string s;

for (int i = 0; i < 10; i++)
    s += “x”;

And here’s the same code in VB.NET

Dim i As Integer
Dim s As String

For i = 1 To 10
    s += “x”

So as you can see, the two languages are syntactically very similar (especially in this dead-simple example).

So what’s the difference? Well the C# code follows the conventions put forth by C/C++/Java – semicolons at the end of the line for termination, curly brackets to denote groups of code to be looped through.

Big deal right? Well, the thing is VB people hate that. They see the semicolons as annoying. They see the brackets as redundant. They see C# coding as slow. And the VB.NET IDE enforces this mentality. VB.NET is not case sensitive but it doesn’t matter because the IDE goes through and fixes your code for you – if you had typed “dim” on that first line, it would have changed it to “Dim” for you. Same for all the other keywords. And when you put in that “For” it puts in the “Next” for you. The C# IDE, even though it’s the same binary, doesn’t do this for you (by default anyway, I’ve never looked for it).

So at first blush, VB.NET is the more productive language right? I mean, they do all this stuff for you right? Well here’s where my complicated mentality kicks in – I think VB.NET is annoying and slows you down.

You see those declarations of “i” and “s”? Look at the C# version – you declare s with eight characters. It takes fifteen with VB.NET. And what the hell is “Dim” anyway? It means “Dimension”. Err, what? I don’t want to “Dimension” anything. I just want a fucking string. Oh, and I also need an integer for the loop. I just need it for the loop. Afterwards I don’t want or need it anymore. Not in VB.NET – you have to “Dimension” a integer. You can’t define it inline like you do with C#/. Granted, after this loop, “i” still exists but at least we didn’t have to devote an entire line of code to declaring this just-used-once variable. And as redundant as those brackets are, they are less typing than having to put “Next” there. Plus they make the code, in my opinion, easier to read.

But a lot of people don’t agree with me. They say that the VB.NET code is easier to read. They see the “For” and “Next” (along with the VB.NET “If” and “End If”) as easier to read. No wondering what that closing bracket is closing, you can see the end of the conditional block using natural language. They like how the VB.NET IDE handles the case sensitivity for you (i.e., you type “string” in all lowercase and VB.NET’s IDE changes it to “String” for you). They like how VB.NET doesn’t let you go one second without telling you where you’ve screwed up (C# doesn’t catch certian types of errors until you compile)

So again, maybe I just like things to be more complicated.

Thing is, my belief is that having an IDE do too much makes you actually slower and lazier. Knowing you can get away with bad practices to be saved by the IDE is bad form. Being swift enough to know the syntax and putting your own semicolons at the ends of lines is actually quicker than writing a bunch of code in a malformed method in the hopes of purposely letting the IDE do the work for you.

But then again I use Intellisense and I let the IDE do the indenting for me, plus I like the syntax highlighting so I obviously don’t take this “more complicated” bit to its extreme. Like those crazy fuckers who use vi. I’m sure they’re the fastest text editing peoples known to man but what a way to live.

A cohort of mine shares the “C# is needlessly complicated” mentality and we often trade jabs with regards to “language snobbery” and so forth (I won’t leave C# for VB.NET without a fight, even converting VB.NET to C# by hand to avoid it sometimes, and somehow I’m a snob – even though my cohort does the same thing in reverse). His take is that the “hand-holding” VB.NET does for you is just fine and dandy and makes him more productive, despite the extra typing (in his defense, it does seem like for the extra typing you have to do while coding, the VB.NET IDE does then pitch in and do a lot for you).

And he thought that right up until .NET 2.0 came out.

You see, .NET 2.0 is actually a fairly significant overhaul. In .NET 1.1, an ASP.NET project would compile down to a single DLL binary file, and to deploy it you just copy that file along witht he aspx pages to the server. .NET 2.0 (and more specifically Visual Studio 2005) doesn’t do this. It actually runs the site off of a cache of the DLL in the temporary files folder. If you want the DLL to deploy, you actually have to “publish” your site. And by default, there’s a DLL file for every single page on the site – you have to configure it differently if you want to go back to a single DLL file.

Supposedly this was because people found the old way confusing. People would deploy their source code files by mistake, which is pretty much a bad idea. But to me it’s counter-intuitive. I would (and still do) use NANT scripts to come up with a site that can be deployed from source control. Yes, this relies on an external 3rd party program but it affords me more control.

Also with ASP.NET 2.0, project files are out. No more central csproj or vbproj file. Again, this is supposedly to make it easier for developers – more specifically, in old-style ASP there was no project file (mainly because there wasn’t neccessarily an IDE) – if the page was in the directory then it was on the site. Old-style ASP developers found the concept of a project file too confusing. But this also makes certian tasks (mostly in the era of compilation) more complicated. Something of a catch-22.

In Visual Studio .NET 2003 you decided to pick a project to create and then had to pick whether or not you were making a Windows Forms application, an ASP.NET application, etc. In Visual Studio 2005 you pick “Project” or “Web Site” – so if you create a “Project” you don’t get to pick an ASP.NET project. Apparently people found that too confusing.

So again, maybe I just like things to be more complicated.

And he hell of it is – my friend who likes VB.NET because it’s less complicated than C# hates the changes in VS2005 and .NET 2.0 to make it “less complicated”. I’m not sure if it’s because he and I are just used to the way it worked before and worked through the wrinkles and don’t want to have to change (somewhat akin to those people who decided that Windows 98 is their last OS and they haven’t moved to XP and won’t) or if it’s because a number of the changes that make .NET 2.0 and VS2005 “less” complicated actually make it *more* complicated because now everything you know has suddenly changed.

Of course maybe it’s also that I want to be in control, and I can’t stand not being in control. Well, when it comes to tech anyway.

Ever since a friend turned me on to PC building about seven years ago, I’ve built my own systems. I want control of what’s in the system and more importantly, what’s on them. I don’t want extraneous software. I don’t want anything on my system that I didn’t put there myself. I won’t install anything that comes with baggage.

I’m not the only one that thinks this way – hardcore gamers tend to be a rather picky lot. A company called Starforce makes an anti-piracy solution for games, also called Starforce. A Starforce game relies on a hidden device driver to be installed on your system when you install or run the game. The device driver is at Ring 0, so it could do whatver it wants. When you uninstall the game, the driver stays on. Some users of Starforce games reported that it caused random crashing and BSOD when doing normal things like putting an audio CD in the CD-ROM drive.

Gamers started to avoid purchasing Starforce-enabled games. Myself included. Starforce was indeed effective – since the executable is encrypted it cannot be cracked, but the bad press was enough to make most publishers ditch using it. The depressed sales due to boycotts were enough to negate the added sales due to lack of piracy.

Valve required that a program called Steam be installed in order to run or play Half-Life 2. Steam does several things – for one, it ensures that you’re running the latest version of the game, and updates the game if there’s a new version. It also gives Valve a method of banning online cheaters. Plus you can use it to buy games – I bought SiN Episodes: Emergence without visiting the store. And if my hard drive crashed tommorow, I could download the small Steam client, log in with my account, and have Steam download and install the latest version of all the games I own through it, without needing the install media.

But Steam has its problems. For starters, it’s another program running. You don’t really get to control the fact that it’s there – it’s required. It’s not like when a game comes with GameSpy Arcade and you say “no thanks I don’t want that” – you don’t get a choice. Steam also requires an Internet connection in order to create an account and associate your purchase with your account. It’s a reasonable requirement – it’s not like Internet access is scarce – but really if you were only going to play the single player game of Half-Life 2 you shouldn’t have to connect to the Internet. Steam connects to the Internet every time you play, to check for updates. If it finds one it downloads and installs it – and you’re not allowed to play the game until it finishes. The only solution to that would be to choke off Internet access to the Steam client (via a firewall or NIC disabling) and let it give up every single time. Plus ultimately Steam associates your CD Key with your account permanently. You can’t just take your Half-Life 2 discs and CD key and sell it to someone else. That copy is now permanently associated with your account. They have effectively used it to negate the Right of First Sale.

Personally, I don’t think the Steam thing is such a big deal – I don’t cheat, I like having things up to date, and I never sell games. And most gamers agree. But there is still a small minority who loathe Steam to the point where they refuse to play Half-Life 2 or any other game that uses it, period. I have to admire these people – they’re sticking to their guns. They’re sort of like the lunatic Linux fringe who think that being cross-platform is more important than sticking with Windows development and only getting 90% of the market (they’re small but in their favorite places they’re quite vocal).

But ultimately besides control (they don’t want any more apps on their systems than neccessary) I think the disdain over Steam comes back to liking things complicated – sure, Steam makes some things less complicated but others more complicated (now you have to have an account, Internet access, etc.)

It’s my understanding that acceptance of .NET 2.0 and VS2005 hasn’t been as quick or as swift as Microsoft would have hoped – developers are now saying they’re more productive in VS2003 and .NET 1.1 than they are in .NET 2.0. I think that’s part of the reason. Ironic then that VS2003 and .NET 1.1, which are more complicated than the new stuff are also what allow developers to be more productive. I think that part of that “Ready to Launch” event was not so much because MS wants to give away free software, but more because that tactic at least got it into the hands of developers – the ones they’re still trying to convince to use it.

So maybe I’m not the only one who likes things to be more complicated.