NameHanded OutDue Inasgn-name
Rudimentary Interpreter2003-09-082003-09-15asgn1
Extended Interpreters2003-09-152003-09-24asgn2
Raw Web Programming2003-09-152003-09-26asgn3
Written Assignment 12003-09-272003-10-08asgn4
Design Essay2003-09-272003-10-15asgn5
Garbage Collection2003-10-132003-10-27asgn6
Written Assignment 22003-10-172003-10-27asgn7
Type Checker2003-10-272003-11-03asgn8
Written Assignment 32003-10-312003-11-17asgn9
Type Inference2003-11-102003-11-21asgn10


We will use codewalks, a common practice at software companies, to evaluate some of your programs. A codewalk is a presentation where you, the programmer, convince us, a jury, of specific properties of your program. You accomplish this by presenting your program and answering questions about it. We are most interested in

Full Details...

Team Project Instructions

Programming in teams does not mean each person writes part of the code and the team simply pastes together these contributions. Each person is responsible for every line of code, documentation, etc. turned in. This responsibility includes getting or losing points for its quality, being able to explain it, and also incurring penalties in case of plagiarism or other violations. That is, all team members will get the same grade, and face the same sanctions: we will not partition credit or responsibility.

Ideally, we recommend that they develop the software together using pair-programming techniques (of the form preached by Extreme Programming).

Once you have selected a partner please inform the course staff. If you are having difficutly finding someone to be your partner, please contact the course staff, and we will attempt to match you with another student.

Turning in Assignments

For programming assignments, you should use the electronic handin program. From the directory containing the files for the assignment you wish to hand in, execute

  /course/cs173/bin/cs173handin asgn-name
where asgn-name is specified in the table above.

For both written assignments and essays, write your login at the top of every page (this is helpful in case the pages become separated), staple the pages together, and place them in the cs173 handin bin on the second floor of the CIT.

For written assignments, please solve each problem on a separate page and print single-sided, so the TAs can easily divide your work for grading.

For team assignments, each member of the team should turn in a complete copy of the team's work using the correct procedure from above.

Assignment Due Time

Assignments are always due at 2:00 AM on the listed date. Why 2am? Because we want you to attend class and to be reasonably alert when you do so. Past experience indicates that making assignments due at the start of class leads to a largely somnambulist audience that day. Those classes are fun for neither the student nor the professor.

Late Assignments

We will not accept late assignments. Assignments are often timed to be due for a classroom discussion on the assigned material because you can better follow a difficult topic if your struggles are fresh in your head. The class will sometimes even discuss solutions to the homework problems. Once we do this, we can no longer accept your solution.

If you really need or want to turn in an assignment late, you must get the professor's permission to do this at least 24 hours before the assignment deadline. When we do accept a late submission, we will use this formula to compute your net grade:

(define (net-grade gross-grade number-of-penalty-units)
  (* gross-grade (expt 0.9 number-of-penalty-units)))

A penalty unit is a 24 hour period or part thereof after the due time. Even a minute after the due time incurs a penalty unit. So if you're late (and have previously requested late permission), relax; sleep; attend class; and submit something polished later in the day.

Assignment Schedule

What follows is a tentative schedule of assignments in this course. We do not expect major variance, and will notify you in advance if this should occur. But please do expect numerous minor fluctuations!

We plan to have seven programming assignments. The first one will go out the second week of class. Each one will be out for a minimum of one week, some much longer. From October until the end of the semester, you should expect to always have one (but not more) programming assignment always due. Approximate hand-out dates: 9/8, 9/12, 9/15, 10/6, 10/27, 11/3, 11/19.

There will be four written assignments. The written assignments will ask you open-ended questions of a "what if" nature, and also synthesize material across different parts of the course. They will be out for at least one week each. Approximate hand-out dates: 9/26, 10/15, 10/31, 11/21.

We currently intend to have one essay assignment (but may add a second one). Essays will be brief, no more than two (or even one) page long. We expect the (first) essay assignment to be handed out in late September.