Why are computers so hard to use?
-- P. Lutus lutusp@arachnoid.com --
"With each passing year, because of advances in computer
technology, there are more things, each more sophisticated,
that we aren't allowed to do any more." -- P. Lutus
Computers are much smarter and cheaper than before, but they are no
easier to use than when they were stupid and expensive. Why is this?
There are many reasons. Each of the reasons, taken by itself, is not
enough to stop progress toward a simple, powerful, flexible computing
environment, but all of them together explain why we are here. Here
are some of them.
Hardware: A fast, powerful, inexpensive processor
The Goal: Use modern materials technology to create the
fastest, least expensive processor.
The Reality: The processor has to run older computer programs
already in place (the "legacy" requirement). This
means any new processor features can't interfere
with old processor features, including features that
stand in the way of rapid advance.
The Take the risks required to abandon a successful but
Solution: aging processor design. Persuade the computer buying
public to replace its software along with its
hardware. And smile while you say this.
Discussion: This problem affects the entire computer world, not
just small computers. Software development is by far
the most costly part of computer technology, and no
one wants to throw away software that works. It is
easier and less expensive to think of ways to make
old software work on new computers than to write new
software.
One partial solution is to write code that is more
portable. This requires strict adherence to software
development guidelines, something that everyone
agrees is important, but no one ends up doing.
Software: Flexible applications that meet people's needs
The Goal: Design programs and data structures that offer power
and sophistication, but that also can be shaped to
meet future needs the designers cannot imagine.
The Reality: Gigantic applications that contain many individual
solutions crafted by software designers to meet
specific needs, but that cannot be changed in the
field to meet new needs.
The Make computer programmers use their programs. This
Solution: may sound too simple to work, but it is obvious that
programmers are not using their programs in the way
that end users do. Secondary solution: Create tools
that allow the design of new program functions in the
field, in a way that the average user will
understand.
Discussion: Programmers usually respond to a request for a new
feature by writing the feature in the computing
language with which they are most familiar. This is
the easiest solution for the programmer, but it
creates a perpetual dependency between end users and
programmers -- end users ask for something,
programmers provide it, but in a way that solves only
that one problem, and does not provide a general
solution to problems of that type.
Graphical User Environments: A step forward?
The Goal: Create a unified environment (the reality behind such
labels as "windows") that standardizes the way that
applications communicate with the keyboard, pointing
device, display, printer, and file system. Share as
much computer code as possible by creating a standard
library structure, encourage participation in the
library system. Encourage programmers to write their
programs in a standardized way, so that users can
move between applications without changing how they
work.
The Before "windows" et. al., one had to test an
Reality: application in every available environment to be sure
it worked. After all, someone might be (for example)
using an odd display adapter that behaved in a
nonstandard way.
Now that we have "windows," nothing has changed. I
recently wrote an application in C++ under a modern
graphical environment, expecting to realize the
benefits of this standardization. I ended up having
to test my application in every version of the
environment (it behaved differently in, and required
revision for, each and every one), and to cap it off
I then received a bug report from several people who
owned a particular display adapter -- I had to
partially rewrite my program to accommodate that
particular adapter when used in that particular
version of the environment.
The Strict compliance with hardware and software design
Solution: guidelines, so that all devices appear the same to
all applications within the environment.
Discussion: Hardware designers must adhere to a set of strict
rules, and resist adding non-standard features in a
lame attempt to set themselves apart from their
competitors. Hardware designers must also write and
test software drivers for their adapters that are
absolutely bulletproof -- they must work exactly the
same as all the other adapters, running all available
applications, in all standard hardware
configurations.
The foregoing point should be obvious, but it is
almost never done. Browsing the Web, one regularly
sees lists of incompatibilities that remind one of
the bad old days of DOS -- "if you are using computer
X and adapter Y, then you can't run program Z."
Object-Oriented Programming: Panacea or Hype?
The Goal: Redesign computing environments to focus on computer
users and their needs instead of a focus on computer
programs and their needs (in a manner of speaking).
The Reality: Instead of the old reality -- a system filled with
programs that wouldn't talk to each other -- we now
have data and programs enclosed in packages. They
still won't talk to each other, but (positive sign)
they are sitting closer to each other than they used
to.
The Solution: Again, make computer programmers use their programs.
In particular, programmers should try to perform a
normal task, from beginning to end, as an end user
would. And take notes.
Discussion: The current embodiment of object orientation is
ridiculous. You can drag any object from any
application and drop it on any other application,
but there the similarity to the original goal ends.
In general, the recipient application doesn't know
what to do with the object it has received.
It isn't enough to create an object composed of
disparate elements. There has to be a purpose to
that assembly -- the object should be more than the
sum of its parts. In particular, it should be
obvious to end users how to use this new ability to
solve old problems in new ways.
Summary
Some aspects of the present situation cannot be avoided. There is an
essential tension between a perfectly coordinated computing
environment on one hand, and a democratic society enclosing a free,
competitive marketplace on the other.
For example, the idea behind a common software library is a good
one. Instead of requiring every programmer to write a particular
routine anew, you can choose a very well written version of that
routine and offer it to all through a sharing mechanism. The sharing
mechanism in Windows is called the "Dynamic Linking Library," and
the files containing the library have the suffix .DLL (in case you
were curious).
But in practice, this scheme isn't working very well. Most companies
write their own DLL files and share them only within that company's
applications. This saves some space for the end user, but much more
space would be saved, and much programming effort would be saved, if
sharing were more general.
Also the library scheme has one very serious flaw: if the common
library contains an error, all applications that use the library
will fail at once. This actually happened recently -- Microsoft
released a new version of a DLL they maintain, but this particular
file contained an inadvertent error. Suddenly software developers
all over the world (including the author) were besieged with reports
of an error, an error about which they could do nothing.
In some ways the shared library paradigm reflects (negatively) on
the nature of human society. For the shared library method to work,
we have to pretend to be members of a utopian society, one in which
the most talented technologists act for the common good. In reality,
when the scheme works, it is usually because someone acted for the
common good accidentally.
The next technological breakthrough will not be in technology, it
will be in marketing. We already know how to create a great computer
and a great environment. The problem lies in how to fund, produce
and market these ideas. At the moment we are paying too much
attention to issues of competition, intellectual rights and novelty
for novelty's sake, and too little to the issue of optimal technical
solutions.
The next big breakthrough will not be a smaller, faster, cheaper
computer, although that will happen too. The next big breakthrough
will be a method to unify the best ideas in computing with reliable
financial backing and a persuasive marketing campaign based on the
real needs of end users.
Will Microsoft be the source of this breakthrough? I personally
don't think so. In my view, Microsoft is following a very
conservative path, based on incremental improvements on what has
worked in the past, a strong emphasis on continued high
profitability, and little investment in alternative approaches.
These are the reasons why computer technology has produced no
measurable productivity increase in the workplace -- too much
competition for the sake of competition, too little investment in
basic research, too great a focus on the bottom line, too many
hardware and software vendors competing for a thinning profit
margin. And Microsoft, the one organization that can afford to act
differently, instead acts like a very large version of a small
software house -- stature, but no vision.
A digression -- UNIX vs. Windows: A biased, subjective comparison
I personally feel that UNIX is the standard to which everything else
is compared. This is called "irrational bias," and I won't try to
justify it to you. I am particularly reminded of UNIX's innate
superiority every time I try to set up a version of Windows. In
setting up UNIX, you can use previous configuration files, you can
automate the process using scripts, you can even copy a complete
operating system from one machine to another with a reasonable
expectation that it will run on the destination.
None of these is true of Windows -- every time you set up Windows,
you have to start from scratch. You must make hand entries for
dozens of prompts, you have to be there when the prompt appears, you
can't automate any part of the process. In this sense, Windows is
the most certain guarantee of the value of unskilled labor in modern
times. (You can copy an entire hard drive to another hard drive
using specialized techniques, thus cloning Windows, but I am talking
about what you can do with Windows, not in spite of it).
This lack of automation is generally true of the operation of
Windows programs also. If you want to replace a phrase in a long
text file, you have to do it by hand, every time. If you want to
convert a directory of graphic files from one graphic format to
another, you have to load each graphic individually, convert it by
pressing the same buttons in the same way, and save it again. If
there are 100 graphic files in the directory, you perform the same
hand motions 100 times.
Here is my biased, subjective point-by-point comparison of UNIX and
Windows:
Property UNIX Windows
Appearance Ugly Beautiful
Flexibility Very flexible, some Not flexible. Breaks
say too flexible. without bending first.
Bends and then
breaks with little
warning.
Graphics Tentative, Innate
capability experimental
Automation Inherent Practically nonexistent
Communication Humbly cooperative Belligerent
with other file
systems
Extend Quick, but requires (1) Never. (2) Maybe, if
environment or substantial someone at Microsoft has
applications to expertise. the same idea at the same
include new time, knows a programmer,
capabilities and has clout. If you are
not at Microsoft, ESP might
work.
Write new Easy, standard Very complex, poor
applications environment, documentation, many
obvious process, gotchas. To succeed you
powerful have to be very smart and
environmental very single. Up there with
features and tools. the classic hard things of
modern times: landing the
Space Shuttle on a rainy
night, hitting a
major-league fast ball, or
explaining Dan Quayle to an
extraterrestrial.
Cost Free (Linux, Expensive -- after all,
FreeBSD, others). Windows programming is
And even beyond hard, Windows system
free -- the free programming is even harder.
vendors try to Someone has to pay…
compete for your
"business" by
telling you all
about the features
of their free OS.
Contribution to Substantial and Substantial and ongoing as
the progress of ongoing as a a negative object lesson.
computer positive object
science lesson.
Meets the needs Only if the "end Moderately, but may be
of end users user" is a training end users to
congenital techie. expect too little from
their computer
environments. Offers too
little automation and
cleverness, requires too
much manual labor. Demands
that the user learn a lot,
while in turn learning
nothing from the user.
Future Substantial, but Substantial, but needs some
potential needs graphic user of the power and
interface to keep flexibility of UNIX for
up. credibility.
               (
geocities.com/siliconvalley/pines/Pines)                   (
geocities.com/siliconvalley/pines)                   (
geocities.com/siliconvalley)