0018-9162/97/$10.00 © 1997 IEEE June 1997 53
J
ava evolved out of a Sun research project
started six years ago to look into distributed
control of consumer electronics devices. It
was not an academic research project studying pro-
gramming languages: Doing language research was
actively an antigoal. For the first three years, I
worked on the language and the runtime, and
everybody else in the group worked on a variety of
different prototype applications, the things that
were really the heart of the project. So the drive for
changes came from the people who were actually
using it and saying “do this, do this, do this.”
Probably the most important thing I learned in
talking to the folks building TVs and VCRs was
that their priorities were quite different from ours
in the computer industry. Whereas five years ago
our mantra was
compatibility, the consumer elec-
tronics industry considered secure networking,
portability, and cost far more important. And when
compatibility did become an issue, they limited
notions of compatibility to well-defined interfaces—
unlike the computer industry where the most ubiq-
uitous interface around, namely DOS, is full of
secret back doors that make life extremely difficult.
I’ve listed the differing priorities for the com-
mercial software and consumer electronics indus-
tries in Table 1. One interesting phenomenon that
has occurred over the past five years is that con-
sumer electronics concerns have become main-
stream software concerns as the market for software
in the home has grown.
The buzzwords that have been applied to Java
derive directly from this context. In the consumer
electronics world, you connect your VCR to a tele-
vision, your telephone to a network. And the con-
sumer electronics industry wants to make these
kinds of networked appliances even more pervasive.
Architecture neutrality is another issue. In the con-
sumer electronics business, there are dozens of dif-
ferent CPU types and good reasons for all of them in
their individual contexts. But developing software
for a dozen different platforms just doesn’t scale, and
it was this desire for architecture neutrality that broke
the C++ mold—not so much C++ the language, but
the standard way people built C++ compilers.
BLUE COLLAR LANGUAGE
Java is a blue collar language. It’s not PhD thesis
material but a language for a job. Java feels very
familiar to many different programmers because I
had a very strong tendency to prefer things that had
been used a lot over things that just sounded like a
good idea. And so Java ended up as this fusion of
four different kinds of programming.
1. It has an object-oriented flavor that derives from
a number of languages—Simula, C/C++,
Objective C, Cedar/Mesa, Modula, and Smalltalk.
2. Another one of my favorite areas is numeric pro-
gramming. One of the things that’s different
about Java is that we say what 2 + 2 means.
When C came out there were so many different
ways of computing 2 + 2 that you couldn’t lay
down any kind of rule. But today, the IEEE 754
standard for floating-point arithmetic has won,
and the world owes William Kahan and the
other folks who worked on it a real debt,
because it removes much of the complexity and
clutter in numerical programming.
3. Java also has a systems programming flavor
inherited from C that has proven useful over the
years.
4. But the one way in which Java is unique is its
distributed nature—it feels like there aren’t
boundaries between machines. People can have
pieces of behavior squirt back and forth across
the network, picked up here, landed over there.
And they just don’t care. The network, by and
Cover Feature
Java is a blue collar language. It’s not PhD thesis material but a language
for a job. Java feels very familiar to many different programmers because
we preferred tried-and-tested things.
The Feel of Java
James Gosling
Sun Microsystems Inc.
This article is based on remarks made at OOPSLA 96.