Brains are Object Oriented
Following on somewhat from my browser UI rant, an important thing to
realise when designing interfaces is that the brain is used to
realistic, real-world things. It gets confused by magic, tries to reject
Quantum Physics, and so on. In other words, the brain is Object
Oriented.
To be Object Oriented simply means that there are a
bunch of “things” which can each do stuff and each have stuff. For
example, a ball is a thing. It can bounce and roll, and it has size and
colour. Being Object Oriented means breaking apart some things which
seem to logically go together, like verbs (or in the case of a computer
program, functions). However, with really huge projects it is clear that
separating like from like and instead combining things based on context
(into an object) is less confusing, since this is more understandable to
our brains.
With user interfaces there is magic and quantum
“spooky action at a distance” which the brain does not like. This is
where changing one thing affects another. For instance, the up and down
arrows on a scroll bar. These arrows are not connected to the slider, so
how do they manage to move it up and down? By magic. How often do you
drag the slider on a scroll bar rather than press then buttons? This is
because the brain thinks of moving down as a method of the slider,
rather than the arrow being a function which moves the slider. For this
reason I propose that arrows be taken off scrollbars (some themes to it
already).
Another problem is toolbars. They contain precisely
that, tools. In the real world when we want to join two pieces of wood
together we think about putting a nail through them. In order to do this
we get a hammer, but that’s just an implementation detail. If we could
push the nail in then we would do. Thus toolbars are bad because they
are a kind of magic. They contain functions, ie. they perform actions,
like save(document). However, the interface should provide
methods, ie. the documents should be able to perform the action, like
document.save().
A key thing to realise is that your
application is the GUI. Therefore your GUI should be Object
Oriented as far as possible, and should itself act like an object.
Developers often think of their code as being the heart of an
application, with the graphics as a glossy veneer on top. Users,
however, think of the graphics as being the heart of an application, and
the code just sticks it together. There are far more users going to be
using your software than developers (you should hope :P ) so keeping
this in mind is important.