Saturday, March 19, 2005

Q: How do you make butter?

A: You churn.

I feel a bit like a hostage. Allow me to explain.

Presently I am making a pretty good size piece of software for my employer, the LA Weekly. The purpose of the software is to coordinate and report the various production activities that are required to get the paper out on the streets and Web. I am writing the software in .NET using Visual Studio .NET. For all of you that are non CodeHeads, .NET (pronounced, dot net) is Microsoft’s current technology for doing application development for the World Wide Web. Visual Studio .NET is the big ass tool that I use to write the code that runs on the .NET technology and framework. One of the promises that I think that was made to me by the messengers at Microsoft was that the ASP.NET code that I write for .NET using Visual Studio .NET will run properly on any browser that supports the W3C standard for writing web pages.

One feature that my software needs to offer is a way to view a lot of activity information at once and allow the user to respond to the information viewed. In geek parlance we call this view a Report. The Report that I am making is very big Web page that requires scrolling downward through a lot of information on the computer screen. At various points in this very big Report there are buttons that the user clicks to alter the display of the page. Presently when the user clicks a button that you get to by scrolling down in the Web page, when the we page refreshes, it take the user back to the top of the page, NOT to the location where he or she clicked. This is a usability pain in the ass and must be corrected. It is the analogical equivalent of bookmarking a book with a lot of pages, only to find that when you closed the book, someone came around and removed the bookmark. Thus you are left with the labor of thumbing your way through the book to find the place where you left your bookmark. Now imagine doing this about a hundred times a day. I’ll bet that it is only a matter of time before you hide under the table in wait so that when the bookmark removing culprit shows up, you pop out from under the table and beat the bejesus out of the miscreant. Or, you become tired of the whole affair and just throw the book out the window.

If I don’t correct this annoying problem, nobody will use my software. Software that is not used is worthless no matter how feature rich and elegant the software is. Just look at Quattro Pro.

Anyway, I figured that I am not the only person in the world to have this problem and that there must be a solution published some where on the Web.

Good news, there was!

So I read up and made the changes in my .NET code. Sure enough, click a button way the hell down in the web page, and you are brought back to that button when the web page refreshes. I thought I had the problem licked.

Not so. When you program with Visual Studio .NET, when you run the code that you have written using the tool, the code is displayed by default in Microsoft’s web browser Internet Explorer, which is all well and good except for the fact that the Weekly uses a lot of Macintosh computers. The browser that is the standard for the LA Weekly is Firefox. Firefox runs consistently on both Windows and Macintosh OS X computers. So, I always test my code in a Firefox browser before I consider a problem solved.

Well guess what? The page refresh code that I wrote works in the Internet Explorer browser but NOT IN THE FIREFOX BROWSER. (Yes, I am yelling. This is not the first time this has happened.) Thus, the three hours that I invested in implementing the published .NET solution to my problem was a waste of time. (If I were a freelance consultant, not only would it have been a waste of time, it would have been a loss of money. I could never, ever charge a client for my time to produce code that does not work as the client needs it to.)

So what does this have to do with butter?

In my experience programming is not a generic engineering activity where you learn a core technology and that’s it. Programming computers is more like being a translator at the UN rather than a doctor a Cedars Sinai. Unlike medicine, which requires an expert level of knowledge about two models that have not changed in a very long time, there are a lot of languages spoken on the planet. You can’t speak them all. At some point you dedicate yourself to a few. A translator is only as good is his or her proficiency in the language(s) that he or she has chosen to “work”. Fair enough.

Now imagine that you are a translator and the world of language is such that it changes every five years. Not only do the words of the language change, but the actual syntactic mechanics of the language changes as well. One day the language works one way. A few years later it works differently. As a paid translator at the UN, in order to be viable you are required to learn the lingual changes. I would venture to say that eventually your head would hurt.

Now further imagine that the language changed every two years, not every five years and that the language changers published some ideas during the two years as to how the language will change, but without guarantee. You might start to feel anxious and ungrounded.

Now imagine that the mechanics (not just the words mind you) of the language changed every year. I’d wager a reasonable amount of money that your head would just freak out. And, you would not be the only one. At some point all the translators would freak out and you know what? At some point there would be no translators left at the UN. The rate of change would be just too much to handle. Then he UN would become totally ineffective instead of being marginally ineffective.

Now let’s get to the butter.

Some software companies will try to garner competitive advantage by toying with and taking ownership of the mind of the software developer. A company gets a lot of value from a developer learning its product. However, that value is always at risk. Once a developer has mastered your product, he or she is free to learn a competitor’s product and then use it. (Analogically it’s like French and German being competitive.)

How do you prevent a programmer from jumping ship?

You make it so he or she never masters your product. Keep changing how the product works so that the developer is always learning your stuff and not your competitors stuff. It called churning the developer.

