Assignment 9

In this assignment, you will read three historically important articles about programming languages, and answer some questions about them. The exercise will introduce you to some very insightful and persuasive articles by people who know a great deal about programming languages and programming. It's not entirely coincidental that the articles are spaced ten years apart: computer science, like everything else, is very cyclic.

Please remember that there are very few ``right'' answers: I will judge you on the quality of your analysis, not on whether you reflect (what you think are) my opinions (which will sometimes surprise you, I might add). In all cases, if you don't have much to say, be brief; if you say something, be precise; if you say a lot, do it well. Stick to technical facts (or opinions that you believe are facts).

You may not be familiar with Lisp and Smalltalk, the two focal languages here. I won't say much about Smalltalk because I think you can get a pretty good sense of it from the first of these articles. As far as Lisp is concerned, there are two ways to think about it: a more industrial-strength (but hence slightly less powerful) version of Scheme, or as a short-hand for the functional language family (Scheme, ML, Haskell, etc). The second article really thinks of Lisp in the former sense (i.e., it's specifically about Lisp, not about other functional languages). The third one uses half of each interpretation.


Design Principles Behind Smalltalk
Dan Ingalls

One of the remarkable aspects of this article is that it appeared in BYTE magazine, showing that once upon a time, relatively popular magazines cared about foundational ideas, not just Foundation Classes.

Read Ingalls's (somewhat poignant) article. Then answer the following questions:

  1. Consider Java and JavaBeans technology. For each principle or feature of Smalltalk-80 highlighted by Ingalls, is it also in Java? (If yes, a one-word answer will suffice; if maybe, explain the ambiguity; if not, try to provide a good reason (in a paragraph, at most) for dropping it.)
  2. Conversely, are there features in Java that weren't in Smalltalk-80? (In other words, how much have we gained in 20 years?)


Lisp: Good News, Bad News, How to Win Big
Richard P. Gabriel

Ten years later, ``AI winter'' had set in, and Lisp companies (who had shared in the boom) were suffering from the bust. In response, Gabriel wrote this article that presages much of the mass-market programming language work of the next several years, which led to ``scripting'' languages—but, for various reasons, the Lisp and Scheme communities failed to heed this advice, and thus didn't become players in scripting.

Read Gabriel's (somewhat brutal) article. Then answer the following questions:

  1. Where is Java in this spectrum? Is Java an ``MIT'' language or a ``New Jersey'' language? If you think it's a hybrid, explain which parts you think belong in each state. Why?
  2. If you were to design a language, you might want to heed the advice in this article. On the other hand, this course has repeatedly argued that ad hoc designs eventually grow into (broken) approximations of The Right Thing, suggesting a certain inevitability in the design process. Given this conflict, which approach would you take and why? (Answer in two paragraphs. Yes, I'm asking for your opinion.)


Beating the Averages
Paul Graham

Ten years on, Paul Graham points out that the Web introduces fundamental new freedoms in terms of the programming languages we can use. Continuations, the very feature that Gabriel so despised in Scheme, are so successful that even Perl is going to incorporate them. In turn, implementations of languages like Scheme are learning from their scripting counterparts, adopting some of Gabriel's ideas, and positioning themselves as broad-spectrum solutions.

Read Graham's (fairly hopeful) article, and then this follow-up, which makes more technical points. Then answer the following questions:

  1. Server-based computation forms a consistent theme in Graham's writings. I think he oversells this model; pretend you agree with me. Does that invalidate his inferences? Or is there a scenario where the ``linguistic firewall'' a server provides can translate to desktops also?
  2. Let's assume that Graham is right about the features that helped him be successful with Viaweb. (You're welcome to disagree as soon as your start-up has made you millions.) In the follow-up article, he makes several claims about Lisp's features (which, for the most part, we can take to be representative of functional languages in general). Is he right, or merely ignorant? If he actually knew Java, would he be less quick to jump to Lisp's defense?

Last modified Sunday, December 2nd, 2001 1:24:48amPowered by PLT