Alan Kay: The Early History of Smalltalk

by way of lispmeister
(PDF scan or HTML)

Smalltalk's design--and existence--is due to the insight that everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages.

Really double-extra good.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Design by Committee

Programming languages can be categorized in a number of ways: imperative, applicative, logic-based, problem-oriented, etc. But they all seem to be either an "agglutination of features" or a "crystallization of style." COBOL, PL/1, Ada, etc., belong to the first kind; LISP, APL-- and Smalltalk--are the second kind. It is probably not an accident that the agglutinative languages all seem to have been instigated by committees, and the crystallization languages by a single person.

I don't think this is really true. I think the conclusion is a generalization we would be wise to avoid (many ugly languages were designed by individuals, for example). I also think the historical record should be set straight. Ada, for example, was essentially design by Ichbiah. Ada95 was primarily designed by Tucker Taft. The fact that both had people wokring for them (or with them) shouldn't obscure this fact. If you must hate Ada, find other reasons to do so.

I think the Scheme story is rather similar.

Design by Comitee

When I hear this kind of generalization I always remember that C# is mostly a work of a single designer while Haskell was created by many hands.


C# is mostly a work of a single designer...

James Gosling? I don't think that this is true; didn't Anders Heilsberg contribute a bit also? ;-)


The connection to literacy was painfully clear. It isn't enough to just learn to read and write. There is also a literature that renders ideas. Language is used to read and write about them, but at some point the organization of ideas starts to dominate mre language abilities. And it help greatly to have some powerful ideas under one's belt to better acquire more powerful ideas [Papert 70s]. So, we decided we should teach design. And Adele came up with another brillian stroke to deal with this. She decided that what was needed was in intermediary between the vague ideas about the problem and the very detailed writing and debugging that had to be done to get it to run in Smalltalk. She called the intermediary forms design templates.


Should we even try to teach programming? I have met hundreds of programmers in the last 30 years and can see no discernable influence of programming on their general abiltity to think well or to take an enlightened stance on human knowledge. If anything, the opposite is true. Expert knowledge often remains rooted in the environments in which it was first learned--and most metaphorical extensions result in misleading analogies. A remarkable number off artists, scientists, philosophers are quite dull outside of their specialty (and one suspects within it as well). The first siren's song we need to be wary of is the one that promises a connection between an interesting pursuit and interesting thoughts. The music is not in the piano, and it is possible to graduate Julliard wiothout finding or feeling it.

Cleaned-up version

How nice to see this paper in HTML where it doesn't hurt my poor aging eyes anymore. Watch out though that the HTML is missing the appendices and many of the figures and it's got errors in practically every paragraph. I've gone through it fixing the latter problem (probably introducing some new errors in the process) here -- it'd be great if someone also did the appendices and figures, because it's a wonderful paper.

Favorite Quote

That article was well worth the read.

I thought the comment about how strong paradigms have a tendency to 'eat their young' was an interesting view point.

I thought I'd also quote my favorite paragraph from it:
A twentieth century problem is that technology has become too "easy". When it was hard to do anything whether good or bad, enough time was taken so that the result was usually good. Now we can make things almost trivially, especially in software, but most of the designs are trivial as well. This is inverse vandalism: the making of things because you can. Couple this to even less sophisticated buyers and you have generated an exploitation marketplace similar to that set up for teenagers. A counter to this is to generate enormous disatisfaction with one's designs using the entire history of human art as a standard and goal. Then the trick is to decouple the disatisfaction from self worth--otherwise it is either too depressing or one stops too soon with trivial results.

Origins of message passing

As charged as any quote:

Early next year (1969) there was a conference on Extensible Languages in which alnost every famous name in the field attended. The debate was great and weighty--it was a religious war of unimplemented, poorly-thought out ideas. As Alan Perlis, one of the great men in Computer Science, put it with characteristic wit:

It has been such a long time since aI have seen so many familiar faces shouting among so many familiar ideas. Discover of something new in programming languages, like any discovery, has somewhat the same sequence of emotions as falling in love. A sharp elation followed by euphoria, a feeling of uniqueness, and ultimately the wandering eye (the urge to generalize) [ACM 69].

But it was all talk--no one had done anything yet. In the midst of all this, Ned Irons got up and presented IMP, a system that had already been working for several years that was more elegant than most of the nonworking proposals. The basic idea of IMP was that you could use any phrase in the grammar as a procedure heading and write a semantic definition in terms of the language as extended so far [Irons 1970].

I had already made the first version of the FLEX machine syntax driven, but where the meaning of a phrase was defined in the more usual way as the kind of code that was emitted. This separated the compiler-extensor part of the system from the end-user. In Irons' approach, every procedure in the system define its own syntax in a natural and useful manner. I inorporated these ideas into the second verions of the FLEX machine and started to experiment with the idea of a direct interpreter rather than a syntax directed compiler. Somewhere in all of this, I realized that the bridge to an object-based system could be in terms of each object as a syntax directed interpreter of messages sent to it. In one fell swoop this would unify object-oriented semantics with the ideal of a completely extensible language. The mental image was one of separate computers sending requests to other computers that had to be accepted and understood by the receivers before anything could happen. In today's terms every object would be a server offering services whose deployment and discretion depended entirely on the server's notion of relationsip with the servee. As Leibniz said: "To get everything out of nothing, you only need to find one principle." This was not well thought out enough to do the FLEX machine any good, but formed a good point of departure for my thesis [Kay 69], which as Ivan Sutherland liked to say was "anything you can get three people to sign."

I'm curious about how message passing became seen by some as the key to doing concurrency correctly.

The links in the original

The links in the original post are all dead. Can the author edit?