Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c01/h11/mnt/34814/domains/ on line 36

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c01/h11/mnt/34814/domains/ on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /nfs/c01/h11/mnt/34814/domains/ on line 540
Humanized > Weblog: Beginners and Experts
If both six-year-old girls and professional architects are using and loving the same program...

6 Feb 2007

Beginners and Experts

UI Design Fundamentals

“You make something more powerful for the experts at the cost of making it harder-to-learn for the novices, or else you make it easy to learn for the novices at the cost of making it less powerful for the experts.”

True or False?

Sure we’ve seen lots of examples of this trade-off; sure lots of people think it’s an obvious truism; but is it a law of nature, or is it just an excuse for lazy interface design?

My six-year-old sister loves Google Sketchup. Even if she doesn’t understand the nuances of it, she mastered the basics of it quickly enough to begin making little villages full of blocky buildings and clip-art people and trees.

Meanwhile, my stepdad tells me that his architecture firm has quickly adopted Google Sketchup as well. He says Sketchup has rapidly displaced AutoCAD for all but the most formal and specialized uses at his company.

If both six-year-old girls and professional architects are using and loving the same program, then it must be doing something to meet the needs of both beginners (need for learnability) and experts (need for power).

Another example, close to my heart, is the Python language. It makes an excellent first language for teaching programming to beginners. It’s also favored by professional developers (like us, for instance, and also Google) for rapid prototyping and sheer productivity.

Why? It’s a good language for beginners because it doesn’t have any of the distracting, extraneous, illogical stuff that plagues lots of other languages. You don’t need to write a lot of boilerplate code just to make a “Hello, World!” program. You don’t need to match up your curly braces, or declare variables. In Python, every single line of code you write is doing something productive, so you can get started on the interesting stuff right away. Furthermore, Python is easy to learn and remember: you don’t need to learn a lot of special cases or exceptions or rules for special circumstances because Python is quite consistent. At the same time, it’s flexible about paradigms: procedural, object-oriented, and functional programming styles can be mixed and matched in the same Python program. Finally, it’s easy to learn how to expand Python’s capabilities: finding and importing modules for specialized tasks is easy, and introspection makes it easy to figure out how unfamiliar modules work.

On the other hand, Python is favored by professional developers for… exactly the same reasons.

This is an important point, I think. I’m not just saying that it’s possible to strike a balance between beginners and experts. I want to make a stronger statement: the qualities that make an interface good for beginners can be exactly the same as the qualities that make it good for experts.

The assumptions behind the “beginner - expert” divide are bogus. Think about it. Everybody approaching a new piece of software has to start from zero. Even within a single piece of software, there can be functionality which is intimately familiar and functionality which is totally mysterious. On the Linux command line, I consider myself an expert user of the ‘grep’ and ‘find’ and ‘ps’ commands and so on, but I can’t use the network-configuration commands without consulting a manual. And I’m sure there are plenty of useful commands which I don’t even know exist. My point is, everybody is an expert with respect to some software functions and a beginner with respect to others. Are you one of those guys with suspenders and a beard who’s been hacking Unix since before I was born? You’re an expert by any definition, yet still your computer has functionality which you’ve never touched, and with respect to that functionality, you are still a beginner.

Therefore, I say, all software should be designed for beginners!

And once you’ve been using a piece of software long enough to be considered an “expert” at it, do you want to suddenly switch over to using a new “expert” interface? Quite often, just as I am getting nicely habituated to the interface of my “beginner” program, I find that it lacks so me vital features, and so I am forced to make an unpleasant switch to an “expert” program — something with lots of features, but a horrible broken interface. (I’m not going to name any names here, but there are certain “advanced” graphics programs and plenty of IDEs that come to mind.) In each case, wish I could have stuck with the simple program, but its lack of needed features mean that all the time I spent learning it was ultimately time wasted.

Therefore, I say, all software should be designed for experts!

The designers of the world can do better! We can aim to make applications that have all the features that “power-users” need but an interface that makes them easy and pleasant to use for power-users and beginners alike.

Specifically, the idea behind Enso is that opening your stuff by name is a better interface than opening your stuff by hunting through a folder hierarchy for it. It’s better for beginners who don’t necessarily know where to find things yet, and it’s better for experts who know exactly where to go but want to get there without extraneous clicking. Of course we don’t claim to have invented this idea. It’s as old as the command line. But Unix and DOS command lines are the archetypal example of environments that provide power for experts but have a terrible interface for beginners. We hope that Enso will show people that the difficult and arcane nature of Unix and DOS command lines was a design flaw in those specific systems, not an inherent property of language-based interfaces.

All the elements of the Humanized design philosophyModelessness, information-theoretic efficiency, habit formation, non-disruption of the user’s train of thought, sacredness of the user’s data, and so on — are not aimed at beginners or experts, they are aimed at all users.

by Jono DiCarlo


14 Voices Add yours below.

It just occurred to me that I had thought about this a number of times without realizing it. I think you’ve got a point and some developers are starting to catch on. I’d say TextMate is an example of such a program and look at how popular it’s become. You can even see it in applications like Photoshop when comparing CS2 to the latest beta. Anyways, nice article!

(Uses Enso to spellcheck this response.)

Very nice post. I agree with you, and it prompts me to think about Enso’s design. Many of us are happy about the ability to run arbitrary scripts as commands, as Atul demonstrated in his last post–an “expert” sort of thing. But of course, the mechanism for teaching Enso to run a script is the same as teaching it to open a particular file: Just select the file and type “Learn as open myfilename”. This is so easy that it’s a beginner-friendly feature as well as an expert-friendly feature. So everybody can use it for something.

