Previous Table of Contents Next


Part II
Smalltalk

3  The Community of Smalltalk
4  Programming with Smalltalk
5  Smalltalk: A Developer’s Perspective

Chapter 3
The Community of Smalltalk

by Adele Goldberg

3.1. The Smalltalk Vision

Alan Kay had a vision of computer technology. Everyone, regardless of age, social background, or profession, would be able to use technology to access everyone else. Everyone, regardless of interest, education, or skills with computer technology, would be able to use a computer to access textual, graphical, audible, static, and dynamic information. Everyone would be able to use this information to test personal models of the world.

When Kay included the idea of modeling in his dream of everyone’s computer technology, the realization of his vision changed. The vision of accessibility was formulated in terms of a small, affordable computer with network access to information from other computers. This vision he called the Dynabook. But the vision of modeling added the need to include programming support with the Dynabook. Someone had to program the Dynabook with models: models of physical and social processes, models of gaming techniques, models of businesses. Kay thought that everyone should be able to program the Dynabook. The vision of programming was understood as the ability to create simulations. These simulations are complex systems that should be created using modular designs that hide details when appropriate and expose them as needed. Kay called this programming language for everyone Smalltalk.

The design history of the Smalltalk family of programming languages is intrinsically interleaved with the history of personal computing at Xerox’s Palo Alto Research Center (PARC). Each iteration of the programming language design involved new language specification, implementation on next-generation personal computer hardware, exploration of information access and manipulation applications, and trials with people who were not computer professionals. The implementation and application experiences necessarily influenced the software and hardware designs for the next iteration. This research cycle started in 1971 and ended around 1983 with the first public release of the language from Xerox. By 1984 the language had entered a commercialization stage, where the major changes were in class libraries and tools to support large system development. By 1996 the language’s growing popularity waned in the face of poor business practice and the marketing skills of the Java proponents. The enthusiasm of the community of Smalltalk users, however, continues undaunted as they view the various commercial and free Smalltalk language systems (including Squeak, LearningWorks, GNU Smalltalk, and Little Smalltalk)1 to be the most productive work environments available. Users measure the success of the language as much on its impact on rapidly and effectively building and maintaining business systems as on the extent to which it influences their own thinking processes.


1Both GNU Smalltalk and Little Smalltalk are public domain versions of Smalltalk available on a CD-ROM packaged with a book (Pletzke, 1997) that also provides public class libraries and comparisons of commercial systems. Squeak and LearningWorks can be found on their respective Web sites on the Internet.

3.2. Smalltalk-71: First Efforts

In 1971 Alan Kay joined the recently founded Xerox PARC to explore his vision of computer technology. His vision was the Dynabook, best described in the 1977 IEEE Computer paper about “personal dynamic media” (Kay & Goldberg, 1977). The vision expressed by Kay was a remarkable synthesis of ideas gleaned from very early ideas of Vannevar Bush (Bush, 1945), including the design of the Burroughs 220 and B5000 (Ivan Sutherland’s Sketchpad graphical object manipulation and windows to a virtual computer world [Sutherland, 1963]), various programming languages (JOSS [Shaw, 1964], EULER [Wirth & Weber, 1966], LISP [McCarthy, 1960], and SIMULA [Dahl & Nygaard, 1966]), and personal learning experiences acquired while studying mathematics, biology, and computer science in the U.S. Air Force. Members of Kay’s original research group (the Learning Research Group) were forever stimulated by his presentations of old films and slides, as he cajoled them to learn from the past while creating the future.2


2The community that invented and reinvented Smalltalk over more than two decades is large, too large to name each individual and their contributions. See Alan Kay’s own history for a list of early contributors (Kay, 1996) as well as the acknowledgments in the original Smalltalk-80 book (Goldberg & Robson, 1983). Inclusion of references here is done only to support the telling of the history and is not necessarily a statement of relative importance.

The fundamental idea found in these related designs and experiences was the use of master descriptions that could create instances, each of which was an independent entity controlled either by a system of constraints or by a procedural programming language. Kay observed that this idea could be described as a complex computer system with a collection of smaller computers, each an independent simulation endowed with the power of a whole computer. Herbert Simon, too, argued that systems can best be understood by separating description from implementation (Simon, 1969). The description, defined as the interface of each system part to an outer environment, states the goals or role of the part. The details of implementation, or the inner mechanisms, can differ among parts with otherwise similar goals.

The first language Kay called Smalltalk was Smalltalk-71,3 but this language was never actually implemented. Although it was the first Smalltalk, Smalltalk-71 was the third design for a Smalltalk language. The first design was for the FLEX machine (Kay, 1968), which consisted of object structures for a master and its instances, a syntax-directed compiler, an I/O handler, and a simple display editor for text and graphics. Kay worked on the FLEX machine with Ed Cheadle, influenced by the “human-oriented” interface work of Doug Engelbart at the Stanford Research Institute Center for the Augmentation of the Human Intellect (Engelbart & English, 1968). Engelbart’s own vision of collaborative work encouraged Kay to think that the Dynabook needed a system that could be extended or tailored by its user.


3Note that the numbers in the language version, such as 71, represent the year of design, not necessarily the year that the version of the language was fully implemented or the sequential version number.

The second Smalltalk, again designed in the context of the FLEX machine (Kay, 1969), was based on ideas from the language IMP (Irons, 1970) in which every procedure in the system defined its own syntax. This Smalltalk treated each object as its own syntax-directed interpreter of messages or requests to carry out function. The designs for Smalltalk-71 and Smalltalk-72 retained this object-defining syntax. The single fundamental representation, the object, tied function to the information needed to carry out that function. To use the function of an object, you send the object a message; the object then accesses and modifies its private memory to formulate an appropriate message response. No user has direct access to the private memory of the object. Thus, the notion of an object is like that of any well-defined system component. An object consists of an external aspect, defined as the message interface or set of functions that the object can be called on to perform. And it consists of an internal aspect, defined as the implementation of the messages and the description of a set of properties whose values persist over the object’s lifetime. The Smalltalk/FLEX processing model involves synchronous messaging. An object sends a message and waits for a response.

The actual semantics of a Smalltalk-71 message expression were not known until runtime. At runtime, the interpreter determined which object was to receive a message. The object then parsed the input stream to identify the next message, searched the object definition for a method associated with that message, and then gave control to that method. In Smalltalk-71, the method could continue to parse the input stream for additional information and then compute a return value. This value was itself an object that could take control of the parsing process. Identifying tokens as object and message names, and identifying the meaning of these names, was thus determined dynamically at runtime. Multiple and independently defined objects could be sent the same message, with each independent type of object responding differently.


Previous Table of Contents Next