The final tests your skills at identifying and implementing languages, as well as working with the other concepts introduced since the midterm (macros and web programming). You will have a choice of two final exams: one will cover material since the midterm, including web programming; the other will re-test some material from the midterm in place of the material on web programming. You cannot earn an A in the course without taking the exam that includes web programming.
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, I 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) an interpreter for a language (as we did for slideshow, animation, tax forms, 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.
Can identify details of a language that one might wish to hide behind macros (or some other nicer syntax).
(Full exam only) Can rewrite small programs so that all calls to scripts are in script-position.
Some of the notes have included lists of "what I 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 I 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. I 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.
Contracts and test cases. Unless a question asks otherwise, you do not need to show these on the exam.
The final is open book/notes, but all materials you bring must be on paper. You may bring:
You may NOT:
I realize that those of you who've taken notes on your laptop or other electronic device may find this policy inconvenient. I follow this policy so that everyone has equal access to material during the exam (i.e., a student with a laptop could grab or search material from the web during the exam, while a student without a laptop could not).
I expect that notes could be helpful to you during the exam in the following ways:
As I 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. I 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.
I've included links here to the final exams from previous terms when I have taught 2135. Please note that I changed the back part of the course a bit over time, so these sample exams are only partly representative: some questions on them will make no sense to you and other topics aren't covered at all. I list below which problems you should be able to do based on the course this term.
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 I'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 (I 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.