Exam procedures for CS51 #
There will be two 90-minute midterm exams in CS51. See the syllabus for current information about dates, times, and locations.
This document describes exam procedures and policies for CS51. You should read this document carefully 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 heads@cs51.io providing your DAO letter describing the accommodations.
For students who require extra time or separate seating, we will be in touch directly to make arrangements.
Coverage of the exams #
The first exam covers material through Chapter 12 in the textbook including associated appendix material as well as the associated labs (1-8), problem sets, and other course-related material.
The second exam covers material from the whole course cumulatively through Chapter 19 including associated appendix material as well as the associated labs (1-20), problem sets, and other course-related material.
Use of materials #
Exams are “open book”. You may use any books or notes or other textual materials in preparing your solutions for this exam.
Exams are “open computer”. You may use any digital materials stored
locally on the single laptop computer you are using for taking the
exam (which we refer to as “your local computer”). You may also use
software on your local computer (such as ocaml
, utop
, and
ocamlbuild
). You are responsible for the working state of any
software on your local computer that you plan to use. Proctoring staff
cannot help you with any software problems you experience during the
exam.
However,
You may not use any other devices than your local computer, including any tablets or phones.
You may not use any other sources of help, including but not limited to talking with other people or computer agents and asking questions or reading answers on online forums and platforms. In particular, LLMs such as ChatGPT, Claude, Llama, etc. are strictly off-limits. You should also not provide such help to others.
Exams are “closed network”. The only network service you may use during the exam is the exam on Gradescope itself.
You may not use any other network services, including web sites, file storage services, or messaging services. For example, you should not access the textbook at cs51.io, or web sites such as Ed or Stack Overflow, or even your own notes stored on external services such as Google Docs or Dropbox. If you want to access information from such sites, you will need to download the material to your local computer before the exam is administered.
If you are taking the exam at a non-standard time, you should not discuss the exam with any other students until all students have taken the exam.
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 the exam.
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 or signature, 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 code 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.
Your answers should be directly and succinctly responsive to the questions. Overlong, hedged, or disjunctive answers may be penalized.
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 taking this exam, because certain properties of the exam are unusual, namely,
The exam is open book, open notes, and open
ocaml
. (It is not, however, open network.)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
orutop
. 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 intoocaml
. (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 intoocaml
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, saving the 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 a local editor window open and type all of your code answers in the editor window. Then copy and paste them 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 part of 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 for midterm 1 and midterm 2. But it’s better if you make your own, because you’ll be more familiar with it and “the journey is the destination.”
Good luck!