Principles of Computer Science
Syllabus, Spring 2009
CS 60, Principles of Computer Science, provides the student with a broad overview of the science of computer science, at the same time providing sufficient depth in a number of key conceptual areas that are intended to serve both majors and non-majors well. These concepts include:
All of these concepts are important in both computer science and engineering. Programming
in a variety of languages is used as a vehicle to demonstrate concepts. Language choice is
not specifically made to match the often-changing demands of industry (though Java doesn't hurt!). Instead, we
hope that each student gains experience in as wide a range of programming practices as possible.
Underneath each assignment's language are conceptual points that are language-independent.
The overarching goal is that, at the end of CS60, you'll feel comfortable programming in any
language -- even one you've never seen before! That is, you will be a savvy computational thinker,
not dependent on any particular technology.
The choice of material in CS 60 is based on a combination of utility and accessibility. We want to serve non-majors with a deeper and broader course that builds from CS 5 with skills that will directly benefit the pursuit of any discipline. In addition, this course is a launching point for more serious study in the CS major itself. For example, CS 60 is a prerequisite for courses such as
Class Times and Place:
Course Homepage: http://www.cs.hmc.edu/courses/2009/spring/cs60
Instructor: Ran Libeskind-Hadas
Office: Olin 1245
Phone: 909-621-8976
E-mail:
hadas AT cs DOT hmc DOT edu
Ran's
Schedule with Office Hours (... but feel free to drop by outside
of office hours or send me an e-mail to set up a meeting time)
Instructor: Zach Dodds
Office: Olin 1255
Phone: 909-607-1813
E-mail:
dodds AT cs DOT hmc DOT edu
Office hours: W 4-5, F 1-2:30 and 3:30-4:30
Also, feel free to stop in for M&Ms, Atari 2600, or CS 60 help whenever I'm not hiding.
Graders/Tutors (aka "Grutors") There are several grutors for this course whose mission in life (at least some of the time) is to help convey the wonder of CS 60! They will be holding regular hours in the Beckman CS labs in B102 and B105 (the link below has specific hours). They will also be grading your assignments (but not the exams). A complete schedule of tutoring hours can be found at http://www.cs.hmc.edu/courses/2009/spring/tutorhours.html
Help via E-mail: You can send e-mail to
cs60help AT cs DOT hmc DOT edu with
short questions related to homework. The grutors and instructors will be
checking this e-mail address frequently, so it is a fast way to get
your questions answered. For general questions, there are advantages to using cs60help, rather than
sending e-mail to individuals directly: it's often quicker and it ensures
that the entire course staff sees the question and subsequent answer,
allowing us to be consistent about the way we answer questions.
Of course, if you have
a question for one of us in particular, please do
email us individually!
For more extensive help, please see Ran or Zach or a grutor in person. In particular, for help with the submission system (a forgotten password, for example), email Zach. For help with the computing system you're using -- your machine or one of the lab machines, your best bet is to seek out one of the many Mudders who know the system well!
You have three late days or "CS 60 Euros" that you may use at your discretion -- you don't need to tell us in advance. A late day allows you to turn in an assignment 24 hours late with no penalty. You may not use two late days on the same assignment. Late homeworks will not be accepted once these late days have been used. In cases of illness or emergency, you should contact Dean Cardenas to arrange an extension and have her contact one of us. CS 60 does not drop any of the assignment scores, however: assignments are by far the most important vehicle for learning the skills and concepts in the course!
In addition to weekly assignments, there will be one midterm exam and a final exam. See the exam schedule page for up-to-date details.
The weekly assignments will involve programming and, especially later in the course, some "paper and pencil" problems.
We will use guidelines in grading the programming assignments which will be approximately as follows:
Your final grade will be a weighted average of your grades on each course component. Components will be weighted as follows:
score( p ) => p >= 0.95 ? "A";
score( p ) => p >= 0.90 ? "A-";
score( p ) => p >= 0.87 ? "B+";
score( p ) => p >= 0.83 ? "B";
score( p ) => p >= 0.79 ? "B-";
score( p ) => p >= 0.65 ? "C range";
score( p ) => p >= 0.55 ? "passing range";
Whether you are programming individually or as a pair, there are a few important rules regarding cooperation. You are always welcome and encouraged to discuss approaches to solving homework problems with any classmate, the grutors, Zach, or Ran. You may not share any written/typed materials of any kind. In particular, you may not send or receive code that is related to this course by e-mail, on the web, from another person's file or printout, or in any other form. This rule applies to two people working as a pair with the following exception: The code may be sent by e-mail from one member of the pair to the other after the code is submitted for grading. Moreover, the pair may print out a copy of their code to work on together.
You may wonder if it is permitted to help a classmate (other than your partner if you are pair programming) debug a program and, in the process, look at their code. This is permitted, assuming that it is done with the intent of aiding your classmate and not with intent of gleaning code that might be used in your own program. Use your good judgement here. If you're not sure about what's appropriate, please talk to one of the professors.
All conduct in this course should be conducted in accordance with the Harvey Mudd Honor Code. If you are an off-campus student and unfamiliar with the honor code, please talk to Ran or Zach.