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)
  • Head graduate teaching assistant: Julia Proft (Grading)
  • Head undergraduate teaching assistants: Chirag Bharadwaj (Consulting), Daniel Sainati (Recitations)
  • Graduate teaching assistants: Cheng Yao Wang, Brandon Zhang
  • Undergraduate teaching assistants: Aditya Bodas, Alex Chen, Daniel Donenfeld, Trevor Edwards, Hunter Goldstein, Shantanu Gore, Yu Gu, Lavanya Kannan, Ji Hun Kim, Daniel Liang, Eric Lin, Manvith Narahari, Andrew Sikowitz, Andrew Wang, Shiyu Wang, Eric Wu, Richard Wu, Sailun Xu, Matthew Zang, Oscar Zegarra, Albert Zhang, Alexander Zhang
  • Consultants: Cheyenne Biolsi, Jonathan Chen, Richa Deshpande, Rachel Farrow, Rebekah Hess, Matthew Hsu, Joshua Hull, Shreya Jain, Troy Joseph, Neel Kapse, Advitya Khanna, Young Chan Kim, Derrick Lin, Austin Liu, Jesse Lupica, Ke Ning, Niranjan Ravi, Taylor Schoettle, Gur-Eyal Sela, Jiaqi Su, Megan TeeKing, Jiaying Wang, Weiyu Wang, Alexander Xu
  • Administrative assistant: Amy Finch Elser (401 Gates)

The schedule of instructor office hours will be posted on Piazza. The schedule of consulting hours will be hosted in a Google calendar. There are no consulting or office hours during official breaks or during exams. Consulting hours end at 5 pm on a prelim day. Consulting and office hours end on the last day of classes.


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. 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 verify with the Registrar that you are enrolled in the course. Within a couple days of enrolling you should automatically be added to CMS; there's no need to contact us directly unless about a week has elapsed without you being added. We will not add students to CMS until they are enrolled with the Registrar.

Refrain from emailing the course staff directly. Instead, post either a public or a private question to Piazza. This is the most effective way to manage communication in a large course. Please avoid posts that are private only to specific people (especially the professor) instead of the entire course staff, because it limits the staff's ability to efficiently distribute the communication load across many people. If you do need to contact the professor for something confidential, come in person to office hours, or if it's not time sensitive, send email to Please note that neither email nor Piazza is an appropriate channel for discussion of grades—such discussions should occur in person.

Course materials

There is no official textbook for the course. The main source of materials will be the notes, slides, and labs posted on the course website.

If you'd like a very gentle, textbook-style introductory treatment of OCaml programming, OCaml from the Very Beginning is recommended. It's currently about $15 to purchase a PDF. Another good introductory textbook would be Introduction to Objective Caml by Jason Hickey (PhD 2001). It's freely available as PDF for now.

For a more in-depth treatment with some real-world examples, you could read Real World OCaml by Yaron Minsky (PhD 2002), Anil Madhavapeddy, and Jason Hickey (PhD 2001). It's freely available as HTML. Be aware that this book heavily uses a rapidly evolving, third-party library called Core developed by Jane Street, a quantitative trading firm at which Dr. Minsky is the Head of Technology, and that CS 3110 does not use that library.

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. Register your i>clicker in the CS 3110 course in Blackboard. Use of someone else's i>clicker, especially if they cannot be there and asked you to click theirs, is a violation of Academic Integrity. You will never be graded on whether the answers you submit by i>clicker are correct; it is simply part of your attendance grade.

Class meetings

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

Attendance at recitation is mandatory and will be recorded by TAs. You must attend the recitation section for which you are registered. We wish we could be more flexible on that, but it's going to be necessary to streamline attendance taking, to fairly balance the number of students in each recitation, and to ensure that enough seats are available in each room.

We understand that once in awhile you will need to miss a lecture or recitation, or that the i>clicker system will glitch, so we allow a generous (but unspecified) number of absences. After that your attendance grade degrades linearly, so there's really no need to be concerned about any particular absence you might incur.

Assignments and final project

There will be approximately five homework assignments, which may include written problems, programming problems, and optional karma problems. Early assignments will be individual, whereas some later assignments will permit partners.

There will also be a final project undertaken during roughly the last month of the course. You will build a software system as part of a small team, including designing the system, reviewing your design with the course staff, implementing the system, and demoing it for the course staff.

Extensions and late policy

Extensions will be granted only in exceptional circumstances, such as documented illness, and are handled exclusively by the Head TA for Grading in consultation with Prof. Clarkson. Extensions will not be granted for job interviews or large workloads in other courses.

