Douglas Crockford
128
assume that some committee got it right and presented them with a set of
tools or languages, and all they have to do is use it properly.
There are amazing stories about where this stuff came from, and what
influenced what, and who did what, and what is now considered a mistake,
and what should be considered a mistake, but hasn’t yet. I think of myself
sometimes as an archaeologist of software technology and over the years
I’ve accumulated this collection of underappreciated technology, things that I
think were really, really good, which are significantly in advance of the state
of the art of what we’re doing now. I keep hoping that we will somehow
rediscover this stuff and learn to appreciate it and benefit from having done
it, but it’s a really slow process. I see folks are really entrenched in the way
that things are working right now and it’s really difficult to move.
Seibel: What are some of those technologies?
Crockford: Lisp and Smalltalk, you’ve just mentioned. That’s brilliant stuff,
and we’re now finally seeing those ideas being factored into modern
languages, so we’re doing a lot of work now in JavaScript and trying to
modernize that. It turns out JavaScript already anticipated a bunch of that
stuff; it’s got functions which are lexically scoped and first-class, which was
brilliant. Now we’re trying to figure out how to get more of the goodness
of Smalltalk and Scheme into this language without breaking it. You could
argue that we’d be better off if we just threw out everything we’re working
on now and go back to Smalltalk and Scheme, and we probably would be
better off than we are right now, but that doesn’t appear to be an option.
As we’re getting more and more into mash-ups, we want to have code from
all over the place—stuff that we’ll never, ever test with—actually run out in
the field. Which is a new kind of programming. We’ve never done that
before. I think that’s the future of programming and we’re getting to it in
JavaScript first and it’s working here because the language, in spite of all the
stuff it got wrong, got this other stuff right.
Looking at where we’ve come on the timeline of programming, we started
with machine codes and then we took a leap to symbolic assembly language
and then we took a leap to high-level languages and then we took a leap to
structured programming and then we took a leap to object-oriented
programming. And each of these leaps takes about a human generation.