Courses‎ > ‎


Meetings: MWF 10:20-11:20 AM, Olin 305 
Instructor: Peter Drake
Google Group: 13/FA cs 373 01 (or email


Why are there so many programming languages? Can't we all just agree on one?

Programming Language Structures examines the variety of programming languages and the reasons for this variety. These reasons include the desire to express different algorithms in different ways, the underlying technology for converting higher-level programs into hardware instructions, and tradeoffs within and between these areas.

We begin with a foray into the functional language Haskell, which differs significantly from languages you've seen before. Anchored in three different language paradigms -- von Neumann (C), object-oriented (Java), and functional (Haskell), we then explore a wide variety of topics relating to how languages are defined and implemented.

In terms of the ACM’s Computer Science Curriculum 2008, this course covers Programming Languages.

Learning Objectives

Upon completing the course, you should be able to:
  • write intermediate-sized programs in Haskell, using recursion, higher-order functions, and user-defined types.
  • describe the major categories of languages.
  • select an appropriate language for a given task.
  • describe the features of a given language in terms of scope rules, type system, parameter passing, and data abstraction mechanisms.
  • explain how compilers and interpreters work.
  • use a grammar to describe the syntax of a language.
  • make sophisticated programming decisions based on an understanding of the language implementation.

Course Structure

This course is structured differently from others you may have taken. It is gamified in that it borrows some ideas from the gaming world to increase your motivation and ability to learn: achievements, fast and frequent feedback, the ability to try until you succeed (with some necessary constraints), and "leveling up" instead of conventional grading.


A typical lesson consists of reading from the text and perhaps watching a video. The lessons are:


On days where there is a quiz, your quiz grade is your participation grade. On non-quiz days, you get credit for being present, on time, prepared, and engaged. There are more class days than gradebook entries here so you can make up the inevitable odd day lost to illness, transportation problems, etc


There are eight assignments:
  1. Haskell I
  2. Haskell II
  3. Assignment 3
  4. Assignment 4
  5. Assignment 5
  6. Assignment 6
  7. Prolog
  8. Dining Philosophers
You may work in pairs (not larger groups!) on these assignments.

Adopt a Language

Each of you will adopt a language to learn about on your own. Some of the questions in the assignments will be about your pet language.

You may not choose C, Java, or Haskell. Your language must be well-defined and used to solve real computational problems, not a joke language. Unless they are working together, two people may not choose the same language.


There are three exams plus a final. These are typical pencil-and-paper exams. You only get one shot at each exam, but there are several of them.


There are ten achievements, each worth a small number of extra credit points. They are:
  • Code Golfer: Produce the shortest solution in the class to a programming exercise.
  • Code Poet: Write a particularly clear piece of code.
  • Customer: Show up for office/lab hours.
  • Inquirer: Ask a question in class.
  • Librarian: Share a resource from outside the class.
  • Pioneer: Post to the course Google group.
  • Proofreader: Discover and report a previously-undiscovered error in course material (textbook, website, etc.).
  • Prospector: Share an unusual feature about your pet language (in class or on the Google group).
  • Sage: Correctly answer an exam question that most students got wrong.
  • Synergist: Explain how something you learned in this course helped you elsewhere, or vice versa.
To earn the points, you must achieve these in a nontrivial way, which I adjudicate; a one-word post to the course Google group doesn't count.


These are the ways to earn points:

Total Points Points Each Quantity Category
150 5 30 Participation
600 75 8 Assignment
250 50 3 + 2 Exam (final counts as two)
(+50) (+5) 10 Achievement
1000 (+50) Total possible

For the grading scale and other policies, see my policies page.