Now, I’d like to make a suggestion. Thinking about the Principle of Least Surprise, what if you just typed “myfilename”, rather than “open myfilename” or “go myfilename”. It seems to me that it should be easy for Enso to figure out that if that file is open, it should go to that window, and if it’s not, it should open the file. So why do we need “open” and “go”? Don’t misunderstand me–I’m not saying Enso should index your hard drive and know every file name (besides, think of the duplicates), but that if you want to turn a file name into a command, it should be possible, and Enso could simply do the right thing. It seems to me that both beginners and experts would find this to be logical and appealing.

Our visual/spatial memory is far more advanced and powerful than our language/word memory. Things that enable savants to remember PI to the thousandth digit, do it by visualizing the numbers creating a rich landscape to remember. We’ve been exercising our visual spatial memory even before our hunter/gathering days. While, we misspell things all the time, an fail to remember the names constantly.

Opening something by name is sometimes easier, if we forgot where we put it. For example, if I loose my house keys, it would be nice to be able to hit CAPSLOCK OPEN KEYS. (joking)

I see the main problem with hunting through a folder heirachy is that it isn’t utilizing our visual/spatial memory fully. It’s hard to get a spatial sense of where everything is in our computer, it’s all right in front of you, nothing is way to your left, or close to your left, or way down, or really way down, or really far away in the distance.

Here is an example: I remember that there is a coffeeshop on Raymond, Ave, and something, and I know what it looks like, and it’s right by a park, i don’t know the name of, and they had two couches in the main area, an outside area with metal tables that wobbled, but I don’t remember the name of the place.

Another example of the power of spatial memory is of a drummer’s arrangement of their drums. They are able to create incredibly complicated sequences, based on their memory of the position of each instrument. Change the position of a drum, and it will mess them of for a while.

Even other animals are experts of spatial memory. Think of a squirrel or dog hiding their nut or bone, they can remember it for years.

Another problem of hunting through a folder heirachy is that it doesn’t work like us. When we recall something from memory we can approach it by time, by subject, by color, etc, in our heads things are tagged with information, not stuck in drawers, or folders. Hierarchical folders are dead. Even library systems have their problems, they are sorted by subject because that is the most common way to browse, and they CAN’T reorder or sort themselves, it would require too much physical labor. This is not true for computers.

Also one of the great things about how our memory (in our head) works is that the more we use something the faster, and quicker it is to access it, folder heirachies (in computers) do not work like this, they remain hard to access even if we use it often. We need to move it closer if we want to access it often, and if we move it closer, like putting it on the desktop, it can destroy the order we gave it by placing it in a deep folder structure. This is partially what shortcuts, and alias are for, but this creates a weird parallel, where it seems like the object exists in two places, which totally confuses our memory. It needs to exist in one place, and then tags/attributes/folders associated with it. The internet is already on this tip. Wordpress works like this, as does

Please do not underestimate the power of the command line. I primarily use Windows XP, but I’ve started to use the command line more when I need to do repetitive tasks. What I suggest is this: create a powerful GUI, but show the CLI commands needed for every action that is taken. You could think of this as recording a Word macro. All of a sudden, I could have the power of a CLI with the ease of use of a GUI. Don’t get me wrong — the GUI still needs to be humane. Recorded commands could be represented as pictures instead of script names, to take advantage of our visual/spatial memory.

Speaking of which, where is the comment RSS feed? How will I know when this comment is responded to without either manually polling the site or writing a program to do it automatically? That does not seem particularly humane. :-P

Reading your comments about IDEs, I remember this:
Any barrier that exists between the user and some part of the system will eventually be a barrier to creative expression. Any part of the system that cannot be changed or that is not sufficiently general is a likely source of impediment. - from Design Principles Behind Smalltalk
May be the Squeak UI is not so cool, but is a good example of something for kids and for pros.

It’s refreshing to read your thoughts on the virtues of SketchUp. I’m an architect who fell in love with SketchUp the first time I used it and I’ve been questioning the more popular architectural programs ever since. Although I’ve tried to talk about a more “humane” approach to CAD/3D software with other architects, very few of them are willing to entertain the idea of a “better” or “easier” way to do our work. However this blog post and the many others I’ve read leave me toying with the idea of building my own architectural design software. (no pun intended ;)

I am beginning to write a novel and want
to simplify the process by including
poetic breaks between chapters. I
find people are impatient if asked for
help– or they repeat everything so fast
it is hard to digest. I hope your system
aids in my project. I want to subscribe,
so I hope as I scroll further the application
process is easy. thank you.

Our visual/spatial memory is far more advanced and powerful than our language/word memory.
- Braydon Fuller

Right on. If only more interfaces took care to present information in the same location consistently. At least applications take care to open in the same position and size as they were last used.

I love it. Reminds me of the old days in cp/m.

But, man, it really slows down my machine IO. Keystroking goes slower. It is eating me alive in cpu. If I exit, things get back to normal (for me).

Is current version not optimized?

Me= Celeron 1GHz, 900K ram.

very interesting, but I don’t agree with you

Do not a lot of money to buy a building? Worry no more, because this is real to take the loan to solve such kind of problems. Thus get a consolidation loan to buy everything you need.

I like the items you put in here. Very relevant information. Consider yourself book marked.

Really nice design and style and fantastic written content , very little else we need : D.


Please respect this public space




Live comment preview