The lost art of user interface programming.
There's been some interesting discussion about how user interface programming is hard. See Sarah Allen , Eric Burke and HMK for a start. This is an important topic, and it points to an underlying problem for the industry that UI programming has become something of a lost art and a disappearing skill set.
Way back when, in the late '80s and early '90s, user interface programming was it. If you were working in software then, and you were doing interesting, innovative work, you were almost certainly working with user interfaces and object-oriented programming the two went hand-in-hand. The industry was focused on making computing useful, accessible, and mainstream, and that required attention to the human-computer interface.
A lot of thought and creativity went into creating graphical user interfaces and frameworks; and some enormously influential products came out of these efforts &mdash the Macintosh, PageMaker and Photoshop, Excel and Word, and Windows itself. During this time, the desktop UI because truly useable. The work involved was complex; a polished, feature-rich desktop application might have as much as 70% of its code focused on interaction and display. Detailed interactions that we take for granted &mdash start using, say, Excel and look closely at what it does as your work with it &mdash are amazingly complex and yet intuitive. The machinery behind something as seemingly simple as cell editing is really hard work, and it takes the attention not only of designers but of committed UI programmers.
Then came the Web. UI programming quickly lost momentum as developers migrated to the Web. UI development for the Web shares more with desktop publishing (page layout with fixed elements, with a focus on information design rather than interactivity). In the process, a new generation of engineers came to see the UI as trivial, not worth of their attention. Serious developers gravitated toward server development, and now a whole generation of developers have virtually no training in the discipline of UI programming. Design and development diverged, to the point that very few developers understand design, and very few designers understand development. Advanced UI development now gets done at only a handful of companies (Microsoft, Apple, Intuit, Adobe, Macromedia…) while for the rest of the world, the discipline has been boiled down to a tiny, seemingly unimportant piece of the “enterprise software stack” with its J2EE, EJBs, Struts, and the rest of the IT-centric, acronym-laden successor to Cobol (though that's another thread altogether).
Now we find ourselves at a strange juncture. With the advent of rich Internet applications, the artificial limits on network-delivered user interfaces (i.e., Web pages) are being lifted, and there are credible technologies (such as Laszlo's) which can deliver full application-level functionality on the Web. The industry as a whole will need to invent a new interaction model which takes into account what we've learned on the Web, while restoring the rich interactivity end-users are accustomed to on their desktops. A synthesis needs to occur for the new model to succeed.
But there are now very few developers who have the sensibility, inclination or skills to take full advantage of the new capabilities and drive this synthesis &mdash they're either “business logic” developers, who view the “presentation layer” as trivial and lacking in technical prestige, 0r they're front-end developer/designers who come from a page design background and have neither the technical skills required to implement an interactive application, nor the design sensibility required to conceptualize it.
This puts those of us who want to see the Web advance to the next level in a bind. Where are the developers and designers who are going to make this imaginative leap? If not from the ranks of enterprise IT, and not from the Web page design world, then where do they come from? The issue isn't one of specific language or platform skills, since the new world of RIAs does not use the same language or platforms as yesterday's desktop applications. It's an issue of sensibility the attention to detail that comes from designing interactive software, combined with the engineering discipline required to structure these applications and make them productive, performant, and pleasing to use. [davidtemkin.com]