If you use a desktop computer, you might already know that there is not any single part called the
. A computer is really a system of many parts working together. The physical parts, which you
can see and touch, are collectively called hardware. (Software, on the other hand, refers to the instructions,
or programs, that tell the hardware what to do.)
Fig. 1: Four categories of computer’s hardware.
A computer’s hardware devices fall into one of four categories (see Fig. 1
While any type of computer system contains these four types of hardware, this
subject focuses on them as they relate to the personal computer; or PC.
Many computer scientists and engineers refer to themselves as hardware people or software people. By hardware, they generally mean the physical computer and all the specifications associated with it. By software, they generally mean the
programs, whether operating systems like UNIX or Windows, or database systems like Oracle or DB-terrific, or application programs like Excel or Word. The
implication is that the person knows a whole lot about one of these two things and
precious little about the other. Usually, there is the further implication that it is OK
to be an expert at one of these (hardware OR software) and clueless about the other.
It is as if there were a big wall between the hardware (the computer and how it actually works) and the software (the programs that direct the computer's bidding),
and that one should be content to remain on one side of that wall or the other.
As you approach your study and practice of computing, we urge you to take
the opposite approach—that hardware and software are names for components
of two parts of a computing system that work best when they are designed by
someone who took into account the capabilities and limitations of both.
Microprocessor designers who understand the needs of the programs that
will execute on that microprocessor they are designing can design much more
effective microprocessors than those who don't. For example, Intel, Motorola,
and other major producers of microprocessors recognized a few years ago that
a large fraction of future programs would contain video clips as part of e-mail,
video games, and full-length movies. They recognized that it would be important
for such programs to execute efficiently. The result: most microprocessors today
contain special hardware capability to process these video clips. Intel defined additional instructions, collectively called their MMX instruction set, and developed special hardware for it. Motorola, IBM, and Apple did essentially the same thing,
resulting in the AltaVec instruction set and special hardware to support it.
A similar story can be told about software designers. The designer of a large
computer program who understands the capabilities and limitations of the hardware that will carry out the tasks of that program can design the program more
efficiently than the designer who does not understand the nature of the hardware.
One important task that almost all large software systems have to carry out is
called sorting, where a number of items have to be arranged in some order. The
words in a dictionary are arranged in alphabetical order. Students in a class are
often arranged in numeric order, according to their scores on the final exam.
There are a huge number of fundamentally different programs one can write to arrange
a collection of items in order. Donald Knuth devoted 391 pages to the task in The
Art of Computer Programming, vol. 3. Which sorting program works best is often
very dependent on how much the software designer is aware of the characteristics
of the hardware.