Course description

CS 3110 is the third programming course in the Computer Science curriculum, following CS 1110 and CS 2110. The goal of the course is to help students become excellent programmers and software designers who can design and implement software that is elegant, efficient, and correct, and whose code can be maintained and reused. CS 3110 covers a broad range of topics, including:

  • Functional programming
  • Writing and using specifications
  • Modular programming and data abstraction
  • Reasoning about program correctness
  • Reasoning about system performance
  • Useful and efficient data structures


  • Instructor: Michael Clarkson (PhD '10)
  • Recitation instructor: Mike George
  • Course administrator: Remy Jette
  • Teaching assistants: Aditya Bodas, Jonathan Chan, Amy Chen, Alan Cheng, Daniel Donenfeld, Trevor Edwards, Seung Hee Han, Remy Jetty, Sushmitha Krishnamoorthy, Eric Lin, Genki Marshall, Leo Mehr, Alice Meng, Giang Nguyen, Linda Pei, Charles Qian, Ralph Recto, Daniel Sainati, Lucia Song, Guandao Yang, Anna Yesypenko, Richard Zhang
  • Consultants: Quinn Beightol, Kavan Bhavin, Patrick Cao, Jonathan Chen, Jake Chen, Yogisha Dixit, Tyler Etzel, Amber Hillhouse, Grant Hoffecker, Akekawit Jitprasert, Chaein Jung, Yujin Koh, Emmett Kotlikoff, Daniel Liang, Linda Liu, Solomon Maina, Eric Pass, Niranjan Ravi, Nimit Sohoni, Yuxiao Tan, Ross Tannenbaum, Shiyu Wang, Spencer Weiss, Richard Wu, Liang Zhang


The course website is

We use Piazza for announcements and Q&A. You can sign up at You are responsible for familiarizing yourself with all announcements made on Piazza. The course staff continuously monitor the forum and will respond to questions in a timely manner. This is the most efficient method of getting help and has the added advantage that others can benefit from your question. If you know the answer to a question, feel free to post a reply yourself, but avoid giving away any hints on the homework or posting any part of a solution. This will be considered a violation of Academic Integrity. Generally, rough algorithms or non-solution-specific code fragments are ok if you need them to illustrate a point.

We use CMS for submission of assignments and for grading. Make sure you can login to and see CS 3110. If you cannot access the course, please send your full name and Cornell NetID to the Course Administrator so that you can be registered.

Refrain from emailing the course staff directly. Instead, post either a public or a private question to Piazza. This is the most effective way for the course staff to manage communication in a large course. Please do not make posts that are private only to the professor—it defeats the purpose of Piazza. If you do need to contact the professor for something confidential, send email to Please note that email is not an appropriate channel for discussion of grades—such discussions should occur in person.

The schedule of consulting hours and instructor office hours will be posted on Piazza. Consulting runs only when Cornell is in session. Consulting hours end at 5 pm on a prelim day. There are no consulting hours during official breaks. Consulting ends on the last shift on the last day of classes.

Course materials

There is no official textbook for the course. The first few weeks of the course will roughly follow Real World OCaml (Yaron Minsky, Anil Madhavapeddy, and Jason Hickey, O'Reilly, 2013, ISBN 978-1-449-32391-2), which is freely available in HTML. Two of the three authors are Cornellians.

You are required to have an i>clicker and to bring it to each lecture. You can buy an i>clicker at The Cornell Store. Cornell CIT provides technical support for i>clicker. Double check that your i>clicker is registered with CIT, even if you have already registered it in other courses. i>clicker GO will not be enabled in this course. Use of someone else's i>clicker, either because you forgot yours or because they cannot be there and asked you to click theirs, is a violation of the Code of Academic Integrity. You will never be graded on whether the answers you submit by i>clicker are correct; it is part of your attendance grade.

Class meetings

Attendance at lecture and section is mandatory. Attendance at lecture will be recorded by i>clickers.

Recitations will cover new material not covered in lecture and provide an opportunity for questions on recent material, assignments, and exams. You may attend any recitation, regardless of the section for which you are registered (but subject to room capacity). We ask that you pick one section and stay with it throughout the semester.


There will be approximately six homework assignments, which may include written problems, programming problems, and optional karma problems. You must submit your work online via CMS; email submissions will not be accepted. Be careful to submit the correct versions of your files. We will view the excuse "I accidentally submitted the wrong version" with extreme skepticism—we have heard it countless times. To discourage abuse of this excuse, we typically apply a small penalty to problems that involve corrected files.

Some assignments will be done in pairs or in small groups. For those assignments, you will submit a single joint assignment with all your names on it. Coordinate with your partners well in advance of the due date and time to register as a group in CMS. Only one of the partners needs to submit the files. Include the names and NetIDs of all partners in all submitted files. Under no circumstances may you misrepresent the authorship of your submitted work. Please see the section on Academic Integrity below.

Most assignments will have a soft deadline and a hard deadline. If you submit after the soft deadline and before the hard deadline, you will automatically receive a 25% late penalty on the assignment. (Another way of interpreting this policy is that submitting before the soft deadline earns a bonus.) We encourage you to use this policy as a way to deal with high workloads once or twice in the semester, rather than repeatedly submitting late assignments.

CMS enables you to upload as many times as you wish before the hard deadline. Only the latest version will be graded. Note that if you upload both before and after the soft deadline, the one after the deadline will be taken, so you will be subject to the late penalty. You will not be able to submit after the hard deadline. It is therefore critical that you submit your assignments on time. CMS tends to lag right near the deadline because so many submissions are made at the last minute, so we recommend submitting at least 15 minutes before the deadline. In this course, CMS will be configured with no grace period, so that you can best predict exactly when the deadline occurs.

Extensions will be granted only in exceptional circumstances, such as documented illness, and are handled exclusively by the instructor. Extensions will not be granted for job interviews or large workloads in other courses.


There will be two preliminary exams and a final exam. Exams will cover material from lectures, recitations, online notes, and problem sets. Makeup prelim exams are offered for students with conflicts. The makeup for a prelim is held on the same day as the prelim itself, but at 5:30–7:00 pm. No other makeup exams will be offered. If you cannot attend a prelim because of health or family crises, or similar life events, you may ask the instructor for permission to be excused from the exam. If you miss an exam, and we excused you, we modify the grading formula to compute your grade with just the two other exams. You must ask us for permission in advance: don't just skip exams and assume you can be excused retroactively. If you miss an exam and we didn't excuse you, you get a zero for the missing score.


We recommend that you double check with the original grader before submitting a regrade request. You will find the grader's NetID on CMS (for assignments) or written on the exam. The grader can typically clarify the grading for you more quickly than a regrade request would. Regrade requests may be made only with CMS. Do not submit paper regrade requests to the Gates Hall homework handback room. Regrade requests should be submitted only when you believe that an error was made in the grading. The burden is on you to demonstrate that error. Requests of the form "we think we should get more points for the work we did" are not valid. There is a deadline for submitting regrade requests, normally one week after grades have been posted. The course staff typically does not begin processing those requests until after the submission deadline has passed, and regrades receive lower priority than any other active grading, so please be patient.

Academic Integrity

Absolute integrity is expected of every Cornell student in all academic undertakings. If you are unsure about what is permissible and what is not, please ask.

You are responsible for understanding these university, departmental, and course policies:

Integrity includes you being honest about the sources of the work you submit. When you submit work in this course, you are representing it as the work of the stated authors (i.e., the members of the CMS group who submitted it) subject to any exceptions that are clearly stated in the submission itself. To avoid committing plagiarism, simply be sure always to accurately credit your sources. To do otherwise is to commit fraud by claiming credit for the ideas and efforts of others, and that is punishable under the Code of Academic Integrity.

Grades, on the other hand, are about the course staff assessing what you have learned. If you turn in someone else's work for course credit, and forthrightly acknowledge you are doing so, you are not acting dishonestly and are not violating academic integrity. But you also show give us no basis for concluding that you have learned the course content. We recommend the following rule of thumb: Never look at any other students's assignment code, or have their code in your possession, in any portion or form whatsoever. Also never share your assignment code with other students.


The breakdown for the overall course grade is as follows:

  • Assignments: 40%
  • Preliminary exams: 30%
  • Final exam: 25%
  • Other factors: 4%
  • Attendance: 1%

Assignments are weighted equally. Preliminary exams are also weighted equally. Attendance is measured by i>clickers in lecture. Other factors include participation on Piazza, appearance at office hours, submission of course evaluations, and any means by which you have demonstrated mastery of course content. This portion of the grade typically affects only a handful of students, raising or lowering their final course grade by 1/3 letter grade.