Haskell track: administrative information


CS 1 (or placement out of CS 1) is a prerequisite for this track. CS 4 would be nice too.

You should have a CS cluster account. To register for an account on the CS cluster, please go fill out the online form: http://www.cs.caltech.edu/cgi-bin/sysadmin/account_request.cgi. If you have not already done so, please do this immediately as it will take some time to process and you will need your account for the first assignment. You need to be at least somewhat familiar with Unix (specifically Linux) to work on the CS cluster computers; if you aren't then you can read this tutorial at ITS. The CS cluster computers are located in room 110 of the Annenberg building; you will need to have your ID card enabled to allow you to use the card reader to get into the room.


The instructor is Mike Vanier (mvanier@cs.caltech.edu). My office is in Annenberg room 110.

My office hours

My office hours are on Tuesdays from 4 to 6 PM in Annenberg 110.

However, feel free to drop in to my office at any time. I'm unlikely to be in in the mornings, but I'm often around fairly late at night. If you need to meet with me outside of office hours, sending me email beforehand is strongly recommended.


Lecture times are TBD.

You will need card access to the Annenberg building. If you haven't already given me your Caltech UID number (on the signup sheet or by email), email me your UID number and I'll arrange this.

Lectures are an hour long. Attendance is optional; if you can do the work without lectures, it's fine with me.

Grading policy

The course is pass-fail. Each assignment will get an integer grade from 0 to 3, where the number means the following:

Late assignments will lose 0.5 marks for each day they are late (all the way to zero). You may also redo your assignments (see below).

The specific day that an assignment is assigned will be indicated on the csman page. Usually, it will be on the same day as a lecture. All labs are due at midnight of the due date.

In special cases, I may grant extensions on homework to individuals in special circumstances. The duration of the extension will depend on how compelling the reason for the extension is.

There will be 5 labs, for a maximum total mark of 15. The pass grade is 11/15, which is just above a 2 average. This is a very strict pass threshold! A grade of e.g. 10.5 is a failing grade. If you get that grade without having completed all the labs you don't have to complete the remaining labs, but of course, you'll learn more if you do (and you will need to complete all labs to be eligible to be a CS 11 TA in this track in the future).

In addition, there is a "completion bonus" of 0.5 marks per lab which you get when all labs have been completed with a mark of 2 or more (not counting late penalties). This is a way to compensate for late penalties. However, if you accrue massive late penalties on the first few labs, this bonus may not be enough to save you and you should drop the course. Note that the completion bonus cannot pull your grade above 100%.

NOTE: We will not accept the first submission of any lab later than one week before grades are due. If you are going to try for the completion bonus, do not try to submit labs for the first time the day before grades are due; you will get a zero on the lab and you will not get an E grade on the course! We don't like students trying to game the system.

If you're heading for an F and drop day is near, I will encourage you to drop the course so as not to harm your academic record. Don't count on getting an E; I rarely give E grades (though I will give I grades for e.g. medical problems).

Teaching Assistants

Currently, we don't have teaching assistants in this track.

Collaboration policy

You are welcome to collaborate informally on your assignments with other individuals who are taking or have taken the class, but you must write all of your own code. Copying another student's code verbatim or nearly verbatim is not acceptable and is an Honor Code violation. Taking another student's file and modifying it to make it look different is definitely not acceptable and is an Honor Code violation. Consulting a printed or electronic version of another student's code and referring to it while you write your own code is not acceptable either, and is an Honor Code violation. Having someone dictate code while you type isn't acceptable either. Basically, you have to do your own work.

Getting advice on algorithms or syntactic details of the language, or suggestions on how to debug a part of your program that isn't working, is fine.

All of the above also applies if you are getting tutored for the course, officially or unofficially.

In addition, of course, if you are having problems you can email me and/or come and see me during my office hours.

Writing your assignments

Once you have a CS cluster account the normal place to write your code will be in the CS cluster itself, which is in Annenberg room 104.

