• Due before class: 9:50am Friday 6 November
  • Files:
  • Submission:
    • Bring a printed copy to class.
    • commit and push your completed work to your Bitbucket respository.
  • Collaboration:
    • You are encouraged to discuss the readings and questions with other students, but you must write your own responses alone, at a later time.
    • Optionally: Join our tutors starting between 7-8pm (TBD) Thursday 5 November in SCI-E211 for a “screening” of Growing a Language.


In preparation for time in the course spent on object-oriented languages, you will read/watch two pieces about the design of well-known object-oriented programming languages and write brief responses as detailed below. In total, your responses should be under half a page. Compared to readings earlier in the course, these are notably less technical. The first is a quick read. The second is best experienced as audio/video. It runs a bit over 50 minutes. You are encouraged (but not required) to join the tutors and other students for the screening mentioned above.

Design Principles Behind Smalltalk [10 points]

Read Design Principles Behind Smalltalk.
Dan Ingalls (Xerox PARC), BYTE Magazine, August 1981.

Smalltalk arose amidst the graphical user interface revolution of the 1970s and 1980s, with Xerox PARC a major center of action. Adele Goldberg, Alan Kay, and Dan Ingalls were the primary contributors to the design of Smalltalk.

This was truly astounding in its day (some still is!) and forms the basis for much of how we interact with programs today. It’s interesting to consider how closely a new programming language and interface were developed, with the language model forming the basis.


Write a paragraph reflecting on the reading and addressing the following questions:

  • Which of the principles proposed are new (vs. the principles we studied with Lisp/Racket and ML)?
  • Which are reaffirmed from other language designs we have seen? Where is the boundary of the language definition? Does anything surprise you about what features or systems are (not) part of the language? Does the scope of what is the langauge differ from definitions for Lisp or ML?


Growing a Language [10 points]

[ Optional: Join our tutors for a “screening” of “Growing a Language”. See details above. ]

Watch the video of Guy Steele’s 1998 talk on Growing a Language. Follow along on the paper, as the video (converted from late-90s VHS, complete with trippy intro music) unfortunately has occasional skips that lose a few words. You can read the paper without the video, but a key feature of the talk is better observed through the video (mainly the audio).

Note while watching/reading

  • It may take a while (several minutes) to understand why the talk starts in an awkward and simplistic style. Be patient.
  • Recall the talk dates from the late 1990s. The introduction of “man,” “woman,” “person”, and accompanying pronouns at the opening of the talk may not match your understanding of these terms or their relation. Please bear with this to continue to the rest of the talk. It will become clear why these particular terms (and many others unrelated) were used (sometimes narrowly) as the talk progresses.


Write a paragraph reflecting on the reading and addressing the following questions:

  • What does Steele see as the main obstacle to effective programming in small core languages (like Lisp)? Large languages (like C++)?
  • How does Steele demonstrate his thesis in his delivery of the talk itself?
  • What overarching design goal does Steele put forth for the Java language?
  • Do you think this goal is applicable (or worth applying) only to Java, also to other object-oriented languages, or more broadly to many languages?