Our final will be on Friday, Dec 14 from 9-noon in Barus & Holley 168.
Roughly, we want to check whether you can frame data-facing questions at a high level, use code to compute answers to questions, and test or sanity check programs and their results. We also want to check whether you understand how the code constructs we used this semester work, and when to use those constructs.
The exam will be entirely pencil and paper. You may not use a computer (or phone, etc) during the exam.
The exam will be designed to take a B student about 90 minutes. That should give enough time for everyone to finish.
The exam will be self-contained. You will not be asked to remember any specific problem from lecture, homework, projects, or labs.
You will not be expected to write much code on the exam.
If a question involves code, it will use whichever of Python or Pyret we used when we learned the corresponding concept in the course.
You will not be tested or graded on details of syntax. For example, if we ask you to write a Python for-loop and you forget the colon at the end of the first line, that’s fine. For the exam, we care about your understanding of the concepts. As long as your code is close enough to convey that you know how to approach the problem, that’s fine.
Using reasonable indentation (such as indenting the code to execute when a conditional statement is true) will be important though, as that conveys which code gets executed when.
The questions will be open-ended rather than multiple choice.
You may bring one sheet of 8.5 x 11 paper with notes (handwritten or typed) written on both sides. The exam is otherwise closed notes/closed book. You may not share notes with others during the exam.
Which programming constructs are appropriate for different situations: when should you use each of conditionals, (helper) functions, recursion, for-loops, and variable updates?
How programs evaluate to answers, both in terms of the answers, and at the level of the program dictionary and memory.
What each of map, filter, and sort would achieve on a list
When are each of tables, lists, trees, dataclasses, and hashtables a good choice for capturing information.
How to use a combination of tables, lists, trees, dataclasses, and hashtables to manage the information for a problem.
How much time core operations (search, insert, delete) take based on your choice of data structures.
How to define a Pyret datatype or Python dataclass to capture specific information for a problem.
Be able to identify a collection of tests that cover the central and edge cases of a problem.
How to test functions that return results
How to test functions that update data, but only return None
Which data to you need to explore a problem?
When to combine data from multiple sources into one for the sake of writing a program
What sorts of issues to check for to gain trust in data, or correct errors in data, before computing with it
This list may grow as people ask clarifying questions about the exam
Fine-grained details of language syntax
The specific names of operations on Pyret tables or Pyret operations that produce different kinds of graphs
Reading input from or writing output to files
Any of the Python specifics covered in the last lab
The various components needed to write a simulation or game in Pyret
The details for using the built-in sort operations in either Pyret or Python
How hashtables work under the hood
How Python’s global works under the hood
Given a scenario, what data structures would you use to capture the data? Answers should indicate both the datatype (list, hashtable, tree, etc) and the types of the parts (list elements, hashtable keys, etc).
Given a partially-written program with blanks, how do you fill in the blanks to achieve a certain behavior or result?
Given a program, what might the program dictionary and memory look like at a specific point in the execution?
Given a problem, what would be some good tests for it?
Given a program that is producing the wrong answer, identify and correct the error.
Given a problem, what sort of error checking might you want to do on the data before computing with it?
Given two proposed data structures for a specific problem, contrast their strengths and weaknesses.
Given a question and a description of some data, identify what additional data you might need to answer the question.
Note that these are kinds of questions you’ve done across homeworks, labs, and drills. Reviewing your work on these, or perhaps redoing some of the drills, might be good ways to prepare for the exam.