CSC 430, Spring 2008
Programming languages are ways of turning programs into answers. In this course, you will study the principles of programming languages by implementing the features of those programming languages as parts of various interpreters.
At the end of the course, you should be a better programmer. You should also have a clearer picture of a given language as a choice in a larger design space, and be better able to understand new programming languages and the similarities between them. Finally, you may develop some taste for what you like in a programming language.
This course will involve lots of programming in Scheme. I choose Scheme for several reasons. First, “functional” programming languages make this kind of course feasible. Writing a series of interpreters in another language would probably involve a whole lot more code. Secondly, Scheme is a simple language for you to learn, without complex syntactic rules or a confusing type system. Thirdly, the simplicity of Scheme makes it an ideal “blank slate” for adding features. If these reasons don’t make sense to you, then... perhaps you need to take the course!
1 Prerequisites
Students taking this course must be able to design and implement small programs (~ 1 KLOC) efficiently. Students must have a basic understanding of mathematics.
2 Names, Times, Locations
2.1 Instructor
John Clements, aoeuclements @ brinckerhoff.org
2.2 Lecture & Lab
Lecture: 10:00-11:00, MWF, room 013-0110
Lab: 11:00-12:00, MWF, room 014-301
2.3 Web Page
This is the course web page, its link is http://www.csc.calpoly.edu/~clements/csc430-sp08.
3 Computing Environment
You will be required to complete the assignments in this class using PLT Scheme, version 372. It is available for all major platforms, including Mac OS, Windows, and UNIX. It is pre-installed on the lab machines, available by running
~clements/drscheme
from the command-line.
If you’re running DrScheme on a non-lab machine, you’ll need the course plugin. It’s available at
http://www.csc.calpoly.edu/~clements/csc430-sp08/handin.plt
That’s not a clickable link. That’s because the easiest way to install the plugin is to choose File|Install PLT File... in DrScheme and to paste this link into the resulting text box.
4 Readings
The majority of the readings in this course will be from Programming Languages: Application and Interpretation, by Shriram Krishnamurthi. This book is available free, online, including a downloadable PDF.
The first two weeks will also include readings from How To Design Programs, also available free online (though there’s no downloadable PDF for this one).
5 Communication
There is a google group, csc430-sp08. You will need to join this group. You can request this by visiting the url
http://groups.google.com/group/csc430-sp08
I will use this group to tell you about important changes and updates to the assignments. However, it will also be a forum for you to help each other. As long as you’re not posting code, I strongly encourage you to ask questions and to respond to questions on the group. For this reason, I also require you to sign up in individual e-mail mode, and not in digest mode.
6 Assignments
Programming assignments will be due at 11:00 PM. You must submit homework assignments using the Handin button. Late assignments will not be accepted.
Typically, the handin server will be configured to run tests on your code as it is submitted. Code that does not pass the tests will generally not be accepted. These tests will generally check whether you’ve defined the things you’re supposed to define. These tests will also generally check coverage. That is, you will not be able to submit code unless it includes test cases that completely cover your code.
Your submissions should be anonymized. That is, they should not contain your name.
Part of your grade will include a score given by your fellow students on your code. In particular, in each week you will generally be given two (anonymous) submissions from other members of the class, and required to assign legibility and design points.
From time to time, we may examine student code, in lecture. Try to ensure that the code you submit is something you’d be proud to show to the others in the class.
7 Cheating
In the programming assignments, You may not copy another student’s code (including test cases). You may not share code with other students in the class. That is, you may not allow another student to see the code you write for the class, deliberately or through obvious negligence.
I will use an automated tool to compare student submissions and identify cheating.
Students believed to be cheating–that is, both parties involved in the transfer of code–will receive a failing grade in the class.
8 Exams
There will be a midterm and a final exam in the course. The midterm will be in the sixth week of class. The exams will be closed-note. No electronic devices, including cell phones or mp3 players, will be permitted during the exams.
9 Grades
Grades will be determined by performance on programming projects, the exams, and class interaction. A small fraction of the grade is determined by the instructor’s whim. The breakdown of the grade is as follows:
Assignments: 55%
Midterm : 20%
Final: 20%
Instructor’s Whim: 5%