Before I went on vacation I printed up a copy of Alan Kay’s seminal paper “The Early History of Smalltalk.” The article is quite fine and provides a background on the ideas that were in the computing zeitgeist of the mid- to late-60’s and which lead to the innovative programming language Smalltalk in the late 70’s and early 80’s. Remarkable about this article, and lamentably rare, is that Kay’s erudition in the fields of philosophy and biology shine through in his lucid text and provide a holistic series of metaphors which make his technical writing a joy to read.
I tweeted that it was sad that so many developers today feel it necessary to deride the humanities when Kay’s consideration of, and occasional deference to them, has helped make him such a luminary.
While I would recommend that pretty much anyone in a technical discipline would be greatly enriched by reading the article, here were a few high points that I highlighted as I read.
On: “A Camel is a horse built by committee”
“programming languages can be categorized in a number of ways…all seem to be either an ‘agglutination of features’ or a ‘crystalization of style.’ [A]gglutinative languages all seem to have been instigated by committees, and the crystalization languages by a single person.”
On Inventing Object Orientation
“Smalltalk’s design – and existence – is due to the insight that everything we 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. Philosophically, Smalltalk’s objects have much in common with the monads of Leibniz and the notions of 20th century physics and biology. Its way of making objects is quite Platonic in that some of them act as idealisations of concepts – Ideas – from which manifestations can be created. That Manifestation-Idea – which is a kind of itself so that the system is completely self-describing would have been appreciated by Plato as an extremely practical joke.
In computer terms, Smalltalk is a recursion on the notion of the computer itself. Instead of dividing “computer stuff” into things each less strong than the whole - like data structures procedures, and functions which are the usual paraphernalia of programming languages - each Smalltalk object is a recursion of the entire possibilities of the computer. Thus its semantics are a bit like having thousands and thousands of computers all hooked together by a very fast network. Questions of concrete representation can thus be postponed almost indefinitely because are mainly concerned that the computers behave appropriately, and are interested in particular strategies only if the results are off or come back too slowly.
Though it has noble ancestors indeed, Smalltalk’s contribution is a new design paradigm – which I call object-oriented of attacking large problems of the professional programmer, and making small ones possible for the novice user. Object-oriented design is a successful attempt to qualitatively improve the efficiency of modeling the ever-more complex dynamic systems and user relationship made possible by the silicon explosion.
Programing as Practical Art
Programming is at heart a practical art in which real things are built, and a real implementation thus has to exist.
Encountering an Idea before you can recognize it
I “barely saw” the idea several times ca. 1961…
Demonstrating the Benefits of Cross-disciplinary Thinking
My biology major had focused on both cell metabolism and larger scale morphogenesis with its notion of simple mechanisms controlling complex processes and one kind of building block able to differentiate into all needed building blocks…Bob Barton….said…‘The basic principle of recursive design is to make the parts have the same power as the whole.’ For the first time I thought of the whole as the entire computer and wondered why anyone would want to divide it up into weaker things called data structures and procedures. Why not divide it up into little computers, as tie-sharing was starting to? But not in the dozens. Why not thousands of them, each simulating a useful structure?"
On Understanding LISP
…take the hardest and most profound thing you need to do, make it great, and then build every easier thing out of it. That was the promise of LISP and the lure of lambda–needed was a better “hardest and most profound thing. Objects should be it.
On the Benefits of Simple API’s
It brought home to me once again that “point of view is worth 80 IQ points.” I wasn’t smarter but I had a much better internal thinking tool to amplify my abilities. This incident and others like it made paramount that any tool for children should have great thinking patterns and deep beauty “built in.”
I didn’t like meetings: didn’t believe brainstorming could substitute for cool sustained thought.
Biology As an Object-Oriented Language Designer
…Nature is wonderful both at elegance and practicality–the cell membrane is partly there to allow useful evolutionary kludges to do their necessary work and still be able to act as component by presenting a uniform interface to the world.
Programming and Literacy and Learning to Abstract
It isn’t enough to just learn to read and write. There is also literature that renders ideas. Language is used to read and write about them, but at some point the organization of ideas starts to dominate mere language abilities. And it helps greatly to have more powerful ideas under one’s belt to better acquire more powerful ideas. So we decided we should teach design.
Much Learning Does not Make One Smart
I have met hundreds of programmers in the last 30 years and can see no discernible influence of programming on their general ability to think well or to take an enlightened stance on human knowledge. If anything, the opposite is true.
Tools provide a path, a context, and almost an excuse for developing enlightenment., but no tool ever contained it or can dispense it. Ceasare Pavese observed: to know the world we must construct it. IN other words, we make not just to have, but to know. But the having can happen without most of the knowledge taking place.
…[K]nowledge is in its least interesting state when it is first being learned. The representations–whether markings, allusions, or physical controls–get in the way (almost take over as goals) and must be laboriously and painfully interpreted. From here there are …two…important and intertwined [paths:] fluency…the process of building mental structures that disappear the interpretations of the representations….[and] a metaphor that can illuminate other areas.
On Liberal Arts Education
…[W]hat liberal arts education is supposed to be about, is to get fluent and deep while building relationships with other fluent deep knowledge. Our society as lowered its aims so far that it is happy with “increases in scores” without daring to inquire whether any important threshold has been crossed.
Teaching the Children
[M]any of us want children to understand computing deeply and fluently is that like literature, mathematics, science, music and art, it carries special ways of thinking about situations that in contrast with other knowledge and other ways of thinking critically boost our ability to understand the world.
Women and Computing
Adele [Goldberg] became the design leader in spite of the very recent appearance of a new baby. I have a priceless memory of her debugging away on the [product] while simultaneously nursing Rachel!