The acts of the mind, wherein it exerts its power over simple ideas,
are chiefly these three: 1. Combining several simple ideas into one
compound one, and thus all complex ideas are made. 2. The second is
bringing two ideas, whether simple or complex, together, and setting
them by one another so as to take a view of them at once, without
uniting them into one, by which it gets all its ideas of relations.
3. The third is separating them from all other ideas that accompany
them in their real existence: this is called abstraction, and thus all
its general ideas are made.
An Essay Concerning Human Understanding
We are about to study the idea of a
Computational processes are abstract beings that inhabit computers.
As they evolve, processes manipulate other abstract things called
The evolution of a process is directed by a pattern of rules
People create programs to direct processes.
In effect, we conjure the spirits of the computer with our spells.
A computational process is indeed much like a sorcerer's idea of a
spirit. It cannot be seen or touched. It is not composed of matter
at all. However, it is very real. It can perform intellectual work.
It can answer questions. It can affect the world by disbursing money
at a bank or by controlling a robot arm in a factory. The programs we
use to conjure processes are like a sorcerer's spells. They are
carefully composed from symbolic expressions in arcane and esoteric
that prescribe the tasks we want our
processes to perform.
A computational process, in a correctly working computer, executes
programs precisely and accurately. Thus, like the sorcerer's
apprentice, novice programmers must learn to understand and to
anticipate the consequences of their conjuring. Even small errors
(usually called bugs
in programs can have complex and unanticipated consequences.
Fortunately, learning to program is considerably less dangerous than
learning sorcery, because the spirits we deal with are conveniently
contained in a secure way. Real-world programming, however,
requires care, expertise, and wisdom. A small bug in a computer-aided
design program, for example, can lead to the catastrophic collapse of
an airplane or a dam or the self-destruction of an industrial robot.
Master software engineers have the ability to organize programs so
that they can be reasonably sure that the resulting processes will
perform the tasks intended. They can visualize the behavior of their
systems in advance. They know how to structure programs so that
unanticipated problems do not lead to catastrophic consequences, and
when problems do arise, they can debug
their programs. Well-designed
computational systems, like well-designed automobiles or nuclear
reactors, are designed in a modular manner, so that the parts can be
constructed, replaced, and debugged separately.
We need an appropriate language for describing processes, and we will
everyday thoughts are usually expressed in our natural language (such
as English, French, or Japanese), and descriptions of quantitative
phenomena are expressed with mathematical notations, our process
1990s as a programming language for controlling the behavior
of World Wide Web browsers through scripts that are embedded
in web pages.
The language was conceived by
Brendan Eich, originally under the name Mocha, which
of Oracle Corporation.
at Netscape Communications Corporation, for the Netscape Navigator web
Scheme and Self programming languages. Scheme is a dialect of Lisp, and
was used as programming language for the original version of this book.
such as statically-scoped first-class
functions and dynamic typing, and as a result, it
was fairly straightforward to translate the
after which it was
C. In contrast with Java and C, which usually
employ compilation to lower-level
by web browsers.
After Netscape Navigator, other web browsers provided interpreters
for the language, including Microsoft's Internet Explorer, whose
browsers gave rise to a standardization effort, culminating in
first edition of the ECMAScript standard was led by Guy Lewis
Steele Jr. and completed in June 1997 (Ecma 1997).
The sixth edition, which is used in this book, was led by
Allen Wirfs-Brock and adopted by the General Assembly of ECMA in
As these programs became more complex,
the interpreters became more efficient in executing them, eventually
using sophisticated implementation techniques such as Just-In-Time
for scripting dashboard widgets in Apple computers running the OS X
operating system, for controlling software systems such as Adobe
Reader and devices such as universal remote panels, and
in server software, using Node.js.
that makes it an ideal language for an online version of a programming
textbook. Executing programs by clicking on things on a web page comes
possesses features that make it an excellent medium for studying
important programming constructs and data structures and for relating
statically-scoped first-class functions
provide direct and concise access to abstraction mechanisms, and
dynamic typing removes the need for declaring the types of the data
being manipulated by the program.
Above and beyond these
Building Abstractions with