Wednesday, March 05, 2008

Is It The Beginning Of The End Of The Web As We Know It?

A few weeks ago, I "completed" the creation of a small web site for my wife's photography business. (The word "completed" is in quotes because, like most web sites, it'll continue to grow and evolve as time passes.) I wrote the HTML, CSS, and JavaScript by hand. (I was warned about the terrible code generated by WYSIWYG web tools.)

The experience was terrible.

Admittedly, I had written some HTML, CSS, and JavaScript code before, so the technologies weren't completely new to me. And I've been doing professional software development for almost 20 years, using technologies like C, C++, and Java.

Still, the experience was terrible.

Getting the HTML and CSS to render correctly in IE6, IE7, and Firefox was annoying, to say the least. Fortunately, my friend Rick was nice enough to briefly test drive the site in Safari and Opera. (Thanks, Rick!) Sadly, some browsers will probably remain untested forever (such as Konquerer).

It all seems to render and work correctly -- for now -- but even minor changes would require another round of tests in a bunch of web browsers. And soon, it may require testing in yet another web browser: IE8.

It shouldn't be this hard. To be blunt, the state of the web -- from a developer perspective -- is that it's completely broken. Yes, you can do things -- amazing things -- but the effort required is far and above what it should be.

It's my opinion that HTML and CSS are just plain bad technologies. They grew far beyond their original design goals and inevitably had to be hacked to do more complex and interesting things. JavaScript isn't too bad, but since there's no easy way to thoroughly test it without actually sitting there and testing every possible code path, the possibility of run-time failures are always looming. (OK, there are tools to mitigate this risk, but they're complex to setup and use themselves. A workable solution for a big corporation, but not so ideal for smaller operations.)

HTML 5 will only muddy the waters further. Sure, it'll have cool new features, but as a result, it'll make HTML even more complex, and then web developers need to start deciding how and when it's safe to use those features. Wait until IE version N supports it? Wait until IE version N supports it and has > 50% market share? Tell your users they must use a particular browser? Do some browser capability sniffing, and have a < HTML 5 path and a >= HTML 5 path?

Bah!

I'm starting to wonder if this is the beginning of the end of the web as we know it. Technologies like Flash, which (theoretically) work the same on every browser, are appealing more and more, because your code is much more likely to work the same, whether it's Flash-on-IE6, Flash-on-IE7, Flash-on-Firefox, etc. (Right about now you're probably thinking about how much you hate Flash ads. Yes, they're horrible and obnoxious, but that doesn't change the fact that Flash is a great technology for creating a rich, interactive web site.)

Sure, some people (a surprisingly small percentage, actually) don't have Flash installed, but losing those few users might just be worth the substantial time saved in development. Besides the easier development and portability angle, you also get better performance (have you seen how slow some of those "rich widgets" JavaScript libraries run, even on blazing fast, modern PCs?), a compiler (which will catch many bugs at compile-time instead of waiting for your users to discover them at run-time), and a huge standard library which include things like rich widgets, persistent socket connections, animation, etc.

Perhaps best of all, Flash is well supported by the Free Software community as well. You can download and use free Flash IDEs and compilers, or you can use Adobe's excellent commercial tools.

Google is trying to sidestep the issue using Google Web Toolkit. GWT is a neat technology that "compiles" Java code to HTML, CSS, and JavaScript for you, helping you avoid all sorts of trouble. A lot of Google's nice web products are written using GWT. (One of the big caveats here is that you really need Java on the server-side too, in order to make GWT shine, but you can do some impressive client-side only things as well. Still, it ends up being a big problem for the many web sites that use commercial shared hosting.)

Even Microsoft seems to be smelling the stink of death on pure HTML, CSS, and JavaScript. They recently released a Flash competitor, Silverlight, which will apparently be bundled into IE8 (if you can't beat 'em fair and square, just bundle it!). The Open Source community has responded with Moonlight, which aims to be a Silverlight clone that'll run on free operating systems such as Linux.

Flash. Google Web Toolkit. Silverlight. Moonlight.

The existence of these products by large, prominent companies should tell us something: They're aware of the weaknesses and limitations of traditional web technologies, and are starting to push alternative technologies with success. Developers win, users win, and the evolution of the web takes a nice leap forward.

Are we looking at the beginning of the end of the web as we know it? If so, I couldn't be happier about it.