the evolution of problem solving...

Course description

ORC. Motivated by applications in the arts, sciences, social sciences, and computer systems, this course develops skills in solving problems computationally. Topics covered include representation (how to capture computationally the objects and processes of a problem), abstraction (how to build high-level, multi-purpose toolkits for manipulating representations), recursion and modularity (how to break problems into subproblems and combine the solutions), reasoning (how to understand what a computation is doing), and concurrency (how to deal with multiple simultaneous processes). These concepts are taught within a functional programming language that supports them well; they are applied in a series of programming labs solving fun application problems.
Prerequisite: Computer Science 5 or placement via credit or exam.

Informal. Now that you've got some programming experience, let's use it to do some fun stuff! We'll construct animations, analyze biological sequences, search social networks, play games, parse and manipulate HTML, identify clusters in data sets, solve puzzles like Sudoku, and more. And, while we're doing that, we'll also develop expertise in core programming techniques useful throughout computer science. In the process we will learn that there is more than one approach to programming.

Who, when, where

Chris Bailey-Kellogg | 250 Sudikoff | office hours: Mon 2-3, Tue 12-2, Fri 3-4, or by appointment
Teaching assistant
Pete Johnson | 203 Sudikoff | office hours: Mon 3-5, Thu 2-4, or by appointment
Section leaders
Ken Greim, Jennifer Lure, Sam Marullo, David Rice. Section assignments and meeting times posted on Blackboard.
Course staff email
cs8 -at- cs -dot- dartmouth -dot- edu
Ask for help or guidance — one or more of us will answer!
11-hour | MWF 11:15-12:20; Tu 12-12:50 | 006 Kemeny
The x-hour will be used for make-up, review, discussion, etc.
Section meetings
Weekly small-group meetings with section leaders to review lecture material, discuss questions, go over homeworks, etc. Groups and times posted on Blackboard.
Help will be available in Sudikoff instructional lab 003 at regular times: Sun 8-11, Mon 8-11, Tue 6-11. Students enrolled in CS 8 should have automatic access via ID card to Sudikoff and the instructional labs; drop an email if there are problems.
Announcements and discussion board
Available on Blackboard
Required: "SOE", The Haskell School of Expression: Learning Functional Programming Through Multimedia, by Paul Hudak. Be sure to fix the errata in your copy.


Short assignments (10%)
Practice and feedback to aid your understanding of the basic course material.
Hardcopy for written problems; hardcopy and electronic submission for programming problems. Hardcopies are due by the start of lecture on the due date, in class or in the "In" slot for your section leader in Kemeny Hall. Electronic copies are due at the same time, submitted via Blackboard. The course staff reserves the right to consider an assignment late or missing if either the printout or the Blackboard submission is absent.
Late policy
No credit.
2 (correct and good), 1 (needs work), or 0 (nothing of substance). A solution receiving a 1 may be revised and resubmitted once, before the next regular class period after it is returned, for a possible upgrade to 2.
Problem sets (50%)
A mixture of written and in-depth programming exercises, challenging you to use the ideas we study in class to solve new problems.
Same as for short assignments, except that electronic submissions are due by 2 am (hardcopies are still due by class time).
Late policy
Penalties: < 8 hours: 10%; < 24 hours: 20%; < 48 hours: 40%; more: no credit. These apply if either the electonic or the hardcopy submission is late.
Under extenuating circumstances (prolonged illness, death in the family, etc.), alternative arrangements may be made with the instructor before the due date.
Specific grading rubrics will be provided for each problem set, covering correctness (solving the assigned problem), structure (organization, use of techniques covered, efficiency), style (readability of code, clarity of documentation), and testing (your demonstration of correctness).
Exams (40%)
A midterm and a final exam, each worth 20%.
Extra credit
Some homeworks have specific extra-credit problems; you may suggest other extensions for possible extra credit; any exceptionally clever, creative, or insightful work may likewise be awarded extra credit points. As its name suggests, extra credit is always optional, and you should never feel that you have to do extra credit problems. Extra credit points are recorded separately from other grades, and may be used to help out borderline letter grade assignments at the end of the term. Extra credit points can only help, never hurt, your final grade, regardless how much or how little extra credit you or your classmates choose to do. However, you should not view extra credit as a substitute for doing good and thorough work on your assignments.

Collaboration and honor code

Dartmouth's honor code applies to this course, and academic misconduct policies will be strictly enforced. If you have questions, ask!

Much of the learning in this course comes from doing the programming exercises. On many problem sets, you may work jointly with one other person, if so stated. No more than two people may work together on a given problem set. If you choose to work with someone else, you and your partner must submit a single joint assignment with both names on it, and you must work with the same person for the entire assignment (you cannot work with one person for some parts of an assignment and a different person for other parts).

On short assignments, you must work alone unless otherwise stated in the assignment.

Under no circumstances may you hand in work done with (or by) someone else under your own name. If you have any doubt, credit any person(s) (other than course staff) from whom you got help. Your code should never be shared with anyone, other than your partner (if you are working in a pair). You would be amazed at how easy it is to tell when people work together on problem sets, so please don't make life unpleasant for all of us by breaking these rules. The penalties for cheating at Dartmouth are severe, starting with suspension and including expulsion. If you are unsure about anything, please ask.

Any hard-copy and electronic sources used must be properly cited and acknowledged. The only exceptions to this rule are as follows. It is not necessary to cite material which is copied from lecture notes or example code which we supply you in the course of this term. Material copied or otherwise drawn by you personally from the course textbook need only be cited in general terms, e.g., "this code sample is from the textbook.".

You may not consult any solutions from previous terms' CS 8 assignments, whether they are from faculty or other students. You may not look at exams from previous offerings, except for ones that we distribute as sample exams.


Students with disabilities enrolled in this course and who may need disability-related classroom accommodations are encouraged to make an appointment to see the instructor before the end of the second week of the term. All discussions will remain confidential, although the Student Accessibility Services office may be consulted to discuss appropriate implementation of any accommodation requested.


CS 8 was developed at Dartmouth College by Scot Drysdale and Chris Bailey-Kellogg, with substantial assistance from Michael J. Fromberger in the summer and fall of 2007.