Most of you prefer to write your code in your dorm rooms, and, sadly, most of you run Windows exclusively on your computers. I'd love to persuade you to change that to a dual-boot Windows/Linux machine (or to use Mac OS X with the developers cdrom installed), but failing that, the easiest way to work remotely is to use the freely-available PuTTy program, which will (among other things) act as a terminal into the CS cluster. Once this is set up, you can log in to the CS cluster login machine to do your work. However, we prefer that you not do this, since a lot of people use that machine for reading their email and doing routine (non time-intensive) tasks. Whatever you do, don't run a computationally-intensive program (like labs 6 or 7) on the login machine, because that will make it slow down to a crawl and you'll receive nasty emails from people (including me).

A different approach is to use Cygwin, which provides a Linux-like environment on Windows machines, including fully-functional versions of the command interpreter (shell) and emacs. Setting up Cygwin is not for the faint-hearted and will chew up a lot of disk space, but if you get it working, it'll be a great environment for this class.

You could also use an emulator such as VirtualBox, VMWare, or Parallels to run a virtual Linux machine on your home machine. If you do this, you're on your own, but it's not that hard to get going (I've done this successfully with VirtualBox with little difficulty; Ubuntu is a good distribution to run virtually).

Submitting assignments

Grades will be submitted through the csman program. If you are enrolled in this track, you should have a csman account. Email the instructor (Mike Vanier) if you don't have an account.

Redoing assignments

We will deduct marks for a variety of reasons, including (but not restricted to) any of the following:

In general, any serious problem will result in a grade of 1 or lower. Less serious problems (e.g. poor formatting) may only result in a grade of 2, but you may want to try to bring this up to a 3. To this end, you are allowed to redo your assignments. The redo system works as follows. You will be assigned a grade based on what the assignment is worth without redos. Once you have received your initial grade (by email), you have one week to submit a redo (or more than one redo). Once the redo is ready, you should submit it to csman as usual. Any redos received in the week after the initial grading will be graded; after that, the last grade is the final grade for that assignment. If your grader gets your redo back to you before the week is up and you still need to make changes, you may submit another redo.

How assignments are graded

We will grade your code with in-line comments. Our comments will look like this:


Please don't write your own comments in this style (at least for the duration of this course). For style (code formatting) issues we will sometimes identify the problem via a tag that can be looked up in the Haskell style guide. An example might be:

let i=j*k+w in 

which says to look in the style guide for the style violation called [OPERATOR_SPACE]. If you do that you'll see that we don't like to see more than one statement on a line. Poor code formatting is so common that this notation saves us a lot of work, as well as forces you to read the style guide. In addition, there is also a Haskell style checking program which you will use to check the style of your code. This will give you instant feedback in a way that we can't, but it won't catch all style violations. In CS 11, we are very picky about code formatting, so please use the style checker; it'll save you a lot of time.

When we complain about something in your code, we expect you to fix it. Sometimes we'll say something like "this is OK, but a better way would be...". You should fix that too. Ignoring such comments will lead to an automatic redo. If you don't understand what we're asking you to do, email us or come to our office hours -- don't just ignore the comment and hope it'll go away. This applies even for style violations. We're usually fairly lenient about style checking for the first lab, but not after that.

Late adds

I (Mike) will generally allow the course to be added during the first two weeks of class. Normally I won't allow adds after that, even if it's before add day.

One thing I do require for late adds is that the student submit proof that he/she has the prerequisites for the class. Officially, this means that the student has passed or placed out of CS 1, though I will also accept students who have passed a different CS 11 track, or students who have taken and passed upper-level CS classes with substantial programming components (e.g. CS 24). Taking a programming course concurrently is not acceptable, and neither is having taken a programming course in high school. Furthermore, since the registrar doesn't yet enforce course prerequisites, any student wishing to add CS 11 must send me their Caltech transcript as evidence of having the proper prerequisites (either a PDF or a written copy is fine). I know this is a nuisance, but we've had a lot of problems with inadequately prepared students taking the class and doing very poorly. CS 11 is emphatically not a course for absolute beginners! If you're a beginner, you should take CS 1 instead.

When a student adds the course, all assignments that have been assigned up to that point are due at the due date for the current assignment. Normal late penalties apply with respect to these due dates.


We welcome auditors. If we have time, we will grade assignments submitted by auditors. However, this grading has low priority and may not happen (or may not be up to my usual grading standards, or may not be returned promptly).