cs173: Syllabus

Staying Current

You are responsible for keeping track of all assignments and other material posted to the course's newsgroup, brown.cs.cs173, and to its Web site. Please read the newsgroup regularly, because we will post notification of major changes to the Web site there.


We will assess your performance through several media:

  • There will be one midterm and a final, each worth about 20%. Both will be three hours long. Approximate dates are given in the schedule below.
  • There will be five to eight programming assignments during the semester, cumulatively worth about 35%.
  • There will be three essays during the semester, cumulatively worth about 25%. Be sure to read the note about the Writing Fellows.
Regular attendance and productive classroom participation may slightly ameliorate some weaknesses elsewhere; the converse is also true.

Late Homework

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 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)))

Because assignments are due before class, you might be tempted to work all night. This often means you won't attend class at all, or will be too sleepy to participate effectively in it. As a disincentive, we make assignments due at 2am. A penalty unit is a 24 hour period or part thereof after the due time. Even a minute past 2am incurs one 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.

Posting Questions

Mail questions intended for the course staff to cs173. If we think a question or its answer is of general interest, we will copy our response to the newsgroup.


The purpose of assignments in this class is to help students learn key ideas in programming languages. Some (not all) assignments require a certain insight, or at least careful analysis, that is much harder to generate or perform than to merely replicate. We believe that doing it for yourself, though much harder, is the only way to truly understand that insight or analysis.

Having said that, we also want you to be able to work with each other, learning from one another's successes and failures. Therefore, we will permit you to discuss assignments with your classmates (in addition to the course staff). Note that you may only discuss possible approaches; you may not share answers, unless explicitly permitted by the assignment.

What's an answer? We consider it to be any key insight, technique or piece of code without which the assignment seems difficult but with which the assignment becomes solvable or routine. This includes literal code and text. Obviously, this concept is impossible to define precisely, so you'll have to use your discretion. If in doubt, ask us first before you share so you may avoid trouble later!


We will not be publishing a day-by-day schedule for this course. A day-by-day schedule doesn't make sense given that some lectures will invariably run over or will need revisiting, and it's hard to predict a priori which ones these will be. As a student, you should prefer a schedule that doesn't force the professor to move on irrespective of whether or not you have understood the material well enough!

We do provide the following tentative schedule of tasks:

Both the midterm and the final will be take-home exams that will be out for several days. The midterm will be handed out in late October (the exact date depends on when we cover certain material in class) and will remain out over a weekend. The final will be handed out during the final exam period and will remain out during the scheduled finals slot for this course. You should thus have ample opportunity to schedule when you do the exams.
There are three essay assignments with fixed dates. Each essay has associated with it three dates: the day we hand out the assignment, the day your draft is due to the Writing Fellow, and the day the final essay is due.
  1. Handout: 9/10; Draft: 9/18; Final: 10/2
  2. Handout: 10/7; Draft: 10/21; Final: 11/8
  3. Handout: 11/15; Draft: 11/20; Final: 12/2
Programming Assignments
We expect to hand out programming assignments, each due about a week later, on the following dates: 9/20, 10/2, 10/16, 10/25, 11/11, 11/25. These dates are highly tentative, since they depend crucially on when we cover certain material in class, and are thus almost certain to change. Also, if we feel a particular assignment demands too much work, we may decompose it into two or more smaller assignments.

Writing Fellows

This course will employ Writing Fellows. Please see their page for more information about this unique and valuable program. What this means for you is that each essay assignment has three dates. The first date is when we hand out the assignment. The second is when you turn in your draft to the Fellows. You can expect to receive feedback within a week. The third date (at least one week later) is when the final version of your essay is due.

Note the following very carefully. When you turn in your final essay, you must also submit both your preliminary version and the Writing Fellow's typed remarks. If you fail to submit both a preliminary version and the Fellow's remarks, we will automatically give you a zero for that assignment — no exceptions! Furthermore, while we will grade you primarily on your final essay, we will deduct a portion of the grade if it appears you made very little effort in your initial submission. This is to ensure you don't abuse the program by turning in half-hearted preliminary essays.