Home | Calendar | Readings | Example Source Code | Assignments

Vital Stats

John Lasseter


Class time—3:00 - 3:55 MWF

Lansing 301 Gulick 223


This course is a study of the principles underlying the design and implementation of a programming language. By this point, you have learned to think about algorithmic problem solving in a manner that is independent of any particular language. In all likelihood, however, you are use to thinking mainly in terms of imperative solutions, with abstraction, reusability, and maintainability supported by principles of structured programming and object-oriented design. We will explore languages that support this approach but also that of some radical alternatives. As different as they are, each of these alternatives is available as a tool in every language that has been or ever will be invented.

Four major themes will guide the structure of this course:

Design Space. There is a set of choices that must be made in the design of every programming language.

Paradigms. Each language represents a corresponding set of commitments to these choices. These commitments shape the way a user of the language thinks about problem-solving and data representation.

Pragmatics. Each choice in language design imposes its own burdens of implementation and proof.

Universality. Every language feature can be simulated in a complete programming language, and thus every feature can be used.

In addition to a solid foundation in programming, our class assumes a basic knowledge of data structures, imperative programming concepts, and some experience with inductive proof. Experience with any or all of functional programming, compilers, other areas of discrete mathematics, logic, and algorithms is helpful, but not essential. No other background is assumed.


Required Text
Programming Languages: Build, Prove, and Compare, by Norman Ramsey (with Samuel Kamin). Unpublished draft, September 2014.
You will want tutorials/language references for Scheme, OCaml, Prolog, and the λ-calculus. I have added several choices to the Readings page.
Class Web Page

Format of the Course

Classroom Meeting
MWF, 3:00 - 3:55, Lansing 301
Participation and Preparation
Each class will be a mix of lecture time, discussion and clarification of readings, and group problem-solving. In advance of each class, you may be assigned reading and occasionally also problem sets (see "Homework").

Assignments will be of two kinds, preparatory and project.

Preparatory work will consist of readings and small problems, designed to help your engagement with this often-difficult material. These will usually be given informally, and they will typically have a due date of the following class. Though occasionally challenging, the grading of these will be very loose, with the basic standard being "completed"/"not completed". We will discuss more about this expectation in class.

In addition, there will be several more substantial take-home project assignments, involving in-depth study of various interpretation techniques. These will have a more formal write-up of expectations, will often include supporting source code, and they will typically have a due date of at least a week from the time of assignment.

There will be two take-home exams during the semester, distributed at the end of weeks 7 and 13 and due the following Monday of (respectively) weeks 8 and 14. We will discuss the format in class.
Final Project
In lieu of a traditional final exam, you may elect to complete a final project. This will be planned in advance with me on an individual basis.
This project is optional! If you choose not to complete it, your grade will be calculated from the remainder of the semester's materials (see grading, below). There are two things to note here. First, completion of a final project is not guaranteed to raise your grade from what it would be without the project, but it cannot lower your grade either. If you elect to complete the project, your grade will be calculated both ways, and you will be considered to have earned the better of the two marks. Second, completion of a final project is the only way to earn an A+ in the class. Even a perfect average absent a final project can earn at most an A grade.


Naturally, your prompt attendance is required at every class, for the entire class. Any absence not due to illness or arranged at least a day in advance with me will be considered unexcused. You may take up to two unexcused absences, and after that, you will forfeit the participation component of the course grade.
Late Policy
All homework comes with a due date. Late work will not be accepted.
Students with Disabilities

Students with documented disabilities who may need accomodations, who have any emergency medical information an instructor should know of, or who require special arrangements in the event of an evacuation, should contact me as early as possible, preferably no later than the first week of classes.

If you are a student with a disability for which you may need accommodations, you should self-identify and register for services with the Coordinator of Disability Services at the Center for Teaching and Learning (CTL), and provide documentation of your disability. Disability related accommodations and services generally will not be provided until the registration and documentation process is complete. The guidelines for documenting disabilities can be found at the following website: http://www.hws.edu/disabilities

Please direct questions about this process or Disability Services at HWS to David Silver, Coordinator of Disability Services, at silver@hws.edu or x3351.

Academic Honesty:

I take this very seriously: a breach of academic honor will result in a failing grade for the course, and may be subject to further college sanctions. These standards are clearly laid out in the HWS Catalogue


and for the most part, they're pretty straightforward: your lab and project work must be yours and yours alone (or your working groups, if that applies), and your exams can only be discussed with me. Basically, you know already know the difference. Don't cheat.

Collaboration: This is something of a gray area, and a common source of misunderstanding.

To clarify: Learning is usually more successful when it is done in community rather than in isolation. For all assignments, you are permitted—indeed, encouraged—to discuss course material with each other, to evaluate, trace, debug, refute, validate, or otherwise compare each others' work, and to adjust your own work if this collaboration results in new understanding.

However, you are not free to simply mail or print identical copies of the same work, and claim that it is the work of two separate individuals/groups. This is plagiarism, and is a breach of academic honor standards (it is also extremely easy to spot, especially in a class this small). While I encourage you to learn from each other, at the end of the day, the work you submit for a grade must be yours and yours alone.

If you find yourself unsure whether a form of collaboration or borrowing is acceptable, please ask me, in advance.


The weights for you final grade depend on whether or not you elect to complete the final project.

Without the project, the relative weights for your final grade are as follows

  • Assignments: 50%
  • Participation: 10%
  • Exams: 40% (20% each)

Under this weighting, the maximum grade that can be earned is an 'A'.

With a final project submission, your grade will be weighted as

  • Assignments: 40%
  • Participation: 10%
  • Exams: 30% (15% each)
  • Final Project: 20%

If you elect this route, your earned grade will be calculated with and without the project, and the better of the two outcomes will be considered earned. An 'A+' grade is extremely unlikely, but it is possible with an truly exceptional final project. You may choose either option, and you may change your mind about this choice up to the due date of the final project.


The best way by far to get in touch with me is in person, during office hours. Any kind of class-related discussion is encouraged, whether it be a specific question about a homework problem, a request for encouragement and help getting started on an assignment, a point of confusion about the reading, or just plain curiousity about some of the further scientific directions that are possible. I am often available outside of office hours to answer questions, offer further explanation, or just to shoot the breeze. I am always available during posted hours. I encourage you to drop by.

Barring that, your best bet is by email, which I check late, early, and often. In fact, email is very often the most effective way for you to ask a question, as the effort involved in articulating what you want to ask can help clarify many things. It also makes it easier for me to give succinct replies to which you can refer later.

Phone calls are, frankly, lousy. You're certainly invited to call, but it's difficult to communicate technical questions and answers clearly without reading or writing down anything. Phone messages are completely futile: don't bother.