Paul Graham wrote the original Viaweb software for setting up on-line stores that Yahoo! currently uses. He wrote it in Lisp, which is in the same family of languages as Racket. More recently, ITA Software, a pioneer in online airline flight searchs, bought by Google for $700 million in the summer of 2010, relies heavily on Lisp for its technical success.
Read Graham's classic but still relevant article, Beating the Averages, in which he discusses why he believes Lisp gave his startup a competitive advantage, and answer the following questions:
Identify three features of Lisp that Graham believes gave his company a competitive advantage. At least two should be technical (rather than social). Describe each feature and explain how it provided an advantage.
Graham's article makes several observations about programming and programming languages. Identify and restate in your own words, the two observations that you find most significant. Explain (in a couple of sentences each) why you find each of your chosen observations significant.
In another interesting article, Graham shares his early critique of Java. It turns out that Graham was somewhat wrong in predicting the future of Java, but his analysis of the non-technical aspects of a programming language is applicable to any new language that comes on the scene. Read the article and in your own words, state three questions that Graham's article teaches you to ask when approaching a new language.
Languages are everywhere once you get used to looking for them. In general, a language is the repository of knowledge and goals that emerge from a domain of human activity. Computer science is replete with such examples (optimization problems led to OPL, database query optimization gave rise to SQL, scripting needs brought forth Awk and Perl, and so on). But humans have done this for much longer than computers have been around.
Identify a non computer-science "language" used for some activity by some subset of humans.
Explain the community of people and what they share.
Now, evaluate this language as you would a programming language by answering the following questions:
What are programs in this language?
What are the data, the operations and the control? (make sure your chosen language has all of these characteristics --- if not, pick something else!)
Briefly describe the language's syntax; use examples if you wish.
What "data values" do programs in this language evaluate to?
What is the corresponding notion of an interpreter for your language?
Comment on whether or not this language might be amenable to computer processing (you do not need to choose a language that can be machine-processed).
Example: Consider (Western) musical score. The community is musicians, and the shared activity is music. I won't bother elaborating on the data and control elements here (but you should for the language you choose). A sample "interpreter" is a pianist who "runs" the score on a piano; the score's "value" is the sound we hear. Computer programs that read score and produce the music exist (and can therefore be written).
Be creative. You will either nail this assignment or be lost. Don't pick a human spoken language (English, Esperanto, etc) and don't pick math or music -- the goal is for you to see language-like structures in the world around you. Creativity counts. In terms of write-up of this section of the assignment, a few paragraphs, at most a page, will suffice.
[Side Note: if you enjoy Graham's writing, his article Taste for Makers is a lovely piece on the role of taste in design. You don't have to read this article for this assignment, but it's worth reading when you have the time.]
For the essay responses, satisfy the criteria in the questions, and make sure you provide explanations where I asked for them.
For the language identification, your grade will reflect whether you chose a language that has all the elements mentioned above (data, operations, control, etc) and whether you identified those elements appropriately.
We will also grade for writing. Spelling and grammar errors and sloppy writing (such as sentence fragments) will cost you points.
Turn in a single TEXT file hwk5.txt containing your answers (no MS word, PDF, etc, please -- we want to be able to view these easily within a command shell in Unix). Make sure that all students' names are in a comment at the top of the file.