Course Web Site:

Course Overview:

The objectives of this course are to help you

  1. deepen your understanding of the structure and design principles of programming languages,
  2. develop skills to describe, analyze, and learn to use the features of new programming languages,
  3. become familiar with the distinctive characteristics of several programming paradigms,
  4. develop fluency in a functional programming language (Haskell).
We will accomplish these goals by studying the concepts and paradigms that underlie programming languages and by discussing the design decisions and tradeoffs related to these concepts. We will also look at numerous examples of programming languages to see the historical progression of language design. Since most of our curriculum focuses on imperative and object-oriented programming, we will pay particular attention to functional languages. You will write programs in both Scheme and Haskell, and we will use Haskell to explore the semantics of both functional and imperative languages.

This course will be run as a seminar course, which means that everyone will be actively involved in both teaching and learning from each other. You will:

General Outline:

Week 1: Introduction: motivation for studying programming languages, history of programming languages, introduction to the major paradigms
Weeks 2 - 3: Concepts underlying Functional Languages, with particular emphasis on Scheme and Haskell
Weeks 3 - 4: Syntax and Semantics
Weeks 5 - 6: Concepts underlying Imperative Languages
Weeks 7 - 8: Data Abstraction and Object-Orientation
Week 8: Exception Handling
Weeks 9 - 10: Declarative Languages, especially Prolog



Compilers & Interpreters:

Attendance and Participation:

This class will be conducted as a seminar, so your participation is crucial to everyone's learning and weighs heavily in your grade. Active participation in this class means coming to class on time, completing assigned reading and exercises, listening to others, contributing ideas of your own, and asking questions as they come up.


Assignments, anouncements, class notes, and other material will be made available on the COMP 320 home page ( You are responsible for checking this resource frequently.

Reading assignments will be assigned for each class. You are expected to come to class having completed the reading and prepared to discuss the ideas from it.

There will occasionally be problem set exercises assigned as well, which may be discussed and presented in class.

Several programming projects will be assigned throughout the quarter. These will involve programming using languages and paradigms that may be unfamiliar to you. As a result it is important that you begin work on the projects as soon as they are assigned. Assignments may be turned in at any time on the day they are due (including in the evening or at night), but must be in my box before I come in the next morning. Assignments due on a Friday must be in my box when I come in on Monday. Assignments should always be turned in on time unless you clear it with me in advance. Your programs should conform to the spirit of the CS Program Style Guide and Documentation Standards although, since you will be writing in a functional language, the details and examples of those documents will not apply. Being careful about structure and documentation is an important step towards writing high-quality programs. You may work on the programming projects individually or in pairs.  You will turn in your programs electronically and also demo them for the instructor.

Each of you will be expected to give at least one, possibly two, 20-minute presentations to the class on topics other than those in the regular reading assignments. These presentations will be distributed throughout the quarter.

The course will also involve a final examination. This will likely be a take-home final.


This course operates in accordance with the principles of the Kalamazoo College Honor System: responsibility for personal behavior, independent thought, respect for others, and environmental responsibility. In particular, academic integrity is a fundamental principle of scholarship. Representing someone else's work as your own, in any form, constitutes academic dishonesty. Unauthorized collaboration and receiving help from others outside the bounds permitted by the instructor are also violations of the College honor code. You are responsible for working within the permitted bounds, and acknowledging any help from others or contributions from other sources.


Final grades will be based on:
Attendance, Preparedness, and Participation 5%
Problem Sets 15%
Presentations 20%
Presentation Journal Entries 15%
Programming Projects25%
Final Examination20%

Any student with a disability who needs an accommodation or other assistance in this course should make an appointment to speak with me as soon as possible.