Course CS 136 Fall 2012
Williams College Department of Computer Science
Instructor:Prof. Morgan McGuire
TAs: April Shen, Josh Geller, Benno Stein, and Kai Wang (TA Hours)
Lecture:MWF 9:00-9:50 am TPL 205
Lab:Wed 1:30-4:00 pm TCL 216 + 217


What makes for a good computer program? How should one go about writing one? In this course we will investigate some of the features of quality software construction: the careful analysis of a problem to determine the appropriate data structures, the design of efficient algorithms for manipulating these structures, and the organization of the program as a number of small, easily constructed and reusable classes. Work on program design, analysis, and verification will be combined with an extended introduction to data structures; all are important in the construction of sophisticated computer programs.

Fulfills the Quantitative Reasoning requirement.

Format: Lectures/labs. Evaluation will be based on programming assignments and examinations.

Prerequisites: Computer Science 134 or equivalent. (Mathematics 251 is recommended, but not required.)


The textbook for the course is

D. Bailey, Java Structures, √7 Edition, 2007.

It is available for free online as a PDF. An electronic book saves you money, takes no room in your backpack, and is easy to navigate using hyperlinks. You may print it on a non-CS printer or through Office Services if you want a hard copy; I prefer to read it on lab computers and e-book readers.


8 Lab Programs*40%
3 Exams50%
* Lowest grade dropped

Participate in discussions during lecture, asking and answering questions in lecture and lab, and e-mailing the me and the class with corrections and observations. It is important to engage both your peers and the material.

I will not grade or debug programs that are poorly documented, and neither will the TAs. Comments, whitespace, and variable names are effective means of documentation. This is for your own good, an issue of respecting the TAs' time, and a practical matter: If the author can't explain how a program was supposed to work, how could someone else possibly know?

CS136 is a typical 100-level science course. Most students will receive some kind of A or B, depending on their aptitute. The easiest way to succeed is to work steadily and ask questions.

Regardless of numerical grades, students who work in good faith on all assignments and exams and attend all lectures and labs can expect not only to pass but to receive at least a "C" grade. Likewise, repeated absence from lecture or lab, and not handing in programs are grounds for a lowered or failing grade the course, even for students who score well on they work that they did submit.

Assignments and exams are due at or before their deadlines. Late work will not be graded. This keeps you from overextending yourself and means that everyone in the class has the same amount of time. If you know that you'll be on a trip, then just start and turn in your work early. Don't worry if you have an emergency or bad week--that's why I drop the lowest lab grade. If you have two emergencies, then please let me know what is going on and talk to the dean's office for support.

Honor Code

Students are bound by the CS Department Honor Code and Usage Policy and the College Honor Code. In short: all work should be your own (or that of your assigned project group). Remember, failing an assignment may lower your grade, but cheating will ruin your career!