mer wrote in a machine language, the other in a compiler language. Are
two such programs comparable? Certainly. But how to compare them? One
way might be to compile the compiler language program, producing a
program in the machine language of its home computer.
Now we have two machine language programs. But there is another
problem: there are two computers, hence two different machine
languages-and they may be extremely different. One machine may have
sixteen-bit words; the other thirty-six-bit words. One machine may have
built-in stack-handling instructions (pushing and popping), while the other
lacks them. The differences between the hardware of the two machines
may make the two machine language programs seem incomparable-and
yet we suspect they are performing the same task, and we would like to see
that at a glance. We are obviously looking at the programs from much too
close a distance.
What we need to do is to step back, away from machine language,
towards a higher, more chunked view. From this vantage point, we hope we
will be able to perceive chunks of program which make each program seem
rationally planned out on a global, rather than a local, scale-that is, chunks
which fit together in a way that allows one to perceive the goals of the
programmer. Let us assume that both programs were originally written in
high-level languages. Then some chunking has already been done for us.
But we will run into other troubles. There is a proliferation of such
languages: Fortran, Algol, LISP, APL, and many others. How can you
compare a program written in APL with one written in Algol? Certainly not
by matching them up line by line. You will again chunk these programs in
your mind, looking for conceptual, functional units which correspond.
Thus, you are not comparing hardware, you are not comparing
software-you are comparing "etherware"-the pure concepts which lie
back of the software. There is some sort of abstract "conceptual skeleton"
which must be lifted out of low levels before you can carry out a meaningful
comparison of two programs in different computer languges, of two ani-
mals, or of two sentences in different natural languages.
Now this brings us back to an earlier question which we asked about
computers and brains: How can we make sense of a low-level description of
a computer or a brain? Is there, in any reasonable sense, an objective way to
pull a high-level description out of a low-level one, in such complicated
systems? In the case of a computer, a full display of the contents of
memory-a so-called memory dump-is easily available. Dumps were com-
monly printed out in the early days of computing, when something went
wrong with a program. Then the programmer would have to go home and
pore over the memory dump for hours, trying to understand what each
minuscule piece of memory represented. In essence, the programmer
would be doing the opposite of what a compiler does: he would be translat-
ing from machine language into a higher-level language, a conceptual
language. In the end, the programmer would understand the goals of the
program and could describe it in high-level terms-for example, "This
program translates novels from Russian to English", or "This program
composes an eight-voice fugue based on any theme which is fed in".
Minds and Thoughts 381