Unless otherwise specified, assignments may be turned in after the deadline with the following penalty applied to the score received:

  • 1 day late (i.e., immediately after the deadline up to 24 hours later): −10%
  • 2 days late: −25%
  • 3 days late: −50%
  • >3 days late: −100% (we won't grade it)

Weekends (Saturday and Sunday) count as a single day for the purpose of calculating late penalties. So turning your assignment in on Sunday night is no worse than turning it in on Saturday morning.

Here are a few words of caution about CMS and late submissions:

  • The deadline for an assignment is not the time by which you must finish writing a solution; rather, the deadline is the time by which you must successfully upload your solution files to CMS and confirm that CMS has recorded the correct versions of those files. CMS might lag near the deadline as many students attempt to upload their submissions at the last minute, perhaps even causing your submission to be marked as late. That is your problem. Requests to have a penalty removed because CMS lagged near the deadline will be denied. We recommend that you upload your files at least one hour before the deadline.
  • In this course, there might or might not be a grace period configured in CMS. We won't say more than that. Do not (re)submit after the deadline unless you are comfortable with the fact that you might receive a late penalty. We won't respond to questions about whether you got in during the grace period (if in fact it exists)—if you have to ask, just assume the answer is that you got the late penalty.
  • You must submit your work through CMS; email submissions, whether late or on time, will be deleted without response.
  • CMS enables you to upload as many times as you wish before submissions are closed. Only the most recent version, with the appropriate late penalty, will be graded. Requests to have the course staff grade earlier versions (with or without a penalty) will be denied.
  • It is your responsibility to verify before the deadline that you have submitted the intended versions of your files. Requests to substitute another version (e.g., "I accidentally submitted the wrong files") will be denied.

We sincerely regret having to enforce these policies, but the administrative overhead associated with late submissions has become too great. And sorting out whether students are unfairly trying to work past the deadline (while unjustly blaming CMS) is not feasible.


There will be two preliminary exams and a final exam. Exams will cover material from lectures, recitations, online notes, and assignments.

Each preliminary exam will have two parts: an in-person part, and a take-home part. Both parts must be completed as an individual, not with partners nor teams. The in-person part will be taken during the prelim exam time scheduled by the Registrar. You will then have 24 hours to finish the take-home part and submit it to CMS. As a very rough estimate, we intend that average students should be able to solve the take-home part within two hours. Schedule that time on your calendar now.

Makeup exams are offered for students who have conflicts with the 7:30–9:00 pm time scheduled by the Registrar. You will take the in-person part as a makeup, then you will have the same take-home part and the same submission deadline as everyone else. 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 exam times will be offered for prelims.

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. Once you enter the examination room you may no longer ask permission to be excused. In particular, once you begin the in-person part of the exam, you must complete the take-home part. 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.

There will be a final exam. Further details will be announced in mid-September after the Registrar publishes the final exam schedule.


Regrades are intended to correct serious errors in grading, not to dispute judgment calls made by graders. Graders do sometimes take off a little too much, but they just as often give a little too much. In our experience, exceptionally few regrade requests would actually make a difference in the final course grade. So rather than all of us obsessing over regrades, we'd prefer that you spend your time on doing well on the next assignment, and that we spend our time on developing the next assignment.

Do feel free to meet with the course staff if you cannot understand the written comments the grader provided on your solution. But the grade on your solution and/or changes to the grade are "out of bounds" topics for discussion at that meeting, with one exception: grading mistakes of a purely arithmetic nature (e.g., the grader wrote that they were deducting 5 points but entered a deduction of 6 into CMS) can be fixed on the spot, without needing to follow the process below.

If you decide that a serious mistake was made in grading your assignment, then we would be happy to fix it. Here is the process:

  1. Prepare a written regrade request by filling out this regrade request form. Attach hardcopies of your entire original solution and the entire grading comments. Your request needs to demonstrate that there was an error in grading, and that you understand the correct answer.
  2. Submit that request to the homework handback room (Gates 216).
  3. Be patient. Regrade requests receive lower priority than any other active grading.
  4. The Head TA for Grading, in consultation with Prof. Clarkson, will read your written request, consider its merits, and make a decision about a grade change. The grade on your assignment might increase, decrease, or remain unchanged as a result of the additional scrutiny the regrade request engenders.
  5. The result of your request will be communicated back to you via CMS.

Note that this process is entirely written. We will not discuss regrades with you in person; for sake of consistency in grading (hence fairness), we prefer to handle all the regrades for a given assignment at one time.

The deadline for submitting a regrade request is one week after you receive the original grade. Requests submitted after that will be denied without consideration of their merits.

Resist the temptation to use regrade requests as a means to fish for a better grade. Here are two words of caution:

  • Any regrade request that we perceive to be specious will inspire increased rigor in rechecking your submission, and that often leads to a grade reduction. The course staff will go to great lengths to help you understand the course content; we are considerably less enthusiastic about discussing how what you wrote could be stretched to mean the right answer.
  • We track all regrade requests that are submitted throughout the semester. When we determine final course grades, we look carefully at students who are near the cutoffs between letter grades to see whether any extra consideration is warranted for adjusting their grade up or down. Abuse of regrade requests will factor heavily into this extra consideration.

We sincerely regret having to enforce this policy, but regrades have become an unjustifiable amount of work—both yours and ours—with little benefit to anyone.

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 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 student'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.


We expect the breakdown for the final course grade to be as follows:

  • Assignments: 25%
  • Final project: 15%
  • Preliminary exams: 30%
  • Final exam: 25%
  • Other factors: 5%

Assignments are weighted equally. Preliminary exams are also weighted equally. Other factors include attendance, submission of the final course evaluation, participation on Piazza, appearance at office hours, and any means by which you have demonstrated mastery of course content.

Sometimes students ask whether the final grade is curved. The answer is that it depends on what you mean by "curved." Any mapping from numeric scores to a letter grade implicitly defines some kind of curve. But we do not give out a fixed percentage of A's, B's, etc. In fact, we'd be happy if everyone in the course learned the material well enough to get A's. Historically that has not happened, though, and the median grade in the course has been between B and B+.

Gratuitous advice

Keep an open mind. Have fun. Learn something about yourself along the way.