|Schedule ( .dvi format / postscript / pdf format )
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. During most weeks, the course will examine these aspects of programming languages on Wednesdays.
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 generally will explore program verification on Monday each week.
Henry M. Walker
Office: Science 2420
Telephone: extension 4208
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 is available at cost in the bookstore.
The author is maintaining a supporting web site at http://www.stanford.edu/class/cs242/
David Gries, The Science of Programming, Springer-Verlag, New York,
This is the classical text on the subject of program verification.
While the schedule for this course is expected to evolve, a Tentative Class Schedule is available in .dvi , postscript , and pdf formats.
As this schedule suggests, each day in a typical week for this course has a different theme:
Note: 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 will involve a combination of the following activities.
Written Assignments Since the learning of concepts and technical details requires hands-on experience, homework will be assigned regularly.
Group Work: Friday activities often will involve work in groups, and those groups will prepare materials or make oral presentations.
Programs: Several programming assignments will be due throughout the semester.
Tests: Take-home tests may be scheduled during the semester.
Exam: The final examination will follow an oral format and will be scheduled with individual students during exam week.
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 MathLAN 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 11 at 5:00 pm.
Don't even think about asking for an extension!
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.
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 aprovide a first pproximation for the relative weights attached to various activities in this course.
|Assignments from Mitchell's Text:
|Assignments from Gries' Text:
This document is available on the World Wide Web as