Sunday, March 11, 2007

It's Time to Break Up, But I Don't Know How

For over a year now, I've listened to other developers talk about how developing in Ruby, and sometimes Python, makes them "happy". I have most often brushed this off as evangelism. I like what I see in Ruby, but I just haven't been able to make a strong enough argument as to why it would possibly make me "happier" as a developer than I can be now. I think that's changing.

I have been developing in Windows technologies for 10+ years. In the early years, I was extremely content because every struggle resulted in an influx of knowledge. Lately, I think any happiness I experience as a .NET programmer comes from those few moments where I actually accomplish something easily. That is where I feel like there might be a problem.

It struck me this evening. I tried to write the most basic blog possible in .NET. Each entry would consist of a date, a title, a body and an image. Last week, when the idea took root, I decided to diagram out on paper what it would take to get the most basic list of entries onto the screen. It barely filled a 6x4 piece of paper.

Given the applications that I develop at work, with their dozens of assemblies, inter-mixed languages, web services, and complex deployment steps, I just wanted something simple... to make me happy. My goal was to accomplish as much as possible with as little code as possible.

I created three tables in the database - two entity tables and one relationship table. I created one stored procedure to access the data from the tables. I created a website project with only one page. I created two business class files - a business entity class and a business service class. Both went in the App_Code directory, not in an external DLL. I used the Enterprise Library Data block to simplify the data access. I even broke a personal, cardinal rule - I used the Web Forms Designer. I bound a repeater to the strongly-typed business entities, which came from the business service, which got its data from the database. In a matter of an hour, I had my little blog-like application showing up perfectly in my debug environment. It was working. It was clean. I was happy.

Then I tried to deploy my website to my hosting provider. Three hours later, I could not get my application working. It may have been the hosting provider, it may have been my code, but ultimately, I gave up before I could even identify who was to blame.

There was literally nothing in my little application that warranted the amount of pain that I had to go through just trying to identify the problem (a SecurityException dealing with partially trusted callers). I reluctantly made some adjustments by precompiling the website, strongly-signing it, and then deploying it. Still no luck. After scouring Google and trying every little solution that was suggested, I still could not get it to work.

I finally gave up because I realized that I was too comfortable with my mindset at this point. I knew every angle that I would need to check just to zero on where the problem is occurring. It clicked in my brain that I must go through mental checklists like this about 2-3 times a day when at work. Rather than demanding sharper tools, I have simply forced myself to be a better hunter, at the expense of my health and happiness.

The weight of the tools - tools such as Visual Studio and Team Foundation Server - is too great. The languages themselves are two constrained. Many of the better application frameworks for .NET have to dance around just to achieve their goals. Intellisense is cool, but it makes it too easy to use counter-intuitive code. Fundamentally, being a .NET developer means you are bound to these things. You react to built-in functionality rather than interact with it.

I want to be done with all of it. No more heavy-handed user interfaces. No more complex application frameworks. No more weird "by-design" functionality that is missing documentation. I just want to open a text editor, code what I need to code, and then run it. If I need to debug it, I just want to run the code through a debugger. If I want to test it, I want to run it through a test runner. I want the code and everything it comes in contact with to be light and transparent. I'm pretty sure I will never reach this goal with Microsoft's products.

Hopefully in a week or so, I will finally have enough cash saved up to go buy a Macbook Pro. I don't even think I'm going to install Windows on a Parallels instance. I want a fresh start and I think I'm going to really concentrate on Ruby. Many very smart, clever human beings look at Ruby as if its a kind of zen religion. I'm definitely in need of a spiritual cleansing and a new direction.

No comments: