CS 1 is a prerequisite for this course.
You should have a CS cluster account. To register for an account on the CS cluster, please go fill out the online form here. 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 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.
Lectures will be held on Mondays at 9 PM in Annenberg room 105.
You will need card access to the Annenberg building if you want to use the CS cluster computers (in Annenberg 104) after hours. If you don't have card swipe access already (e.g. from CS 1) then send me your Caltech UID number and I'll arrange this. If you wrote your UID on the signup sheet you don't have to send me anything; I'll take care of it myself.
Lectures will typically last an hour. Attendance is optional; if you can do the work without lectures, it's fine with me.
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 8 labs, for a maximum total mark of 24. The pass grade is 17/24, which is just above a 2 average. This is a very strict pass threshold! A grade of e.g. 16.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).
We have three teaching assistants this term:
All TA office hours are in Annenberg 104. Knock on the window if you don't have building access after hours, and/or ask the instructor to give you access.
TA office hours are as follows:
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 (or a TA) during my (or his/her) office hours.
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. You will need to have your card enabled so that the card reader can let you in.
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).
Assignments are to be submitted through csman. If you haven't got a csman account, one will be created for you. Grades and comments will be submitted to csman, and you'll be notified by email when your assignments have been graded.
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, you have one week to submit a redo (or more than one redo). 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.
We will email you back a copy of your code with in-line comments. Our comments will look like this:
/*** THIS IS ONE OF OUR COMMENTS (ALL UPPER CASE, 3 ASTERISKS AT LEFT).
***/
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 c style guide. An example might be:
/*** STYLE: [STMTS_ON_LINE] ***/
i = 1; j = 2; k = 3;
which says to look in the style guide for the style violation called [STMTS_ON_LINE]. 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 c 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.
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).
If course enrollment is high (i.e. over 100 students) we won't grade labs from auditors. You're welcome to come to the lectures and do the labs on your own, but don't expect feedback.