I’ve just finished reading a paper on Cognitive Dimensions of Notations for the grad psychology class I’m taking. I found it pretty interesting, because it solidified some concepts that have been floating around in my brain for a while. The Cognitive Dimensions (CDs) framework provides a vocabulary for discussing usability aspects of information systems.
CDs give names to common issues related to representing and manipulating information. Viscosity refers to how hard it is for a user to change the system. For example, think of changing the prototype of a method in C++: in a large class hiearchy, you have to make the same change in many classes, and in both the header and the implementation. This would be high on the viscosity scale.
Another dimension is diffuseness: how verbose is the notation? A language like Java would score high on this scale (ummm, public void Runnable() anyone???), while Smalltalk would be much lower (where anonymous functions can be created by just using square braces).
I like the idea of formalizing these kinds of higher level concepts, because by giving something a name, it becomes immediately more tangible, more legitimate. And it becomes a kernel around which ideas can crystalize.
Of course, the other advantage to naming these concepts is that it becomes much easier to discuss them. Like with design patterns, you can refer to Model-View-Controller and most programmers will know what you’re talking about. If software developers were taught about Cognitive Dimensions as core concepts like patterns, then it might make it easier for them to understand and respect these issues, instead of dismissing them as touch-feely aesthetic issues.
Note: The title of this post is the name of another (proposed) CD — Useful Awkwardness is when something is deliberately difficult or awkward, but ultimately helpful as the user is forced to reflect upon the action. It’s my second-favouritely named CD, behind Grokkiness. Apparently people weren’t too fond of that one though, and it’s been renamed.