Syllabus
CS 131: Programming Languages
Spring 2001
- Lectures: Tuesday and Thursday, 2:45-4:00, PA 1285.
- Web Page: http://www.cs.hmc.edu/courses/2001/fall/cs131/
- Office Hours/Tutoring: E-mail questions or comments can
be sent at any time. It is stronly suggested you send such messages to cs131help@cs.hmc.edu,
because it will go the entire staff and hence will get the quickest response.
However, if you would like to speak with someone in person, office hours will
be held as follows:
- Chris Stone: Mondays and Wednesdays 3--5pm, Olin 1253.
- Steve Diverdi: Wednesdays 7--9pm, Terminal Room (B100).
- Ed Miller: Mondays, 8--10pm, Terminal Room (B100).
- Catalog Description: A thorough examination of issues and features
in language design and implementation including language-provided data structuring
and data-typing, modularity, scoping, inheritance, and concurrency. Compilation
and run-time issues. Introduction to formal semantics. Prerequisites: Computer
Science 70 and 80.
- Real Description: The goal of this course is to provide you with
a framework for thinking about programming languages. The course is not primarily
about programming (although there is a lot of this, and the course may well
affect the way you program); instead, we go "up a level" and view
the languages themselves as the topic of study.
You already had an introduction to this topic in CS 60, where you used four
languages representing at least four different approaches: Java for object-oriented
programming, rex for functional programming, Prolog for logic programming,
and ISCAL for low-level (assembly) programming. This course, however, has
a slightly different emphasis and uses what is sometimes referred to as the
language principles approach. By organizing lectures around key ideas
that recur in many different languages (and ignoring relatively unimportant
details like syntax), you should be able to better understand many more than
four languages, including ones that haven't even been invented yet. (Obviously,
if you actually want to write programs in, for example, Haskell, details of
syntax are absolutely critical!. However (after this course) if you're told
it's a statically scoped, polymorphically typed, higher-order, lazy, purely
functional language, you immediately have a huge head-start in learning the
language.)
The reason why this course should matter (beside being intrinsically fascinating,
of course!) is that programming languages are ubiquitous in computer science.
There are always new languages being devised, a very small number of which
become widely used; typically, these are specialized languages for particular
applications (e.g., Java or VRML). As a computer scientist, you must be able
to learn new languages as necessary, and the background you get from this
course should make this easier. A lesser number of you may design a programming
language yourself; not necessarily a full-scale general-purpose language,
but perhaps a language for describing input to or configuration of another
program. This course should give you a better chance of avoiding common pitfalls
when doing so. We will also talk a little bit about implementation of languages,
though if you are interested in this aspect you should definitely take the
Compiler Design course.
Finally, you will almost certainly have to choose which programming language
to use for a particular project. A major goal of this course is to give you
enough background in the study of programming languages that you can argue
persuasively why a particular language is appropriate (or inappropriate) for
a particular problem.
- Course mailing list: The course mailing list will be used
for announcements relevant to the entire class, some of which may be important.
It is your responsibility to contact the instructor if you are not on the
list.
- Course materials: The primary source of information for
the course will be the lecture slides and periodic handouts. However, because
the programming assignments require the use of Standard ML, and the SML overview
in class will be fairly fast-pased, the following book has been made available
at Huntley:
Elements of ML Programming (ML97 Edition), Jeffrey D. Ullman,
Prentice Hall, 1998.
Although there will be no required readings from this book, a reference for
the language (this or another) may well be helpful if you are having difficulties.
A copy of this text is on reserve at the desk of Sprague Library.
- Assignments and Grading: Homework assignments will be given
weekly on Thursdays, and due at the beginning of the class the following Thursday.
Late assignments will not be accepted except in very special cases where prior
arrangements have been made with the instructor. Solutions will be available
as soon as the assignment comes due. All assignments will be given equal weight.
The course grade will be based on homeworks (70%), and an open-book/open-notes
final examination (20%), and in-class activity (10%). There may also be opportunities
in the course for small amounts of extra credit, but this is not guaranteed.
Please note that because the grade is so heavily homework-weighted, it is
very difficult to recover from a series of skipped homeworks. Do not expect
to wait until the end of the semester and hand in homeworks you skipped; they
will not be accepted.
The standard CS Academic Honesty Policy applies to this course, relaxed only
as follows: you are free to discuss a problem with other students, and even
hash out the general framework of a solution as long as you explicitly
cite this (limited) collaboration. However, the actual work handed in
must be entirely your own; as the honesty policy states, you may not share
code or other specific answers in any form.