Wednesday, January 12, 2005

Affordances

I've been reading Donald A. Norman's book The Design of Everyday Things. It is a fine book. The chapter I'm reading now talks about affordances, which seems to be a concise way of describing the hints that a thing shows us to explain how it is to be used. Being a computer guy, I immediately relate this to computer interfaces: Every mouse-based graphical user interface (GUI) I've used has a button control, which is designed to look somewhat like a momentary contact push switch. Every mouse that I've used has a momentary contact push switch located somewhere inside it. By making the thing on the screen look like it "affords" pushing, people easily figure out that it is operated by pushing the mouse's button. That's the idea, anyway.

For years the conventional wisdom is that a "rich" GUI offers more hints as to its usage than does an "old" command line interface (CLI). But thinking back to when DOS was still an option for most office workers, using Windows (3.0 at the time) was really not the preferred way, except for a few "power user" types who liked Excel. About a year ago Richard Wareham published an article entitled The Command Line - The Best Newbie Interface? in which he describes his experience teaching new users how to use a UNIX shell.

Now, the UNIX shell is not widely considered to be "user friendly." In fact, the "rm" command, for example, is often downright hostile. I've been using computers for twenty five years, and I still occasionally delete files that I wish I hadn't. But Wareham makes the claim that once users were accustomed to the idea, they found the CLI comforting.

I think that this is because with just a little bit of effort, the UNIX CLI gives more affordances than does a GUI. Think about it. In most of the modern GUIs there are a few ways to display the files in a directory. As large icons, or small icons. With the "details" turned on, or off. Sorted by name, date or size. A few other choices. Maybe there are menu items, or toolbar buttons, or right-click context menus, or something else to switch between these.

In a CLI, I get all of those options, and a few more. I can show only .txt files. I can show only the three newest files. I can show the files that contain the word "affordances." Each of these is a single command, one of them is two programs strung together into one line. But where are the affordances? Where is the indication of how to make these things usable?

"Man" pages are the keepers of the affordances. The "ls" command has a ridiculous number of options, more than I could ever manage in a menu. But if I remember to look at the man page for "ls," it kindly tells me how to invoke each of the options, and gives me a couple of sentences of what each one does. To give a GUI that many options would make it unusable. You would end up with so much screen dedicated to controlling the options that there would be no room left for the files. "ls" takes up no room on the screen, until you decide you want to use it, and then it is almost immediately there.

This essay does not really feel complete to me, but now I've lost track of whatever point (if any) I started with. If you have any thoughts on this topic, or interesting links, please post them in the comments area.

* 11:15 13-Jan-2005 Fixed a spelling error. If you didn't notice it before, you didn't miss much. Thanks, Meg.

Tuesday, January 04, 2005

Web Browsers, and other interfaces

One of my collegues, let's call him Eric, pointed out that Mozilla has an option to pre-fetch the links from the page that you are on. This is the basically what I wanted when I wrote about "Agressive look-ahead." I suppose I should go download a recent Mozilla and try it out, but I've been watching the Mozilla project for a couple of years now and I've quit using it because I've determined that it has become so feature-rich (and slow) that it is as hard to customize as is Windows.

Now, Eric is an EMACS user (which I try not to hold against him) and enjoys programming in LISP so it is clear that he is not really a normal person. But he does seem to know more little tricks for adjusting his computing environment to suit his working style than anyone else that I know. Where I used to fiddle with making things easy for me to use, now I just resign myself to accepting the factory defaults for nearly every piece of software that I use.

I understand that it is probably not politically correct to wonder about this, but whose approach is better?

Mozilla has a truly staggering number of options. I (or somebody less lazy than I am) could probably write extensions to do many of the things that I was wanting. One of the things that I want from a browser is even in there. But I probably won't even try it. Why? Because I anticipate that the effort to just figure out how to turn on the optional pre-fetch the pages is more than the feature is worth to me. There comes a point where the cognitive load of managing the features overwhelms the value of the featureness. Excel hit this point for me about 8 years ago. I use the newest version of Excel just about the same way I used it on Windows 3.1 (whatever version that was).

