Documente Academic
Documente Profesional
Documente Cultură
Dr. Jack Dennis - Professor Emeritus of Computer Science and Engineering, MIT, Chief Scientist, Acorn Networks, Inc.
Dr. Burton J. Smith - Chairman and Chief Scientist, Tera Computer Company
The l cspondents:
To help celebrate ACM's 50th anniversary, we interviewed sixteen of the leading lights in programmil~g
languages, and asked them questions about the past,
present, and future of the field. Some of these experts
have been involved in the development of the programming languages field from the beginning. They
have all left their marks, and all have their personal
visions of where we've been and where we're going
next.
Regarding the questions we asked, Dr. A1 Aho had
this to say: "The answers you get to these questions
are going to be heavily biased by the people you talk
to. When I speak to people in the programming languages area, there is often a sharp dichotomy between
the researchers and academics, who have somewhat
different perspectives on programming languages.
Have you noticed this in your interviews? That if you
talk to the folks who have to produce working artifacts do they have radically different views from the
researchers or academics?"
Here is what sixteen computer scientists had to say.
Their visions do not always agree, but we will leave it
to you to decide how radically they vary. It is our
hope that, regardless of your area of interest or expertise, you will find these interviews revealing and
thought-provoking.
14
Department Head,
Dr. William Wulf - AT&T Professor of Engineering at the University of Virginia, President of
National Academy of Engineering
Goldberg:
career choice?
Aho:
Allen:
15
Liskov:
dia-I had the opportunity to take an introductory, outof-hours course on computing, and loved it. The professor ran this course in order to get lab instructors
for a course on computers he was teaching. So here
we were, freshman acting as lab assistants for students in their third year. I've been involved since
1963.
fimith:
16
~troustrup:
Wegman:
The first time I looked at programming I was working for my uncle, and he had a program that someone had written for his company, and
he needed to have it flowcharted to figure out what it
was doing. But I think I was intellectually interested
long before that. I had read books on programming
and stuff.
The job with my uncle was when I was in
that would have been between 1967 and
I wrote my first program was probably
between my sophomore and junior year.
have been '69-ish.
college, and
1971. When
the summer
That would
Aho:
I learned IPL-V and SNOBOL4 as my first
programming languages on an IBM 790.
Ta
Allen:
Wegman:
MAD, the Michigan Algorithm Decoder, on a coupled 790-740,the big mainframe that the University of
Michigan had.
Kennedy:
Liskov:
F O R T R A N on the 790.
MacQueen:
IBM 360.
F::el"r'arlte:
F O R T R A N on an IBM 1620, in
Wul-F::
language.
,~a miner:
FORTRAN; I began teaching it the
year it came out. I was really only using it for educational purposes, but I remember very well; it was on
the 704.
Allen:
Steele:
I::el"r'ante:
,~ethi:
,Smith:
17
F O R T R A N on the 790.
Mac(~u~sn:
,~amlllet:
Sethi:
mith:
F O R T R A N on the 704.
Aho:
F O R T R A N on an IBM 1130.
Scroustrup:
A L G O L 6 0 on GIER.
Tan6n~aum:
Wegman:
Allen:
D~nni.~:
other language I mentioned "high-level." It was certainly "higher-level;" it had statement labels and
G O T O statements, and primitive arithmetic expressions, but it didn't have variables, as we know them
now.
Ferrante:
18
P r o g r a m m i n g Languages, P a s t P r e s e n t and F u t u r e
Liskov:
,~sthi:
That's a tough one. I ' m led to various
application level things that I've used, that I ' v e been
19
Sixteen Prominent C o m p u t e r
Stroustrup:
C++.
Tanen~aum:
I used to hang around the
PDP-1 all the time as an undergraduate. The PDP-1
had a 512 by 512 display and the ability to plot individual pixels. Before long somebody had written
Spacewar and we used to have tournaments. The
PDP-1 had an interrupt system, then called sequence
break mode, so it could display on the screen and
punch paper tape at the same time. One of the guys
wrote some code to punch out the Spacewar games as
they were played, so the great games could be reviewed later. One day somebody invited Isaac Asimov, a professor at Boston University, to come watch
all this. He was enormously impressed, saying this
was the closest to a real space war he'd ever seen. I
was a big Sci-Fi fan, so meeting Asimov was a great
treat.
W~gman:
2O
Allen:
P r o g r a m m i n g Languages, F a s t P r e s e n t and F u t u r e
21
local optimizations. And yet they produce really excellent code on many machines. It turns out that the
RS6000 compiler does do a better job on that particular machine, but on many machines the GNU
compiler does a better job, and that's just surprising!
Goldberg:
A s s e s s O u r Field
Liskov:
, ~ i l l i t h : Yes, I do have a favorite; it's the compiler we're developing here for the Tera machine. It
doesn't have a name. It's a very advanced compiler
for FORTRAN, C and C++ for the Tera MTA architecture. It automatically parallelizes programs and
represents a high degree of sophistication in doing
that.
22
Stroustrup:
I guess my own C++ compiler, Cfront, qualifies on both counts. It was a lovely
flexible tool for experimentation; easily portable to a
lot of machines; generated code that, for more than a
decade, outpaced all competitors; and some parts
stood up well to the wear and tear of language evolution and maintenance. It's very portability was a
problem though; it was never central enough to any
platform supplier for first-rate tools support to
emerge. Fortunately, I ' m not a heavy user of debuggers, but in the end, the lack of even basic tools became a burden. Also, with the standardization effort
changing C++, Cfronrs age and lack of a fullyfunded support organization became too frustrating.
Fortunately, we have better C++ compilers these
days, but I ' m still regularly amazed about details that
P r o g r a m m i n g Languages, P a s t P r e s e n t and F u t u r e
fixed. There are features I like in some that don't exist in others, and in some sense I want the union of
everything.
W L I l f : Well, of course, the one that I wrote. I designed a language called Bliss, that was originally
designed for the PDP-10, but really hit its stride with
the PDP-11. It became DEC's internal system implementation language; it played the role that C plays
now. And it was intended for system implementation;
operating systems, that sort of thing. This was in the
era when macho programmers believed that compilers
could not possibly produce code as good as they
could write in assembly language. So, in fact, the
object of the Bliss-ll compiler was to be a very
highly optimizing compiler that was competitive with
what humans could write. And we pretty much succeeded in that. So that Bliss- 11 compiler has got to be
my favorite. Modestly, I have to say it's still one of
the better optimizing compilers around. We didn't
have much theory in those days, so it was done in a
rather more ad hoc way. It paid attention to a lot of
details that sometimes get passed over.
My least favorite is the C compiler; it's a combination
really, of the compiler and the language, I guess. It's
not a very robust or good piece of software, and the
language was defined by the compiler instead of
anything more careful; and I suppose it's simply annoying that it became so popular despite its drawbacks.
A[[en:
Del'llqi.~: That's
Ferl"ante:
(~old~erg:
Aho:
I ' m not sure that the programming language,
per se, is essential for teaching and learning concepts.
I think every programmer needs to learn ANSI C, and
probably C++, because they are the two most popular
languages in the world. But I think you can learn programming language concepts and how to write effective programs using almost any language.
23
Sixteen
Prominent
Computer
Sclenti~t~
A~es~
concepts in Scheme. Then we introduce them to object-oriented programming in two phases; first we
teach them Java, which is a safe language and a little
easier for them to deal with than C++; and finally we
teach them C++.
C++ is a very powerful language, but it is also very
difficult for beginning programmers to use well. As a
first language it is not suitable for students, although
we need to teach it eventually because it is the language that many students will see in practice after
they graduate. Java is a better way to teach objectoriented programming, because it is safe and has a
garbage collector. In Java, it is not possible to make
the incredibly subtle errors that arise from accidental
deallocation of storage that is still in use. As I said
earlier, I have written several programs exceeding a
hundred thousand lines of code, and storage management problems have been the most difficult to
locate and eliminate. C++ is full of opportunities to
introduce errors of that type.
L i s k o v : Well, the language that I teach still is the
language that I developed myself, called CLU, and I
teach that in a course on program methodology for
developing large programs. I use it in that course because it supports the concepts that I teach in the
course in a very direct way.
CLU stands for Cluster, and cluster is a construct in
the language that allows you to define data abstractions. I find that when I teach the course in CLU, the
students have an easier time coming to grips with the
concepts than they do in some other language where
they often have other types of problems they have to
overcome.
M a G l ~ l . l e e r l : I think a language that allows one to
reveal principles in a relatively uncluttered and nonidiosyncratic way is preferable. I think Scheme has
been quite successful and is quite attractive as a language for teaching programming. Certain aspects of
programming can be illustrated very nicely with
Scheme. On the other hand, I think Scheme is rather
one-sided, because it doesn't allow one to teach the
principles of types and data-abstraction very clearly at
all. So it is excellent from one side-for the control
structure and for basic functional program construction-but it falls down on types and interfaces. So, a
lot of places use ML as a modern high-level language
that has an excellent type system and excellent support for data abstraction and so on. Perhaps some
combination of Scheme and ML is ideal.
24
O u r Field
~ammet:
At this time, I would say Ada is the best
language for teaching, because it has an enormous
number of effective features. In order to write Ada
programs, you almost have to write reasonably decent
code. That is to say, it forces you to do some things
that are proper, that other languages don't force you
to do, and sometimes don't even allow you to do. Ada
is also the best language for software engineering.
And software engineering, of course, is the current
buzzword for people who want to write programs that
are efficient and correct. I ' m not saying you can't
write bad Ada programs; you can. But there are a lot
of facilities in there that allow you to write better applications than you can in many other languages.
~thi:
It depends on what you want to teach. I'll
give you a specific example: in the programming languages book I have written, in the second edition, the
early part of the book uses C++ and Pascal, and the
reason is that C++ and Pascal are used so widely that
it is good to be able to expand on peoples' experience. But at the same time, there are also functional
languages, there is logic programming, there are a
variety of languages, and it depends on what you
want to teach. When studying type checking, for instance, functional languages have been very convenient. So really, it depends on what you want to teach
and what level of people you are teaching.
,~191ith: I think I'd choose Scheme at the moment.
The reason I'd choose it is that I think it's possible to
explicate more concepts in programming languages in
Scheme than in any other language, while keeping the
language simple. Although the language isn't complex, its flexibility and richness is great.
~teele:
Well, let's see .... I ' v e got two different
answers to that, and the way you answer depends on
the qualifiers in the question. Speaking globally, I
think the most important thing about a programming
language is that the teacher doing the teaching be
genuinely enthusiastic about it and its concepts. And I
think that there are lessons to be learned from any
language, if they are explained properly; if the lecturer does a good job of it.
If I were teaching myself, my favorite is still the
Scheme language, simply because it allows you to
explain a very large class of interesting concepts,
many of which don't appear in other programming
languages, with a minimum of mechanism and formality.
Str0ustrup:
I guess training aimed at producing professional designers and programmers is the easiest. You can assume they will spend sufficient time and effort for
real understanding - at least you ought to be able to.
In this case a functional language (say ML or
Haskell) plus a dynamically-typed language (say
Smalltalk or some LISP) plus C++ would seem right.
Leaving out C++ in favor of, say Ada or Modula 3,
would simply ensure that the student picked up a
messy mix of C and C++ indepdndently.
For professionals in other fields that want to learn
enough to use it in their main line of work, I suspect
the best method is to teach whatever they will use.
That would often mean FORTRAN, Visual BASIC,
C, or C++. In all cases, I suspect the teaching would
be heavily biased towards use of popular tools and
libraries.
For most other kinds of students, I doubt that I have
sufficient direct experience for my opinion to be of
interest.
m~lnellbaU111: Probably C, but I wish Dennis had
gotten the operator priorities right.
Weglllan:
25
A h o : We are now starting to get into issues of software engineering. And the choice of language is not
nearly as important as the process used to create
software. If you are interested in producing efficient
and portable programs, you probably can't beat ANSI
C. C++ seems to be also very high on the list in terms
of ubiquity and efficiency. For some other kinds of
tasks you may want to use more specialized scripting
languages or languages that have application toolkits
that are appropriate tbr that domain. A lot depends on
what kind of software you are writing, and for whom
you are writing it, as to what is the best language. In
my commercial experience, I think it's ANSI C and
C++, hands down.
Allen:
A s s e s s Our Field
and use it the way you want to. It stops people fighting with each other over which language to use.
Goldberg:Smalltalk, again.
Kel'lrlsdy:
26
~teele:
down to a particular language. I have been in industrial consulting situations where for some purposes I
have recommended using LISP, in some cases I recommended FORTRAN, in some Pascal, and in some
cases TECO, which was a programmable text editor
of 20 years ago. There was a case where the problem
was to convert a PDP11 assembly language program
that had been written for one assembler, and needed
to be compiled by another assembler whose syntax
was different, and it was a one-shot conversion job,
and maintainability of the conversion routine itself
wasn't an issue it was getting the job done. And for
that, writing a pile of macros for a programmable text
editor was the way to go, even though as a programming language it was really awful. What is best depends on the industry, it depends on the problem at
hand, the longevity of the program and the nature of
the task and all sorts of things.
Stroustrup:
c++,
followed by C. COBOL
where conditions demand it. C++ and C are best because of their flexibility, availability, efficiency, programming tool support, design support, educational
infrastructure.
There is much, much more that could be done in the
education areas, though. Far too many educators are
still stuck with a view of C++ as just a variant of C or
just a variant of Smalltalk. That confuses programmers and designers and hurts their performance.
T a n e n b a u m : c.
Wegman: At this point C++ and Smalltalk are the
best. Because they exist on all platforms.
W t l l f : Again, you're going to get a complicated answer to that question. I don't think language is a firstorder issue in software quality. It's an issue, but I
don't think it's the first-order issue. So again, I think
there are pragmatic concerns-number of programmers available, ability to interface with code written
elsewhere-that drive me to the de facto standard:
C/C++. In an abstract sense, I do not consider them
the "best language;" I say what I said kind of holding
my nose.
Goldberg: Smalltalk,
27
Sixteen Prominent
Computer
Scientists
Assess
28
Our Fidd
Stroustrup: c++.
Goldberg:
29
many people want. The language itself is quite powerful and could be compiled directly to the target machine to achieve high performance. I like it because it
makes it easier to write programs in an objectoriented style that you can debug with reasonable
confidence, and you don't have to worry about the
errors of accidental deallocation that are common in
C++. You can write programs in Java and debug them
more quickly. It's missing some of the more powerful
features of C++ but the combination of features and
simplicity in Java strikes a good balance.
Liskov:
favorite language, because it is arguably the best attempt so far to combine security and expressiveness
and for many tasks it makes programming far easier
than conventional languages. In the future there's
plenty of work to be done. One issue that needs to be
looked at is; what is the relative role of ideas from
functional languages and their associated type systems, and object-oriented languages and their associated type systems. Do these two paradigms integrate
well? And what does each have to offer? That's one
area of current research that I ' m involved in.
, ~ a l T I I l l e t : I have a very soft spot in my heart for
COBOL, because I was on the original C O B O L
committee and I was one of the key people involved
in developing that language. It's my favorite because
I helped to create it.
~ethi:
S i x t e e n P r o m i n e n t C o m p u t e r S c i e n t i s t s A s s e s s O u r Field
Smith:
,:Gtroustrup:
30
Tanenbaum: c .
W~gl,112tll: No, I don't have a favorite. It's less the
language than the environment. So, for example, there
are things that Smalltalk does better than C++, but the
resultant code is likely to be slower in certain applications. You wouldn't do scientific computation in
Smalltalk because of the speed. And there are certain
things you wouldn't do in C++ because, among other
things, it's missing garbage collection and other rudiments of modern programming languages, and the
compilation is slow. And so it's more an artifact of
the environment-which is influenced by the language-but I believe in almost most cases one can get
around with enough environmental support. I tend to
use whatever language is most appropriate for the
application.
W u l f : That would be Icon.
Allen: Well,
(.~OldlgePg:
31
S i x t e e n P r o m i n e n t C o m p u t e r , S c i e n t i s t s A s s e s s O u r Field
~ammet:
That's easy: FORTRAN. Because it
was the first programming language that became
widely used. It wasn't the first high level programming language, believe me; but it was the first one
that became widely used. And the original
FORTRAN compiler was very efficient, which meant
that people were actually able to use it, and it could
become reasonably competitive with assembly language. If the first FORTRAN compiler had been inefficient, I don't know what it would have taken to get
us out of assembly language and into a high level
language.
~ e t h i " Well I think the most significant thing,
thinking aloud for a moment, is that languages have
evolved. It's not that languages began without any
history. I think I ' m led back to sort of the earliest
contribution where the break was made with machines. Initially with FORTRAN, and then immediately after with LISP. McCarthy's LISP interpreter is
a marvel.
~ l l ' l i t h : Boy, that's hard. I'd have to say, the invention of the procedure.
Stee[e:
Well, there are three ideas competing in
my mind at once, and I ' m trying to sift through them.
The first answer has to do with contributions to programming language theory, and I point particularly to
the work of such people as [Alonzo] Church and
[Haskell] Curry and Dana Scott. The whole business
of lambda calculus and related formalism such as the
32
Stroustrup:
Tarlen~tlm:
The invention of C.
Wulf:
Its one of the few areas of computer science in which theory has had a profound
impact; particularly language theory, algorithms and
logic. I think compilers are a triumph of engineering
with a solid scientific foundation underneath them.
--
A I i e l l : There have been a series of wonderful results. Significant ones have been: parsing, that's a
wonderful story there; register allocation; program
optimization; analysis and optimization .... Those are
all classically beautiful scientific and pragmatic developments.
33
piler. I believe it was Irons who developed the concept, the syntax directed compiler for ALGOL, but it
would have to be the syntax-directed compiler.
, s i x t e e n P r o m i n e n t C o m p u t e r , S c i e n t i s t s A s s e s s Our Field
Weglllan: The
34
Allen:
I feel very strongly that we have not progressed very far with programming languages as far
as making them easy to use. We have some wonderful
tools now, and certainly everything on line, GUI interfaces, things like that. But in the core of writing
programs, designing large systems, I think we have
not made the progress we should have.
Developing software applications, particularly large
software applications, continues to be a major and
very hard problem. And I have always believed that
the language in which these are expressed is very key.
And I think we in the language community have
fallen dismally short in that area.
~enni~:
35
perhaps the hardest one in compiling and also probably in programming languages. But the problem is not
only hard, it is also important. If we can achieve this,
we can make it possible for people to write programs
that map to a wide variety of machines. We had that
with FORTRAN a long time ago, and to some extent
with C. But with the advent of parallel machines featuring deep and varied memory hierarchies, people
are writing programs that are quite machine-specific.
We need to get away fi'om that, if we are to see more
progress in development of programming.
[ . i ~ k o v : Well, language design is very difficult. I
think very few people do it well. Another problem is
getting new languages adopted. Goodness and durability don't coincide. People go for the language that
is well supported; where they can feel that it will be
available on all machines. And that's been an important factor on deciding which language to use, and in
which languages have become popular. I think that's
a major impediment to other languages getting
adopted. The other impediment, of course, is just
familiarity. People get set in their ways. They're used
to using particular languages; they may be a little
reluctant to change. Of course they may have a huge
code base to support as well, so they have to worry
about whether the new code will be compatible with
the old code.
M a G l ~ u e e n : Probably the hardest problem, over
all, is how to support very large-scale programs;
scaling up to very large systems. But that's a fairly
vague problem to attack. More precisely, how do we
deal with concurrency; both local concurrency and
distributed concurrency? We don't really have good
language mechanisms that tame concurrency and distribution. So I think this the hard problem, and a very
relevant problem for programming language research.
, ~ e t h i : Well I believe that usability is the main
thing for a programming language, and what's happening is that we keep applying computers to do new
things, and our user interfaces become more and more
complex. So I think some of the challenges lie in how
languages combine well with not only the computational tasks that we have really come to understand,
but also integrate nicely with the user interface.
I think we keep changing what we compute with. If
we go back into the Fifties, computation was with
numbers. After numeric computing came an emphasis
on symbolic computing. Now we have multiple devices that we use; we use mice and keyboards, and
present things graphically and visually, so how we
interact with computers keeps changing, and as we
S i x t e e n P r o m i n e n t C o m p u t e r S c i e n t i s t s A s s e s s Our Field
~teele:
Aho:
Software engineering right now is a very immature discipline. I think software engineering will
start to mature. I think programming languages will
be thought of in the context of the software engineering life cycle.
"~.
And the whole notion that the way you describe what
you want to happen has to be a multimedia event. If
you stop thinking about a programming language as
text, as tokens, but instead as multimedia, ten years is
a reasonable time to expect some results there. What
the hell is the purpose of a programming language if
not a means to boss the computer around? It's certainly not so that the computer can boss us around;
which, by the way is what some people think it is ....
37
..:Sixteen P r o m i n e n t
Computer S c i e n t i s t s A s s e s s
MacQueerl:
I think the magical aura of objectoriented programming will have faded by then, just as
the sort of magical aura of structured programming
faded by the 1980's. Object-oriented programming
will have been boiled down to a certain number of
ideas and techniques that can be mixed with other
ideas from functional programming, and various advances in types and program structure, and so on. So I
think the design repertoire will be more eclectic, and
there will be less focus on magical panaceas. There
will probably be more progress in concurrency and
parallelism, and we will regard this as more routine in
day-to-day applications programming. But I don't
think it will ever become extremely simple. I think
concurrency, logically speaking, is an ingredient that
adds difficulty, rather than subtracts difficulty, from
the problem of developing software.
SaMllTlet: I think that the emphasis in the computer field has shifted from programming languages. I
don't think they are anywhere near as important as
they were even ten years ago, let alone 20 or 30 years
ago. The reason is that so much work is done on PCs
with canned applications, and while there certainly
continues to be research done on programming languages, I just think they are no longer the central
pivot in the computing field that they were for many
years. You no longer have to be a programmer to sit
down and use a computer.
Sethi:
Smith:
I think we'll see more programming languages than we have now; the number of programming languages in existence will grow. I think we will
probably see more type-safe, conservative languages
being used; e.g., Java vs. C++. That's the kind of
language I ' m talking about.
S t 8 6 1 e : I think there will three or four programming languages that are in widespread use, and people will continue to argue over which is the best, to
38
Our Field
Stroustrup:
Tanen~aulTl: C++++.
W e g l T l a r l : I don't know the answer to that. I think
there's been a little bit of maturing, or alternatively
you could call it hardening of the arteries in the programming community. And I haven't seen as many
calls for radical new direction, although I'd like to see
them. So I ' m not sure that I want to say that my vision is that we will stop making progress, although
I ' m a little afraid of that. But I think if you look at
what I said were the hard problems-I think progress
in that direction would be extremely valuable.
Wl,llf: You're not going to like this answer; I hope it
disappears. The number of new ideas being introduced per unit time seems to me to have dropped
dramatically. And the relative impact of those ideas
has dropped dramatically. One of the worst things
that you can do in any discipline is to keep working
the problem past the time when it is solved, or solved
well enough. I could be completely wrong; someone
could come along tomorrow and demonstrate some
new idea that makes this sound stupid. But having a
large number of people making small incremental
advances that, by and large, don't get adopted, is not
a very wise use of the community's time.
Ferrante: Well
39
Kennedy: I
Sixteen
F:'rominent Computer
Scientists
A~see~
MacQueell:
I don't really believe in major paradigm shifts, because they tend to overemphasize some
idea to the point of diminishing returns. I think the
object-oriented field is an example of overemphasizing a set of ideas uncritically. So I think we
will probably see continued evolution and refinement
of the various ideas we have now, and, as I said, more
of a mixing of concurrency and distribution into our
programming. And, at the extreme, there are things
like mobile computing and programming the World
Wide Web that will cause a lot of excitement and
pose a lot of new challenges.
S ~ t h i : I think how we deal with concurrent and
distributed computing is where there are possible
paradigm shifts.
Slllith:
O u r Fi~lcl
41
Sixteen
Prominent
Computer
,Scientists Assess
O u r Field
Dennis:
In a sense, all of these exist today, but they will continue to evolve over the next decade. We have C,
C++, Java, and FORTRAN, but they will be very
different ten years from now. For example,
FORTRAN will have a lot of the features that are in
more modern languages, like object orientation. It
already has supports pointer-based structures and data
abstraction now. Scripting languages also exist, but
there hasn't been a consensus on a standard scripting
language. I believe that will happen in the next decade, driven by the PC world.
Ferr'ant:
Liskov:
around. And I think there will be much more emphasis on information processing and information retrieval systems which will make our notion of languages change, in terms of the everyday person being
able to use computers. I think there will be a notion of
language that is much more like natural language that
people will use when they interact with computers.
There will still be, in some sense, underlying languages as we know them, but I think we're going to
build better user interfaces that will require languages
that are more like the way people want to use computers; and as that becomes more and more common,
languages will change so that maybe they'll be more
visual, and maybe they'll have other aspects to them
that we don't use right now.
Kennedy:
42
~teele:
43
Dennis:
Goldberg: I
Sixteen
Prominent
Computer
Scientists
Assess
O u r Field
Tanenbaum:
gramming.
Sartlm~t:
I'll deal with both the undergraduate
and the graduate at the same time. I think the key
language for them is Ada, because it is a very large
language, and has a great many features and paradigms of which a few show up in other languages. So
my advice to both of them would be that that is where
they ought to concentrate their efforts and be sure
44
W 6 g l g l a l ' l : They should learn to write their programs so that they are maintainable and modifiable
over time. I think there are ways to do that in COBOL
and the more advanced languages. They should learn
from the more advanced languages the techniques
that they are going to apply.
b) a graduaCc sCudenC
Aho:
45
Kennedy:
S i x t e e n P r o m i n e n t C o m p u t e r S c i e n t i s t s A s s e s s O u r Field
Steel8:
Now we are getting more focused. They
have already decided to enter the field in some sense,
so the best advice there is: Study the past. "Those that
don't study history are condemned to repeat it." Study
the great designs of previous programming languages;
ALGOL 60 is an example. Study SIMULA 67, study
COBOL. Also, go to conferences, get involved with
ACM and IEEE and other organizations that can provide you with the knowledge you need to know. The
important thing is to soak up information. Soak up
knowledge about the things that have been done in
the past, and what went right, and what went wrong
with them.
~3troustrup: Often
Aho:
Goldberg: If
Wulf:
Kennedy: Keep
reading and keep learning, because there will be new programming languages
which will supplant old ones, and some of these will
be more powerful.
46
I IIIIH
P r o g r a m m i n g Languages, P a s t P r e s e n t and F u t u r e
Sethi:
trial setting, we've been talking a lot with our colleagues that are doing program development and exposing them to how programming languages and
compilers can be used as tools to make the job easier.
So it's not just what programming language are you
using, but for the domain you are dealing with, are
there specific languages that could be designed or
tailored that would dramatically improve productivity?
Smith:
This is an industrial employee who is engaged in the development of compilers, or interpreters, or new languages or whatever? Presumably this
person is educated and able to do some of this, although if they're about to enter the field, they don't
have much experience. There's one piece of advice
everyone should have, I guess, and that is: language
translation in any form is a compromise between the
efficiency of translation and the efficiency of the executed code. So perhaps they should keep that in mind
as they start to develop such things.
Steele:
My basic inclination
is to recommend learning new things, poking into
47
Tanenbaum:
signing.
Wegmarl:
important areas are the open problems that I mentioned earlier. A researcher in programming languages has to know the whole field; so you must be
acquainted with object-oriented languages and functional programming languages; you have to know
their type theory, and so on. If one is not in programming language research, per se, then it depends on the
area of research or the particular project you are involved in.
Sethi:
Goldberg: Now
Liskov:
48
dent. Maybe even more strongly. However, the pressure of a family or the pressure to succeed, as measured by external forces-publish or perish, get tenure
or leave town-can be quite deadening. It is easy to
recommend taking a risk, but that's hard advice to
take. Also, do try to write papers that are comprehensible to more than a small group of professors and
graduate students.
T a l a e l a b a t l i T l : Be sure to write tots of papers.
Wulf:
.....
49
Assess
have without understanding the context, and the major software problems that are surrounding our work.
What I ' m saying is that we may not be solving the
right problems.
D e n n i s : Thanks for giving me the opportunity to
stand on my soap box and say a few things, particularly about the problem of encompassing concurrency
and supporting parallel computers as being the main
problem area in programming languages.
I would like to point out that there is an important
computer science problem that is larger in scope than
programming languages itself: making a good accommodation between computer architecture and
programming languages. At this time, programming
languages are still generally used only to describe
what goes on in the main memory of the computer;
programming languages do not provide support for
making use of operating system facilities, other than
library calls. The operating system facilities make up
an enormous part of what a current contemporary
application is up to. File system use, concurrency
primitives, message passing, synchronization, protection concepts-these are all utilized through the operating system and are not normally represented in programming languages. The related problem in computer architecture is the fact that the addressing
schemes built into the hardware are not universal; this
makes it very difficult for a compiler or programming
language designer to address these issues and expand
the scope of programming languages to what it should
be. A programming language should encompass all
the facilities that a programmer needs to express an
application, and at the present time they do not do
this, because they do not cover the facilities provided
by the operating system. A major revolution is
needed, but I don't see how the industry will move in
the needed direction. The revolution concerns
changing the addressing schemes of machines to a
more universal kind of addressing of data, an addressing scheme that will permit the sharing of arbitrary data between users and between application
programs.
F e i " v a n t e : It's really been an amazing 50 years,
and what seems to be happening now is that the rate
of change is just accelerating so quickly. I think that's
going to have a big effect on the field, too. It's going
to really make a change in ways that we can't envision right now, perhaps because the emphasis on
change and integrating is going to have an effect on
business as usual. W e ' v e gotten to a point where the
change is so rapid that it's got to be a primary consideration for everybody.
50
O u r Field
Kennedy: I
would re-emphasize something I already said. Compilers are a way to make programming languages effective and usable. There's long
been a sort of golden dream of programming languages to provide a very high-level interface to really
increase productivity for the individual programmer.
I don't think we should give up on achieving that
goal. It's going to come because of progress in the
architecture of fast machines and all we have learned
about how to analyze and improve efficiency for programs as a whole.
In the near term, two things may happen: we're going
to be able to implement very high level languages,
even domain specific languages, and properlydesigned programming languages may make the individual user of personal computers into a potent programmer. Then we will really begin to see increases
in software productivity.
M a c l ~ u 8 8 1 1 : I think programming languages is a
fascinating field, because it's the first time that human
beings have set out to consciously create artificial
languages, with the exception of phonetics for a few
languages like Esperanto. The creation of artificial
languages is an exceedingly interesting pursuit. And
the development of programming language is still in
its infancy, although we have a tong heritage from
mathematics, in the formation of notations and formal
ways of description and reasoning, and so on. But we
have a lot of progress to look forward to; a lot of new
understanding to achieve. I think that's the real prospect of the field.
~ t 1 " l l T l e t : Yes. There is another point, that historically I consider important, because a great many
of my computer science friends and colleagues don't
Programming Languages, P a s t P r e s e n t a n d F u t u r e
The second major reason that there are so many programming languages is personal preference and style.
Programming languages have very different styles
depending on the opinions and views of the people
who are developing them, or causing them to be developed. And therefore, when you get down to these
very narrow application areas, these specialized languages exist.
Let me give you an interesting example that might
help you understand why there are these specialized
languages: for many years I gave talks on programruing languages. And I always gave examples of a
couple of these very narrow languages. One of the
examples I used was COGO. After one of my lectures, somebody came up to me and said that COGO
was very useful to him because he was a civil engineer, and the notation in COGO was just the type of
notation that Civil Engineers use in their written discourse. This was surprising to me, because I had no
idea that the notation in COGO was based on Civil
Engineer's written discourse or oral discussions, because I had never talked to a Civil Engineer or participated in their discussions. But that is why there are
so many of these languages in these specialized application areas, because they use notation and words and
phrases and approaches that are relevant to the application area. Languages like COBOL, and FORTRAN
and LISP are dealing with very much broader areas.
Even though there are substantive differences in these
broad languages, and they have different capabilities,
nevertheless they are intended for much wider and
broader applications.
~ t t l i t h : I think we suffer a little bit from a macho
sub-community that thinks that programming in the
large is just as easy as programming in the small, and
we don't need programming languages that are more
safe than what we have. I think that's wrong. We have
a major software development problem simply because the computer architects and the compiler writers have done what was expedient rather than doing
what will allow and enhance the ability to engineer
large systems, i.e., large collections of code. We need
to pay more attention to the things in our programming languages and their implementations that enhance our ability to write large-scale software systems
and know that they work.
S t e e l e : We've progressed far enough in programming language design that we have a number of very
good tools at our disposal now. And its really hard to
get a new prograrmning language accepted purely on
its technical merit as a programming language because now it's really hard to be enough better than
A s s e s s O u r Field
52
guages, these questions are too focused on programming languages and language-implementation techniques. What really matters is programming and understanding of problem areas. The language used to
express the ideas is secondary. Wherever possible try
to look at the tasks faced by programmers delivering
systems to non-programmers. This is the area where
the hardest problems are, so this is where the most
interesting solutions are likely to come from.
m a r l e M l ~ a u m : The golden rule of programming
language design is (or should be): KISS-Keep It
Simple, Stupid.
Programming
Languages, Past
Present
,.and F u t u r e
A B r i e f Look a t O u r P a r t i c i p a n t s
Alfred V.
Aho
53
Fran Allen
Watson Research Laboratory and was the t995 President of the IBM Academy of Technology. Ms. Allen
specializes in compilers, compiler optimization, programming languages, and parallelism. Her early compiler work culminated in algorithms and technologies
that are the basis for the theory of program optimization and are widely used throughout the industry.
More recently she has led compiler and environment
projects resulting in committed products for analyzing and transforming programs, particularly for paralM systems.
Fran is a member of the National Academy of Engineering, a fellow of the IEEE, the Association for
Computing Machinery (ACM) and the American
Academy of Arts and Sciences. She is on the Computer Science and Telecommunications Board, the
Computer Research Associates (CRA) board, and
NSF's CISE Advisory Board. She holds an honorary
D.Sc. from the Univ. of Alberta.
Jack
B.
Dennis
member in the MIT Department of Electrical Engineering and Computer Science since 1958, and is now
Professor Emeritus of Computer Science and Engineering.
In 1963 Prof. Dennis formed the Computation Structures Group (CSG) in the MIT Laboratory for Computer Science and led the formulation of the dataflow
model of computation that has influenced computer
architecture projects throughout the world.
The CSG, in cooperation with the Lawrence Livermore National Laboratory (LLNL) created the Val
programming language in 1978. Val is the forerunner
of Sisal, the functional programming language that
has had the greatest influence on scientific computing.
In addition, the group has contributed in theoretical
areas ranging from the theory of Petri nets to the se-
S i x t e e n F ' r o m i n e n t C o m p u t e r S c i e n t i s t s A s s e s s O u r Field
mantics of programming languages and formal operational models for computer systems.
Professor Dennis has supervised more than 25 doctoral research students, has published several books
and numerous technical papers, and provides consulting services to the computer industry.
J e a n n e Ferrant, e
Adele
Kenneth S. Rubin.
Ken
in mathe-
r ~ a ra
Liskov
majored in mathematics
David MacQueen
~lTlmst
Mount Holyoke College, and then attended the University of Illinois, where she received her MA in
mathematics. She received an honorary Sc.D. from
Mount Holyoke in 1978. Dr. Sammet has been active
in computing since 1955, when she was the first
group leader for programmers in the engineering organization of the Sperry Gyroscope Company. In
1956 and 1957 she taught some of the earliest computer classes ever given for academic credit, at Adelphi College on Long Island. During her second year
of teaching, she used the just-released FORTRAN
language in her classes.
Dr. Sammet joined Sylvania Electric Products in
1958, as Section Head for MOBIDIC (a large computer of that time) programming. She was a key
member of the COBOL committee, starting in 1959,
until she joined IBM in 1961.
At IBM, Dr. Sammet was charged with organizing
and managing the Boston Advanced Programming
Department. One of the key efforts of that department
was the development of FORMAC, the first programming language for symbolic mathematics.
Dr. Sammet has given many lectures and written numerous articles on symbolic computation, programming languages, and the history of both. In 1969 she
published the highly regarded book Programming
Languages: History and Fundamentals.
Dr. Sammet has been active in professional societies,
serving at various times as ACM SIGPLAN Chair,
ACM Vice President, and ACM President. She has
been Editor-in-Chief of A CM Computing Reviews and
the ACM Guide to Computing Literature, and was the
Program Chair for both the first and second ACM
History of Programming Languages Conferences.
ware Principles Department in the Computing Sciences Research Center of Bell Labs, Lucent Technologies. He joined Bell Labs in 1981 after five years
as a research fellow at the University of Edinburgh
and a year at the USC Information Sciences Institute.
His research concerns the design, semantics, and implementation of functional programming languages,
particularly their type and module systems. He was
55
S i x t e e n P r o m i n e n t C o m p u t e r S c i e n t i s t s A s s e s s O u r Field
vi Sethi
Durton J. Smith
L. S'~eele,
Jr,,
received a degree in
Bjarne Stroustrup
56
Andrew S. Tanenbaum
attended
Dr. Tanenbaum has written many books on the computer science field, including a 486-page MINIX
manual describing the operating system he wrote
himself.
Mark
Wegman received
his doctorate
William
Wulf
received a BS and an MS
57