|
CS 334
Principles of Programming Languages
Course Description
Spring, 2000
|
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. The 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.
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.
One of the more important features of this course is the discussion of
programming language paradigms (in particular, languages which support new
ways of thinking about implementing algorithms). These include
object-oriented (represented by Java and GJ) and functional (via ML). 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).
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 Fridays. Each student may use a maximum
of three 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.
Students may collaborate or receive help from each other on an occasional
basis as long as all parties contributing are given explicit credit for
their contributions to the homework. 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