|
CS 334
Principles of Programming Languages
Course Description
Spring, 2002
|
Course Objectives:
A programming language is a programmer's
principal interface with the computer. As such, the choice of an
appropriate language can make a large difference in a programmer's
productivity. A major goal of this course is to present a comprehensive
introduction to the principal features and overall design of both
traditional and modern programming languages. As such you will be
examining language features both in isolation and in the context of a more
complete language description. While we will examine features of older
imperative programming languages like Pascal and C, we will also examine
features and programming paradigms introduced in more recent programming
languages in response to problems in writing programs in these earlier
languages.
We will also investigate and practice writing interpreters for simple
programming languages. This hands-on experience will provide a firm
grounding in both the run-time characteristics of programming languages
and the formal specification of programming language semantics.
At the end of this course you should have a more thorough understanding of
why certain programming language features provide more support for the
production of reliable programs, while others are fraught with ambiguity or
other problems. Since programming languages mediate between the programmer
and the raw machine, we will also gain a deeper understanding of how
programming languages are compiled, what actually happens when a program is
executed on a computer, and how the programming language design affects
these. As an example, by the end of the course, you should be able to
understand why Java has replaced C++ as the hot language, and why GJ
represents the next step forward for Java.
An important features of this course is the discussion of programming
language paradigms (in particular, languages which support new ways of
thinking about implementing algorithms). We will investigate both the new
features themselves and the software engineering problems which spawned
these developments. We also hope to have time to discuss features designed
to support programming on parallel architectures.
This course will involve extensive reading on your part, both in the text
and in outside sources. The segments of the course which introduce new
programming language paradigms will also feature some relatively simple
programming in languages representative of the functional and
object-oriented paradigms (ML and GJ or others).
Homework
Problems involving analysis of programming language features will be
assigned and due most weeks during the term. Homework will generally be
due at the beginning of class on Thursdays. Each student may use a maximum
of two late days during the course of the semester (note that weekend days
count). Once those late days are used up, late homework will not be
accepted. There will be take-home midterm and final exams covering both
lectures and readings. The midterm will be handed out during the first
class after spring break. Student grades will be determined as follows:
Midterm: 25%, Final Exam: 35%, Homework and programs: 40%.
Honor Code:
Homework is expected to be the sole work of each student unless the
assignment explicitly states otherwise. Students may collaborate or receive
help from each other on an occasional basis as long as all parties
contributing or assisting are given explicit credit for their contributions
to the homework. In particular, I hope you will help each other in
learning the mechanics of how to compile programs in new languages. I will
inform students if I believe they are collaborating too much. Uncredited
collaborations will be considered a violation of the honor code and will be
handled appropriately.
Back to:
kim@cs.williams.edu