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
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.
- 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 firstname.lastname@example.org or x3351.
- Academic Honesty:
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.
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
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 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.