91.531 Design of Programming Languages, Spring 2013
Prof. Fred Martin, click for fred's email
MWF, 10:00a10:50a, OS219
We will be using the following books:
|Seven Languages in Seven Weeks: |
A Pragmatic Guide to Learning Programming Languages (2010)
Bruce A. Tate
|Learn You a Haskell for Great Good! (2011) |
|Beyond 20-minute tutorials.||Haskellthe best functional programming language around.|
According to the catalog, 91.531 Design of Programming Languages is...
This is a concise and accurate description what we will do. However, if you understood exactly what this paragraph is saying, you've probably already taken a similar course or acquired the self-same knowledge.
Here's another take at a description. There are two parallel strands that we'll develop in the class:
- Strand 1. We will learn Seven Languages in Seven Weeks, working with Bruce Tate's wonderful book by this title. The seven languages are: Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby.
- Strand 2. During the weeks we're not learning new languages, we will build interpreters, highlighting core features of language design: interpreting expressions; implementing variables and control structures; implementing objects; implementing a functional programming language; understanding and implementing lambda calculus.
The implementation work will all be done using Haskell, a pure functional programming language. Thus, in an update to the catalog description, we'll be using Haskell (not Scheme or Standard ML) as the “executable metalanguage.”
With this approach, (a) we'll get practical experience using a variety of great practical languages that, as a group, demonstrate most of the important ideas in language design, and (b) we'll learn how to build these systems.
The course texts are shown above. The 7 Languages text is required and will be heavily used. Please buy it immediately. The Haskell text is freely available online, and you are welcome to use the web resources.
We will use a custom online system called Bottlenose to deliver:
- pre-lecture reading or video viewing assignments,
- pre-lecture quiz questions,
- programming assignment downloads, and
- completed/uploaded programming assignment auto-assessments.
You will receive a link from the Bottlenose server in your email. If you lose it, you can enter your email address at the Bottlenose home page to have it re-sent.
Programming assignments receive an auto-assessment grade, which is generated by the server shortly after upload. This grade is simply the fraction of tests that the assignment completes successfully. The final assignment grade may be adjusted up or down by the instructors.
An assignment may be submitted as many times as desired, without penalty, up until the due date. Each time it is submitted, the auto-assessment is generated. Only the final submission counts towards your grade.
The course grade will be based on the following distribution of value:
10% Pre-lecture quiz questions
30% Final exam
10% Class participation
Assignments are due at 11:59 pm, typically the day of an associated class meeting.
If they are turned in late:
- 33% of their value is deducted for assignments turned in up to one week late.
- 66% of their value is deducted for assignments turned in more than one week late.
Our goal is that the course will consist of 39 assignmentsapproximately one per class meeting.
Collaboration and Academic Integrity Policy
You are welcome to discuss ideas in the class with your peers. However, pair programming or other side-by-side work that involves sharing of code is not allowed. By turning in an assignment, you attest that you have written the new code that it includes.
Please be familiar with the university's academic integrity policy for graduate students.
We will be using Piazza to coordinate all discussion and announcements. Click on the link Discussion Group to find the site.