Exam procedures for CS51

Exam procedures for CS51 #

There will be two exams in CS51. See the syllabus for current information about dates and times.

This document describes exam procedures and policies for CS51. You should read this document and familiarize yourself with its contents well before the exam itself.

Accommodations #

We will make every effort to accommodate students with special requirements, such as extra time for the exam. If you have special requirements for the exam, please let us know as soon as possible by email to administrator@cs51.io providing your AEO letter describing the accommodations.

For students that require extra time and/or separate seating, we will be in touch directly to make arrangements.

Use of materials #

Exams are “open book”. You may use any books or notes or other textual materials, either physical or digital, in preparing your solutions for this exam. Other than your own personal files, notes, content you have downloaded in advance of the exam, you should access only course materials (e.g., cs51.io, Gradescope, course GitHub organization) and official OCaml documentation. You may also use software on your local computer (such as ocaml, utop, and ocamlbuild). However, you may not use any other sources of help, including but not limited to talking with other people and asking questions or reading answers on online forums and platforms. You should also not provide such help to others.

You should practice the spirit of these rules, not merely the letter, which is: We want to see what you, solely by yourself, can accomplish using the programming tools common to the course.

Answering exam questions #

The exam is what Gradescope refers to as an online timed assignment. You should familiarize yourself with the Gradescope documentation on Online Timed Assignments and Submitting Online Assignments. (The exam will not be “browser-locked”, so you can ignore Gradescope’s discussion of that topic.)

DO NOT START THE EXAM UNTIL INSTRUCTED TO BY THE COURSE STAFF THAT ARE PROCTORING YOU.

Gradescope will allow you to save each answer as you complete it. When you are finished with the exam, you can select View Your Submission to look over your answers, and modify and resubmit if you would like.

Exam structure #

The exam is composed of multiple sections, each of which may have multiple questions. Each question is marked with the number of points allocated to the question and may provide a very approximate recommendation for allocating time.

Many of the problems ask you to define something or write code to do something. Throughout the exam, when we ask you to define a value or function or type or module, we mean that you should provide a top-level OCaml definition written in well-formed, idiomatic OCaml using the appropriate OCaml definitional construct (let, type, module, etc.). Your answers will be graded firstly on the well-formedness and correctness of the code, but in keeping with the course’s goals, we may also secondarily consider the many other dimensions of code quality – including design and style issues – in evaluating your answers.

Academic integrity #

On the exam, you will be requested to affirm your awareness of the standards of the Harvard College Honor Code.

Exam tactics #

We turn now from instructions and procedures to friendly advice. It’s useful to think ahead about tactics for doing this exam, because certain properties of the exam are unusual:

  • The exam is open book, open notes, and open ocaml. (It is not, however, open internet.)

  • The exam is written in such a way that opening books, notes, and ocaml shouldn’t help much.

  • The exam may be time-pressured in ways that labs and problem sets are not.

  • Some problems will be easier than others.

What tactics follow from these properties of the exam?

  • The time limitation means that time management is especially important. You’ll want to have at least attempted all of the problems on the exam.

  • Because some problems are easier than others, you don’t want to get hung up on a hard problem when there are easier ones you could be doing instead. So feel free to move past problems you’re having a hard time on; you can always come back later.

  • It’s probably a good idea to look over the exam as a whole, so that you can get a sense of what’s on it, and you can focus on the problems that are easier for you.

  • Don’t be seduced into testing things out in ocaml or utop. Doing so takes time, which means you’ll complete fewer problems. Furthermore, the problems are designed so that they can’t be trivially solved just by typing something into ocaml. (There won’t, for instance, be problems of the sort “What does such-and-such expression evaluate to?”, which could be answered by simply typing the expression into ocaml and copy-pasting the result into the answer box.)

  • Instead, it’s probably a better strategy to do a first pass where you solve problems by reasoning them out, providing your best answer, and moving on. If there’s time at the end, you can (and should) go back and verify your answers using software tools, debugging if necessary. If you don’t get a chance to verify and debug, at least you might get partial credit. But if you don’t get a chance to do a problem at all, you’re guaranteed to get a zero for it.

  • To make it easier to go back later to verify and debug your answers, as well as providing a backup in case of browser failure, you can keep an editor window open and type all of your code answers in the editor window. Then copy and paste into the exam answer box. If you have time, you can go back to the editor window and copy and paste the code into ocaml to verify and debug the answers. If you make fixes, you can then copy and paste the revised answer into the exam answer box.

  • Looking things up in the textbook or past labs or problem sets is similarly a time trap that you don’t want to fall into. Instead, use your exam preparation time to put together any useful reference material you might want for easy access. A simple method to do so is to build a “cheat sheet” by just entering a systematic set of expressions into OCaml as a reference…something like the cheat sheet Prof. Shieber made last year, at https://url.cs51.io/cheatsheet1. But it’s better if you make your own, because you’ll be more familiar with it.

Good luck!