I was reading some slashdot discussions today, and one of the comments got me thinking. At some point someone said something among the lines of:
Back in the day, most computer users could actually program their machines. Now most users can barely figure out how to click an icon without getting lost.
Of course back in the day most drivers were also car mechanics, and most pilots were aviation engineers. They had to be, to properly operate and service their machines. But each technology that enters mainstream, has to gradually become easier to use for an ordinary Joe. This is the natural order of things.
As the time passes, our devices become more convenient and easier to operate, and by extension they become more accessible to dumber and dumber end users. The question is, when do we stop? Is dumbing down the user interface in order to satisfy the lowest common denominator is really the best possible design choice?
Let me put this another way. In the past most of the user-space programs were simple CLI applications. You would accomplish complicated tasks by stringing them together into long command sequences. Users had to remember commands, and know how to combine them and mix them up in innovative ways.
In fact they could easily write their own little scripts simply by listing their commands in a text file. Once you know how to write simple scripts, you can easily make the the leap into programming. After all, a hello world program in Perl is almost exactly the same as in bash and the C version is only a tad more complicated. As it is, a proficient CLI user is only a few steps from being a developer.
GUI user on the other hand is most often a brain-dead mouse clicker. He needs shiny buttons, flashing lights and amusing animations to keep him occupied. And if there are more than 4 buttons on the screen at the same time his brain simply shuts down and refuses to cooperate.
I submit that it is perfectly possible to teach an average Joe to use CLI proficiently in about the same time it would take to train him to use a fairly complex GUI. It is just a matter of memorization and repetition. The learning curve may be a little steeper at the beginning but the overall learning process should should only be marginally longer.
What is the difference? CLI requires the user to understand what he is doing, an combine the effects small command line applications in an intelligent way to achieve desired results. It teaches him how to think like a programmer, and develops their problem solving skills.
GUI on the other hand requires nothing from the user. Most GUI’s are composed of sets of fairly static interface elements – each tailored to very specific tasks. Unlike CLI, these elements cannot be easily combined or chained together. User must manually navigate from one to another, clicking through multiple screens in order to accomplish something complicated.
For example, lets assume that both our hypothetical users are assigned a task of sorting files into separate directories based on creation date. CLI user will most likely sit down and spend few minutes hacking up a relatively simple script to accomplish this. A GUI user will first try searching for an appropriate tool in all kinds of utility menus, and then will give up and start dragging and dropping files to appropriate folders.
While CLI user is trained to avoid tedious tasks by automating them, GUI user is trained to expect the automation to be a built in feature. If it’s not then they blame UI designers but do nothing to solve the problem themselves. One type of user is trained to solve problems, the other is trained to have problems solved for them.
Each time we design a new GUI interface we are in fact constraining the end user to a specific set of options and actions he can perform. We are in fact dumbing them down ourselves.
Sad part is that current mantra in software engineering world is usability. Everything must be simplified, have a shiny GUI and be intuitive. Otherwise the product won’t sell. But is this really the best way to design software? Some applications obviously greatly benefit from a GUI interface. But I doubt that every possible piece of software out there just has to have it.
[tags]gui, cli, programming, scripting, software engineering, design, users, end-user[/tags]