I previously wrote about website design. Now I’d like to continue my argument and move it to the desktop in stead. I’m going to begin by explaining my motives and approach to computing, continue by pointing out some important problems of most modern desktop environments, give some examples of what is being done about this and finish by very loosely sketching the work flow of an example application.
Computers are all about data. Somehow this has been lost in much of the modern design practices of graphical user interfaces. In stead, they all seem to employ Eben Moglen’s “caveman” principle; you point and you grunt. This type of design is very efficient for some tasks, drawing for example, when you only want to point out a position.
This is one of the main reasons why I have kept as far as possible away from GUI applications. Not because they employ a GUI, there’s really nothing wrong in that, but because they do it poorly. Ridiculously poorly.
Another problem with most modern desktops is all the micro-management necessary to optimize your screen usage. This has become especially important with the advent of the wide screen. As a solution, many desktops either implement work spaces, tiling window management or both. The latter can for example be seen in Apple’s “Active Corners”.
The final fundamental problem of modern desktop environments is one they share with the Web; it is difficult and inflexible to move data between programs. Of course, there’s typically a clipboard with some cut-and-paste function, but it’s often unbuffered (i.e. can only contain only a limited amount of data at a time), and don’t keep the semantics of the transmitted data. For example, say I’d like to tell my music player to transmit my currently playing track data to the letter I’m currently writing.
Of course, this could be done by copying and pasting the data, but that would mean unnecessary plumbing. I wouldn’t be transmitting data, I would be copying a string, switching workspace or program and then pasting it in. What if, say, I wanted a different representation of the track/artist/album data than the music player used?
There are multiple examples of interface designs that try to go beyond the norm. Emacs is one; most Emacs users end up doing a lot of hacks to the way Emacs works. Still, most new modules respect these modifications and fit in nicely (or at least can be convinced to do so). Information can be, and typically is, passed between different Emacs modules and components through function calls and shared data structures. This, of course, is a potential source of errors and would be a nightmare to debug, but it’s a rather good illustration of what I’m talking about.
Another example is the web browser Conkeror, ironically an Emacs-work-alike, which employs rudimentary facilities to move data between programs by allowing external programs to be run on embedded objects or their URL:s. And apparently, the Semantic Web has a sibling project on the desktop called the “Semantic Desktop“. I have heard very little about this though, but it might be something to look forward to.
I’d say that the desktop needs a major overhaul. First of all, the concept of fixed and separate applications should be discarded, and different concepts should be separated. For example, the same text input program could be used to supply both a web browser, an email and a word processor with input data. I hear Plan 9 is doing something similar to this, but its UI is horribly caveman-ish.
An example of how language can be used could be, say, a music library browser driven by an input box where the user enters either an expression (using some syntax) or a simple text string, which is fuzzily matched in the spirit of Emacs’ ido-mode. This box could then be surrounded with context data, such as for example the covers of the matched albums or further search suggestions.