Write Once, Debug Everywhere
Wednesday, August 13th, 2008 by Enrico
Wow. It has been a while since I’ve written here.
I’ve been busy with an identity management project which is transitioning from development to testing. For this transition, I needed to deploy my work to a test environment which more closely matches what the client is running. Now, this is a standard Java web application with a database repository, so one might figure that this would be a smooth transition. It wasn’t quite that smooth. There were quite a few things that worked on my development machine but didn’t work in the test environment, which often left me puzzled.
This is one of the things I find most frustrating about being a web and Java developer. In both web and Java, the advertised ideal is “write once, run everywhere,” but that ultimately becomes “write once, debug everywhere.” Having to deal with idiosyncrasies of different OS’s, different software (application servers, databases, etc.), and different network configurations is sometimes an unwelcome distraction from delivering the core functionality of the solution.
This is particularly bad for CSS and client-side Javascript. Internet Explorer, Firefox, Opera, and Safari are all web browsers that one must take into account when designing the look and feel of websites but they all cannot quite agree on their implementation of the CSS specification or the Document Object Model. Sometimes I’ve even run into interoperability problems where it seems the only solution is to target particular browsers with particular code by using some very ugly hacks. So guys, what happened to “write once, view everywhere?” =P
But no standard is perfect and even if we could have a perfect standard, a perfect implementation of it would be even more unlikely. So integration and interoperability problems seem to be a fact of life for software developers. The feeling of accomplishment when everything finally works together seems to offset the frustration enough that I’m happy to keep doing this work. I think this might be a fundamental requirement for a software developer. =)



