The final tests your skills at identifying and implementing languages, as well as working with the other concepts introduced since the midterm. The exam is not cumulative in the sense that all questions on the final will focus on material since the midterm. However, it is cumulative in the sense that you can expect to write some Scheme functions on the final.
Expect the final to be at a similar level of difficulty/complexity as the midterm.
The exam is open book. The open book policy (further down on this page) details what you may and may not bring, and suggests which materials you may find more useful to have on hand.
All material covered since the midterm is fair game for the final. In particular, we expect that you:
Can write data definitions for the language underlying a problem (similar to the design phase for the project). This includes being able to identify the parts of a language (data, commands, control, etc) in a problem domain.
Can write (or augment) a small interpreter for a language (as we did for slideshow, animation, the Scheme subset (from lab), and the structure-based state machine simulator).
Know the difference between functions and macros, when to use each, and how to implement each.
Understand why script-position matters for web programming.
Can identify details of a language that one might want to hide behind macros (or some other way of making cleaner syntax).
Can rewrite small programs so that all calls to scripts are in script-position.
Some of the notes have included lists of "what we expect you can do" at the end -- you should have all the skills listed in those sections.
That you're learning to think from a languages perspective. Examples of what we mean by this include: can you figure out whether to use functions or macros, do you know what an interpreter is and how to write one, can you identify the language in a problem domain, and so on (the topics list is more complete on this point). In general, expect this exam to be a bit more conceptual than the midterm.
Code that follows templates. You will lose points for code that does not follow templates.
Readability. Please be as neat as possible so we can dechiper your answers.
Memorization of data definitions or programs from class. We care about how you approach problems. The exam will be self-contained with regards to data definitions and problem statements (though it could refer to a problem from class/lab/homework for intuition or context -- for this, you'd need to recall the spirit of the problem, but not specific implementation details).
Parentheses counting. If your code is nicely indented, we will not count parens to the last letter when we grade your exams. Indent your code cleanly, and we can overlook a missing paren here and there because the indentation can make it obvious that you knew what you were doing. We will watch for parens that show you know the number of arguments to built-in functions like map and filter (but would assume you just miscounted if you missed one of a few parens before the closing bracket of a cond clause, for example).
Cleverness or optimizations. If you write a solution that follows the templates and is logically sound, that's sufficient. No extra points for efficiency or optimization on the exam.
Test cases. Unless a question asks otherwise, you do not need to show test cases.
The final is open book/notes, but all materials you bring must be on paper. You may bring:
You may NOT:
we realize that those of you who've taken notes on your laptop or other electronic device may find this policy inconvenient. We follow this policy so that everyone has equal access to material during the exam (i.e., a student with a laptop could grab material from the web during the exam, while a student without a laptop could not).
we expect that notes could be helpful to you during the exam in the following ways:
As we mentioned above, you will not be asked to look up data definitions or other specific example details during the exam. The exam is designed to require no notes. We let you bring them in so that you don't waste time memorizing material instead of learning how to work with it. However, if you don't understand the concepts coming into the exam, you won't have enough time during the exam to figure them out and answer the questions.
Here are several final exams from a course we taught in the past on similar topics:
As always, feel free to come to office hours or to the review sessions during Wednesday's lab time for help working through the problems.
Is the exam open or closed book/notes?
Open. See the open book policy for details.
What's the best way to prepare?
Practice, practice, practice! If you can reproduce the examples from class and redo the homeworks without referring back to your previous solutions, you should be fine on the exam. If you can read the programs we've written but not write them, you're going to have trouble with the exam.
Will you post solutions to the sample exams?
No. Over the years we've found that posted solutions hurt studying, because many students look at the solutions too quickly and then get fooled into thinking they could reproduce the answers. Feel free to come see any of us during office hours, or make an appointment to see me at some other time, if you want to go over your answers to the practice exams. All four labs on Wednesday are devoted to exam questions, so you have plenty of time to get help.
Are computers allowed during the exam?
No. Pen(cil) and paper only.
Do we need to write contracts on the exam?
Each problems should state clearly whether you need to write contracts (we tend to write them down for you, when possible, to avoid confusion during the exam).
Any other questions or concerns, post to the discussion board.