CSC 430, Fall 2009
Programming languages determine what programs we can write. Languages with nice abstractions allow us to write elegant, concise, and readable programs.
In this class, we’ll start from scratch, and build a programming language by adding only what’s necessary. What we’ll discover is that this simplistic approach leads to some really powerful abstractions. You can do more with less!
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
Section 01/02:
Lecture: 08:00-09:00, MWF, room 02-0204
Lab: 09:00-10:00, MWF, room 14-0303
Section 03/04:
Lecture: 15:00-16:00, MWF, room 05-0104
Lab: 16:00-17:00, MWF, room 014-302
Google Calendar:
See my Contact Info page for my calendar. You can add it to your calendar, if that makes your life easier.
2.3 Web Page
This is the course web page, its link is http://www.csc.calpoly.edu/~clements/csc430-fa09.
3 Computing Environment
You will be required to complete the assignments in this class using PLT Scheme, version 4.2.1. 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.
You need two extensions to drscheme; one for handin, and one that supports the textbook (PLAI) that we’re using. The first of these is pre-installed on the lab machines. On a non-lab machine, you’ll need to install both.
The course handin plugin is available at
http://users.csc.calpoly.edu/~clements/csc430-fa09/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 ("URL") text box.
To install the PLAI extension, set the Language Level to "Module...", enter this text in the top window
#lang planet plai/plai:1:4
and click "Run".
Each of these steps may take a few minutes, as DrScheme downloads and installs the extensions. After installing them, you’ll need to restart DrScheme.
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-fa09. You will need to join this group. You can request this by visiting the url
http://groups.google.com/group/csc430-fa09
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 may include a score given by your fellow students on your code. In particular, in some weeks you may 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 Interacting with the Handin Server
You will be handing in your work in this class using a plugin for DrScheme that communicates with a handin server running remotely. From past experience, there are several things that may not be obvious about your interactions with this server.
I disregard earlier submissions when later ones are improvements. So, for instance, if you get a dialog that offers you a chance to save with a penalty, you need not worry that this penalty will affect you if you resubmit later (as long as it’s before the deadline)
The handin server stores the last five submissions on your account. So, if you’re unsure as to whether the deadline has passed, go ahead and submit; if I decide to disregard the final one, I can take the prior one instead.
On the other hand, you should be aware that the handin server does not "limit your liability;" if I discover errors in the code that the handin server didn’t catch, I will deduct points for them, and I may well add tests to the handin server and recompute everyone’s correctness.
8 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.
9 Exams
There will be a midterm and a final exam in the course. The midterm will be during the lecture period on Monday, October 27th, 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.
10 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%