Saturday, May 8, 2010

Are desktop applications dead (yet)?

I've been reading a lot of blogs recently and am feeling that I've been missing out on some important trends in the software industry. For as long as I have been interested in programming I have focused on learning and applying new skills to solve specific problems in the areas that interested me most, but haven't really spent much time paying attention to what the rest of the industry has been up to.

Some changes have been impossible to miss. Unless you've literally (yes, literally) had your head in the sand you've undoubtedly noticed the rise of the smart phone. Apple's iPhone and Google's Android platforms have captured the attention of developers and, more importantly, consumers. Prior to the release and popularity of these platforms I briefly investigated what effort would be required to write a game for a mobile device and was utterly frustrated by the multitude of incompatible platforms and devices, and the generally closed-to-outsiders attitude of the carriers.  I guess they didn't understand how unsatisfying it was for consumers to be straightjacketed into the overpriced and limited selection of proprietary applications they each made available, while Apple and Google understood the value of a healthy developer ecosystem and have made quick inroads in a very short period of time as a result.

Unrelated, but around the same time, a couple frameworks were also released: Adobe's AIR and Microsoft's Silverlight. I completely ignored them when they were released because I did not see what purpose they served.  As a Java developer I felt comfortable in my ignorance because I couldn't imagine how Adobe or Microsoft would be able to get these new frameworks installed on enough computers to ever make them as widely available -- and, as a result, worth developing for -- as Windows, OSX, *NIX, or Java.  How naive was I?

I disliked Adobe's Flash because in its infancy it was generally used to create unusable websites.  It was very rare to find a Flash-based site that offered the same level of utility as a regular, vanilla HTML site.  It was frequently misused, but occasionally I'd stumble upon a creative individual's website and could appreciate that the technology did offer some capabilities which HTML and Javascript could not match.  But that seemed to be a niche that would not have any impact on me, since I generally preferred back-end development over creating user interfaces.  I viewed the WWW as a place to exchange data rather than as a place to use programs.  The disappointing life of Java Applets seemed to be proof that software should rightfully remain on the desktop.

I grudgingly accepted Flash's unexpected utility and dominance as a capable video player, but with the exception of large bricks-and-mortar corporations' websites it seemed like Flash was effectively limited to the domain of web cartoons and games.

An unexpected blow to Flash came from the least expected of sources: Javascript.  What previously ranked at the top of my list as least liked things about the WWW, Javascript miraculously rose from the dead on the back of AJAX and went on to become a viable programming language for web development due to the creation of robust cross-browser frameworks.  Combined with the browser DOM and CSS, Javascript was able to effectively do much of what Flash was being used for in many websites.

More recently, the evolution of HTML provides for additional built-in browser capabilities that make some people wonder if the end is indeed here for Flash.  I don't want to involve myself in that debate, but I speculate that even if HTML5 supplants Flash it will still be a slow death based on the amount of time it takes for all popular browsers to support new any standards reliably.

So when AIR was released, I was left wondering how Adobe possibly could have justified the expense in creating such a pointless technology.  Ditto for Silverlight; the only way I rationalized its existence was by assuming it was another "me too" from Microsoft not wanting to take the [remote] chance of missing out on the next big thing.

When I recently started thinking about writing a desktop application I had reason to pause.  During my lifetime as a computer user I've mostly associated software with the desktop, but I was shocked when I realized that I really don't use as many desktop applications as I imagined.  I live in FireFox, but beyond the occasional need to boot up OpenOffice I really don't use many full-fledged desktop applications.  There are an array of other tools I use during software development, such as NetBeans, Putty, Cygwin, TortoiseSVN and Notepad++, but when I'm not writing code I get by with very little.

I was further shocked when I contemplated how many Java desktop applications I've ever [to my knowledge] used.  Outside of Eclipse, JDeveloper, a handful of other programming IDEs, and the occasional Swing application I wrote for myself, I don't think I can name another desktop application I've ever used that was written in Java.  Now I know there are some out there, but it's definitely not as many as I obliviously assumed there were before I started looking.

As I looked around I found that most people seem to have written off Java when it comes to developing commercial desktop applications.  Some people still say it's too slow, others say Swing is too ugly, and the rest complain about a variety of other rough edges that Java's age has unfortunately failed to weather away.  I see a lot of C/C++ native applications and some healthy C#/.NET development for Windows.  What shocked me most was the discovery of several successful applications written in Adobe's AIR.  The poster-child of the Micro-ISV world seems to be a small company named Balsamiq, which has a wildly successful AIR application called Mockups.  Another notable application written in AIR is TweetDeck.

When I look at some of these AIR applications I am thoroughly impressed.  While Java may (for now) have a larger installation base, AIR applications are much less frustrating to deal with.  Installing an AIR application is surprisingly... easy.  Adobe has leveraged the ubiquity of Flash to not only push AIR out to the masses, but to enable the seamless and user-friendly installation of applications written in AIR.  I'm starting to feel now that AIR isn't the pointless framework I first thought it was.  It's not a stab in the dark by Adobe after all; instead, it's what, and where, Flash should have been in the first place.

In the past I at times fantasized about writing my own web browser replacement.  But instead of writing an HTML-parsing, W3 standards-compliant, ACID test-passing browser, I'd create something entirely different that felt less page-oriented and stateless, and more like a... desktop application.  I realize now that this is exactly what Adobe and Microsoft are attempting to do.

It seems to me that a large number of casual software users' needs are and will continue to be met by webmail and social networking sites like Facebook, with lightweight frameworks like AIR and Silverlight either acting as browser replacement, or as a stopgap while we wait for our browsers to evolve enough to meet the needs of our dumb terminal desktops.