I read a paper titled
The Anti-Mac Interface a while back, and it stuck with me for a number of reasons. I strongly recommend reading it now, if you are at all interested in user interface design, especially user interfaces designed for people who know what they are doing. I'll warn you up front, I'm no fan of how Apple does their UI design these days (I'm displeased with many UIs now, seeing as they seem to insist on getting in my way, claiming that they want to help me), so the paper's title caught my eye. The gist of it is that the authors decided to systematically violate Apple's
UI design guidelines to see what kind of UI they would end up with, and it turns out they got something that worked great for people already comfortable with computers.
This makes great sense in retrospect, if you ignore all the guidelines that ask you to treat your user as a total buffoon, the UI gets out of the way and lets the user actually get work done. One of the reasons I like to give for using Linux (and mostly command line programs) is that I don't have to fight it. I've used OSX and Vista briefly, and XP extensively, and I definitely feel like I am fighting an uphill battle against them all the time (the former two much more than the latter, but that may be a matter of experience).
One paradigm that caught my mind in the paper was computer-based agents and the idea of "delegation instead of direct manipulation." I envision myself telling my computer 'go find all my photos from last summer, and get back to me when you've tracked them all down and ordered them' instead of having to go in and select date ranges manually, across a smattering of directories. The interesting part (for me) is the idea of an agent that goes away and takes care of things, instead of the UI assuming I need to see everything happen, lest I get confused by all the shiny lights. (Don't start thinking about semantic interpretation or whatever, I'm not interested in requiring that my computer speak English. A find command is semantic enough for this task)
A bit of background info; on computers we often have bottlenecks, parts of an algorithm (basically, a set of instructions or steps to accomplish a task) that limit how fast the whole thing can run. Often, these can be split into, say, CPU-bound (we have to wait for the calculations to happen), memory-bound (CPU stays idle while waiting for data from RAM), or disk-bound (waiting on data from the horribly slow hard drive). Today, I realized that in UIs, we have another bottleneck, completely independent of computer performance. An operation can be user-bound.
What this means is that the fastest a task can be accomplished is limited by the UI's user. This might mean reading an essay, where even dial-up users can download text faster than they can read it. Another example would be watching videos: no matter how fast you can transfer them, decompress them, and convert them into bits of colour and sound, the number of people who can functionally watch a video any faster than normal playing speed is extremely small. Both those tasks are user-bound, as are many tasks that require user input or decision-making.
For now, I'm going to ignore user-bound tasks. Tying the two brain-threads I've put out there together, how would the anti-mac UI handle tasks that take long enough that the user experiences noticeable lack of responsiveness? When we send agents away to do something, we may want to work on something else while we wait, but also know when our agent comes back, smiling and proud, shouting 'all done!' Computers do this all the time, using a process called interrupts, and it's exactly what I thought of first. As soon as your agent is done, it pops up in your face and lets you know of such.
No thank you, I don't want my computer to remind me of some annoying jerk, interrupting my train of thought to throw some completely unrelated conversational turd at me. So now I think I want a queue, and as soon as something is complete, I see it show up in the 'complete' queue. This would be very useable with a 'in progress' queue as well, and some way of categorizing tasks, so that I can see all the complete tasks that are related to each other. Oh yeah, now we're talking; a small display at the edge of my screen that I can glimpse at whenever I find a natural mental break in whatever I'm doing. Much better, and I don't have to worry about the mentally jarring context-switch until I want to. I also don't need to be checking a half-dozen programs and progress bars to see where they are at either!
That was my big relevation for today; user-bound tasks, and that I would like dispatchable agents who would line up all polite like once they are done, silently waiting on me to call upon them to tell me what they have for me. If I were artistic, you'd get a mock-up here, but I'm not so you won't. Unfortunately, this type of UI element requires a much more tight-knit computing environment than available to me right now, so I'm filing this away for when I have way too much time on my hands.
*** I should probably note that I'm no UI pro, nor have I researched this in depth, and I'm not even going to claim that I'm the first person to think this up. It's just what I came up with while eating supper tonight, and it appeared novel enough to me to be worth sharing. If somebody knows of work done in this direction, please do share.
Labels: computers, user interface