CS 302:  Programming Language Concepts
Instructor Textbooks Schedule Course Work Assignments
Deadlines Collaboration Grading

Introduction: This course has two running themes: the design and implemention of programming languages and the use of formalism with a programming language to construct correct programs.

Programming languages provide a mechanism for programmers to express solutions to problems, and the details of a language should facilitate thinking about a problem and its solution. The development of languages is motivated by a designer's view of problem solving. Such problem-solving paradigms include functional, imperative, object-oriented, and declarative programming. Design issues include data types, data control, sequence control, and semantics. Implementation topics include data structure implementation, run-time storage, language translation, and efficiency. The course will examine these aspects of programming languages on Wednesday and Friday each week.

To utilize programming languages effectively, programmers must be able to write clean, clear, and correct code. Formal reasoning about programs can be very helpful in this process. Specifically, program verification involves two basic goals. First, techniques are developed in order to prove programs are correct, using formal mathematical methods. Second, the process of writing proofs is combined with the developing programs, so that software development involves the simulataneous production of computer programs and the proofs that they are correct. The course will explore program verification on Monday each week.


Henry M. Walker

Office: Science 2420
Telephone: extension 4208
E-mail: walker@cs.grinnell.edu

Office hours are posted weekly on the bulletin board outside Science 2420, with additional hours possible by appointment. You may reserve a half hour meeting by signing up on the weekly schedule, but please sign up at least a day in advance.


John Mitchell, Concepts in Programming Languages, Cambridge University Press, 2000.
A manuscript version of this text will be distributed in class.
The author is maintaining a supporting web site at

David Gries, The Science of Programming, Springer-Verlag, New York, 1981.
This is the classical text on the subject of program verification.

The schedule

While the schedule for this course is expected to evolve, a Tentative Class Schedule is available in both .dvi and postscript formats.

Also, if you are logged into the departmental network and want a copy printed, click duerer to have a copy printed on the printer duerer, and click pacioli to have a copy printed on the printer pacioli .

Course Work

Course Work will involve a combination of the following activities.


Late Penalty: Work is due at the start of class on the date specified in the assignment. A penalty of 33 1/3 % per class meeting will be assessed on any work turned in late, even work submitted at the end of a class. Thus, work turned in 4 days late will be weighted -33 1/3 %; since a negative score reduces a semester total, it is better not to turn the work in at all.
Exception: Deadlines for programming problems and laboratory exercises are automatically extended at least one class day if the HP network is down for an unscheduled period of 3 or more hours during the week preceding the assignment due date. (In such cases, however, deadlines for written assignments are not extended.)

Absolute Deadline: All homework must be turned in by Friday, May 12 at 5:00 pm.


The work in this course is split between individual and group work. The rules for collaboration on written assignments will be given for each assignment. Collaboration is not allowed on tests or the final exam.


The final grade will be based upon each student's demonstration of his or her understanding of and facility in programming, not on the performance of the class as a whole nor on a strict percentile basis. While some flexibility may be possible in determining a final semester grade, the following percentages approximate the relative weights attached to various activities in this course.
Assignments from Mitchell's Text: 20% Assignments from Gries' Text: 40% Tests: 20% Final Exam: 20%

This document is available on the World Wide Web as


created December 29, 1999
last revised May 1, 2000 by
Henry Walker (walker@cs.grinnell.edu)