There's a bunch of features in Excel that I know I'd like if I ever bothered figuring them out. Today I permuted a table into a matrix by hand because there it seemed like too much of a pain to figure out an automated way. I'll bet there is one in there somewhere. Isn't that kind of what "Pivot Tables" are for? Or maybe I needed to make a data area out of it, and setup the matrix as a bunch of queries. I just intuitively knew that it would be more trouble to figure out than it was to just do it by hand. All I wanted was to turn the numbers into a little chart, anyhow.

Oh, and I thought of another web browser feature that I've been wanting:
  • Chrono-Forward and Back I leave my computer running 24 hours a day. I'd like to be able to tag some of my bookmarked sites as being of great interest to me. Then, every so often it could go fetch a copy of the page, images and everything. Using some clever logic to only store the differences between pages, the size of the data stored could be acceptable. Then, when I open those bookmarks, on my toolbar I get an extra set of forward and back buttons. Time travel buttons!

Monday, January 03, 2005

Web Browser Usability

Jacob Nielson writes about usability in his "alertbox" forum, usually talking about website usability. In a recent posting he describes some ideas he has for making web browsers more usable by extending HTML to a more complete hypertext. (Go read his description for more details.)

I think that there is plenty of room for improvement just looking at the browser side of the web. If you don't have to change HTML it's a lot easier for people to adopt the changes gradually.


  • Bookmarks that act like bookmarks. When I use a web browser, the bookmarks that it stores work like a page reference written in a notebook. When I read a book or a magazine the bookmarks that I use keep track of where I've read to in the book. I want the "how far have I read" or "where did I leave off" kind of functionality in a web browser. Since the term "bookmark" is already taken, I'll propose calling these "resume points." If I open a "resume point," browse a little bit, and then close the window, the next time I open that point I want to be taken right to where I left off, with the ability to go back through my history and everything.

  • A "Next Link" button. Opera has a nice "Fast Forward" button that I use pretty regularly. Next to the "back" button it is probably the one I use the most. However, there are a lot of cases where it is not quite what I'm really wanting. My most common browsing task is probably to do a Google search and then want to page through the list of resulting links. I want a button that is the equivalent of going back, finding the link that I last clicked on from that page, and then clicking on the next link on that page. This would let me browse through the Google results with single clicks. It would also work well for a lot of shopping sites (like Amazon) which return lists of things.

  • A map of the web. Years ago, before Windows became moderately usable for simple computing tasks, IBM made an operating system for PCs called OS/2. It's been dead for a while, but it had the first graphical web browser that I used, called "Web Explorer". It had a neat history view which showed a graph of the pages traversed with the various links between them. It only showed the links that you'd actually taken, but I'd like something like it which analyzed all the links on the pages and could show various levels of detail. Working in tandem with "Agressive look-ahead" (described below) it could produce an interactive map of a website to help me find what I'm looking for.

  • Stronger history searches. Most web browsers keep track of recently viewed pages, calling it my "history". Most web browsers will allow me to search through history, looking for keywords. Yet the search that they perform is often just searching for keywords in the page title and URL! Microsoft's Internet Explorer seems to try a little harder than the others, but still falls far short of really letting me find whatever I'm looking for on any page I've ever been to. I've got a nice, big hard drive. Why should I ever lose my browsing history?

  • Spam filter integration. Yes, spam is the universal annoyance. And spam filtering does seem to help somewhat. But occasionally I do want to get mail sent to me from a company or something. My web browser knows which domains I've given my email address to, that should be a clue to my spam filter that mail from that domain is ok. Maybe even a little popup would be nice. Ideally, the web browser could look for words from the page and site that I gave my email address to and feed them as non-spam words for use in our now nearly ubiquitous Baysean email filter. Anyhow the punchline here is: The web browser knows that I gave out my email address. That should somehow be enough to get the response back through my spam filter, but often isn't. That is inefficient.

  • Aggressive look-ahead. I'm not really sure how feasable this is in a world of dynamic web pages, but it sure seems like with a fast internet connection and a big hard drive there's no really good reason why I couldn't have my browser download every page linked to from the page I'm looking at. Load times would get a lot shorter, if it was just a simple fetch from the cache. But there could be other benefits, as well. If I hover over a link, the browser could show me the target page, maybe reduced 50% in a popup window. It could feed the links from the other pages into my map of the web. When I do a "History search" it could include pages that were near the ones I actually went to, and maybe return those results in a different color, or separate list. Not having to wait for the content to download is really a small benefit in my way of thinking. Just having more data local to be able to make decisions with is really the big benefit.