For software developer’s it has become a way of life.

At the present time the rate of change in the world of nuts and bolts programming is not so overwhelming that software developers are completely freaked out. That time will probably come. But it’s not here now. Yet, when you sign up to become a programmer, you are signing up to a way of life that requires constant learning and in some case relearning, sometimes at the expense of other things that are important. (Hey, isn't that one of the ways that one defines an alcoholic?)

Acquiring new knowledge while still being productive as a day to day programmer is an arduous task but not impossible. However, most of us have only so much time. What we choose to learn is a significant professional decision and economic investment. We are not dopes. As programmers we’re willing to dedicate ourselves to a technology and do the ever present footwork provided that the technology works to spec and allows us to feed the kids.

But, what if the technology does not work as promised? What then? Do I go back to my boss and say, “Dude, I was told by Microsoft that the code rendered by ASP.NET would run on any browser that supports the W3C standard. It did run as I wanted to on Internet Explorer but not Firefox?”

You know what my boss will say?

“Fuck Microsoft.”

And, after spending eleven months learning the down and dirty of .NET beyond simple data entry on a form and creating a very large body of code in .NET, a technology that I championed because I was promised that the code that I wrote would run in any browser, I am almost willing to agree with him.

Yet Microsoft is but one company in the landscape. Its real claim to fame is that they are the biggest. Believe me Oracle wants our minds and loyalty just as much as Sun, Sybase, IBM, CompuWare and BEA do. If their products happen to work, well so much the better. But I question if the foundation of the desired relationship is based on mutual technological excellence and benefit.

I wonder if these companies understand that the fundamental purpose of a software developer is to create products and provide services that make the planet a better place? Or, are we human currency, where our purpose is to just use tools and technologies while our value is determined according the the per seat license fee each of us represents?


Blogger Andy said...

You just pretty much summed up why I program in C, C++, and Java. The API's may change a bit on the individual platforms for GUI stuff but the languages remain very steady. None of this .Net flavor of the week cr@p. My programs have to run on Sun Solaris, Windows 2K and XP, and Mac(sometimes). Don't let MS hold you hostage switch to systems level languages then you can make money developing on MS platforms and others without being held hostage. It's not so simple as write once run anywhere but it's way easier than having to re-write your code every time MS needs their shares to go up.

5:58 PM  
Anonymous Anonymous said...

After reading your blog entry I read this:

I think these posts go down the same road in some way...


6:10 PM  
Anonymous Anonymous said...

BTW, comments don't show up in RSS Bandit (and maybe other aggregators as well).

6:12 PM  
Anonymous Anonymous said...

Building Web-based apps has become a real mess. ASP.NET 1.1 is not an answer neither will be .NET 2.0. It is just bloated and overcomplicated solution to the simple problem of processing text. I find PHP and ColdFusion much more suitable then ASP.NET with its bizarre and absolutely unnecessary object model.

.NET is a good choice if you need to build old trusty n-tier Win app. Pardon, now it is called "Smart Client" :-)

6:28 PM  
Blogger Ralph Loizzo said...

Well now...

It seems you and I have been experiencing the same predicaments when it comes to Microsoft.

Sorta love/hate relationship.

I wish I had a specific solution for you, instead of a deep connection on your philosophy.

6:29 PM  
Blogger Steve Newson said...

I still think I have the kind of a personality that suits development and wonder if it's something I'll ever go back to in any full-time sense. I write a few SQL SELECT statements these days and occasionally play around with a bit of HTML (like trying to get my blogger template to behave exactly the way I want) but that's it.

And if I did go back could I live with the angst?

8:05 AM  
Anonymous Anonymous said...

The trick here is to use bookmarks if you are not IE5+. I had the exact problem with my project that allowed you to select a rating on the control. What I did is create a user control that ehn an option was picked, the page refreshed to the shortcut.

Elegant and should work in all browsers. Anyway, my story on this same problem.

4:28 PM  
Anonymous Anonymous said...

Or, of course, you could embed some Javascript into the page (using a web control or page inheritance) that will emulate SmartNavigation. I've done that at the last several places I've been...much easier and still works on Firefox.


6:57 AM  
Anonymous Anonymous said...

This sounds a bit like Joel Spolsky on "fire and maneuver", though there he is talking about vendor v. vendor, not vendor v. developer.

Oracle is also very good at the moving target. I'm about 3 versions back on JDeveloper, and there have been quite a few others we never learned or unlearned.

11:37 AM  
Anonymous Anonymous said...

“We cannot live for ourselves alone. Our lives are connected by a thousand invisible threads, and along these sympathetic fibers, our actions run as causes and return to us as results.”
- Herman Melville

RSS is the way of the Future...
rss tool type rss feed

9:49 PM  

Post a Comment

<< Home