Final-Exam Information for CSE P505
Autumn 2016
Our last graded item in P505 will be a take-home exam. On this
page, we try to give all the information we can think to give about
the exam, both to be clear about expectations and to try to reduce
stress and fair on your part (acknowledging that it may have been a
long time since you have taken an exam and that eliminating
stress and fair may be unachievable).
Let us know what other questions you have and we will edit this
page and/or post on the discussion board and/or email the
class-list.
What to Expect and Advice
- We hope everyone does well in the class and it is not necessary
to get near 100% on the exam to do well. While it is impossible to
predict how the class will do overall, Dan aims for exams to have an
average/median around 70% because that is actually much fairer than an
average/median around 90%.
- Many of the questions will have you write code in
OCaml or Haskell, while some will have you write short English
answers. While you will probably want to use tools (like the
compiler!) to check your work, we know this is an exam setting, so
your answers will require less coding than the homeworks and we will
grade them more leniently (with the “right idea” getting
substantial partial credit).
- An important strategy: Do not leave questions blank. Write what
you know so we can give you partial credit. You can explain in
English why you are stuck and potentially get more credit. We are not
asking for long answers, but if you write nothing we have no
way to give you partial credit.
- Questions will be similar in format and style to homework
questions, but a bit easier and shorter so that we can get to more
topics in a limited amount of time. Most of the topics covered will
have also been covered on a homework problem, though quite likely in a
different way. We will have one question about OOP, which we did not
have a homework about, and we don't promise that there won't be a
couple parts of other questions that have slightly different coverage
from homeworks. Our goal is to test the “big ideas” in
the course without re-doing homework problems. Our goal is not
to surprise you or to find obscure ideas from class.
- To give a much better sense of “what kind of exam questions
Dan could write about this stuff” we hereby present:
However, please keep in mind:
- These questions were pulled from old exams that were in-class
and closed-book, closed-computer. A take-home open-computer exam
is a new experiment in which some form of questions (e.g.,
“what type does this function have”) don't work and,
conversely, it is reasonable to ask for some more code writing.
- Haskell is also a new feature for the class, so there are not
any sample problems about purity, laziness, the IO monad, and type
classes, but there will be Haskell problems that cover most
of these topics.
- The actual exam will have about ten questions, many with
subparts. There are more sample questions because why not share
what I have available.
Timing
- Once you retrieve the exam (see “logistics” below),
you will have 5 hours to submit it.
- However, we intend for 5 hours to be an excessive amount
of time provided you studied for the exam. With no time limit, a
take-home exam is biased toward people with more free time and it
means you will just “start the exam” rather than review
the course material, so a time-limit without intending to make you
rushed is the best approach.
- We intend that most people could finish in about 2 hours. You
may well take more time tracking down bugs or working on a problem
that you wouldn't have gotten right in 2 hours. That's of course fine
— the limit is 5 hours not 2. But our hope is that taking more
than, say, 3 hours, is unlikely to improve most students' exam scores.
- The exams will be available by Friday December 9 and will be due
by late Thursday night on December 15. (Basically, we need to grade
them starting on December 16 to get them done in time, but you know as
well as we do that we are not going to start grading before 8-9AM on
the 16th.) So, if you take the exam on the evening of December 15
(which is when an in-class exam would have been scheduled for), then
you are fine, but you can also take it earlier.
Logistics
We got a little creative with how to enforce the 5-hour limit....
- John will email each student a unique PIN so that you can't
“take” somebody else's exam.
- The same email will include a web-page where you enter your
name and PIN. Once you click the button on that page, the 5 hours
begins. (John cooked up a little web-app that will record when you
clicked the button.)
- You will turn in your exam the same way you turned in your homeworks.
- During the 5 hours, you'll be able to re-download the exam
again in the unlikely case that it is necessary. Just re-enter your
PIN. Of course, the 5 hours does not restart (duh :) ).
- Because we want to be fair to students who take the exam
when Dan and John happen to be unavailable, our basic policy will be
to not answer clarifying questions during the exam. If you would
have asked us a question, please write the question and
your-best-guess as to what the answer would be in your exam. We
will take that into account when grading. That said, if there really is a catastrophe (e.g., we screwed up providing the right files) let us know.
- We will post a sample solution but not until we are done
grading.
- We will be providing 1 pdf file, 1 OCaml file, and 1 Haskell
file packaged in a ZIP file. You will turn in 1 OCaml file, 1 Haskell file, and 1
file-of-your-choice for the English questions. We can handle
reasonable options (plain-text, pdf, Word, rich-text, other?).
Rules
- You cannot talk to other people about computer science while
taking the exam.
- You can use all the class materials (slides, homeworks,
discussion board, etc.).
- You cannot post on the discussion board after you have
started taking the exam.
- You can use the web to look up language features, library
functions, etc. but you really should not need to and see next point.
- You cannot use web search, stack overflow, etc. to try to
learn the substance of an answer.
- You can use all the usual language tools (compiler,
editor, shell, IDE, whatever).
- You cannot talk about the exam with others until the
deadline for completing it has passed, i.e., December 16th.
Coda
Sorry for this page getting so long, but it seems better to write
everything down in one place. As stated at the outset, the goal is
for you to study all the great stuff we learned all quarter and then
do a challenging-but-fair exam to the best of your ability. Exams are
inherently difficult, but also a uniquely effective way to complete a course.