Flipped Out Final Exam

1 About the Final

Given that everyone's home situation is different right now, in my opinion there's no fair way to conduct a final exam. People can't study equally or test equally, so it's off the table.

However, I do believe that an end-of-semester assessment is vitally important, especially in an intro class. It helps you contextualize what you've learned, whether you're ready for future coursework, what you need to brush up on, and to find connections between topics that were presented separately, week by week.

So here's what we're going to do instead: You'll write your own final exam.

  1. You won't do it alone. I'll provide you a list of key questions for the course; these will be questions you can ask yourself to determine how well you understand the course material.
  2. You won't need to write a whole exam. You'll be responsible for about a quarter of an exam worth of questions and answers.
  3. You won't do it alone (again). After your initial mini-exam, you'll work with your small group to pool and refine questions (challenge each other to try your problems without giving the answers, see if they're too easy or too hard or confusing, etc) and together come up with a whole exam worth of questions.

You'll be graded in three parts: First, on whether your individual effort adequately addresses enough of the learning outcomes and whether the questions are adequate to evaluate mastery of the corresponding questions; second, on whether your group effort completely covers the learning outcomes with fair and interesting questions; and third, on a personal reflection conducted after the group effort is concluded.

This exercise will take place during the last week of class and exams week.

2 Learning Outcomes

No one exam can cover all of these topics, but the course as a whole has addressed each and every one of them (and more!). The most important will be formatted like this.

  1. Python Syntax
    1. Source Files and Modules
      1. How would I explain the concept of a module in my own words?
      2. How does a Python module relate to a Python source file?
      3. How does Python know what code to execute when I run Python?
      4. How do I access functions or data types defined in a module?
      5. When should I use import and when should I use from ... import ...?
      6. When writing my own programs, when should I take some of my code and move it out into a module?
      7. How are modules like numpy or pygame different from math and turtle?
    2. Variables
      1. How would I explain the concept of a variable in my own words?
      2. If I assign one variable to another (e.g., x = y), what would happen if I later changed the original variable (e.g., y = z, or y.change())?
        1. When do I need to copy a piece of data when assigning it to a variable?
      3. What are some similarities and differences between variables and function parameters?
    3. Data types
      1. What are the fundamental scalar (non-sequence, non-collection) data types in Python?
        1. What are some of the operations I can perform on each of these types?
      2. What are the main sequence data types used in Python?
        1. What are some of the operations I can perform on each of these types?
      3. What are some ways in which strings and lists are different?
      4. What are some ways in which tuples and lists are different?
      5. How would I change the list stored in a list variable?
      6. How would I change the string stored in a string variable?
      7. How can I build a list or a string a little bit at a time?
      8. Can I give examples of cases where I would prefer to use either a tuple or a list to store some sequential data in Python?
      9. How do dictionaries differ from lists and other sequence types?
      10. What are some key properties maintained by a dictionary when we store lots of key-value pairs over time?
      11. Why would I choose to use a dictionary instead of a list of (key, value) tuples?
      12. What does in do in Python? How does it differ for different data types?
    4. Classes
      1. What is the difference between a class and an object?
      2. What are some examples of classes in Python?
      3. How do I define a class in Python?
      4. What is a constructor?
        1. How do I define a constructor in Python?
        2. How do I call a constructor in Python?
      5. What are methods?
        1. How do I define a method?
        2. How do I call a method?
        3. How are methods similar to and different from functions?
      6. How do I store and access data in an instance of a class (i.e., in an object)?
      7. If I call x.do_something(), how does Python figure out what code to execute?
    5. Control Flow
      1. How do I write code that does one thing under some circumstances and another thing under other circumstances?
      2. How do I do something repeatedly a certain number of times in Python?
      3. What are the tradeoffs between iterating over a range of numbers and using a while loop with an increasing counter?
      4. What are the tradeoffs between iterating over a range of numbers and iterating over elements of a sequence?
      5. If I have a composite datatype like a list, tuple, or dictionary, how do I process each of its items in turn?
      6. Can I write a loop which causes some side effect, e.g. producing some console output or turtle graphics?
      7. Can I write a loop which calculates a value from each element independently?
      8. Can I write a loop which calculates a value where the calculation involves previous values? E.g., could I find the least element of a list according to some criterion?
      9. Can I combine control structures, e.g. to conditionally exit a for loop or to nest two for loops?
      10. Can I trace control flow through a function which uses loops, conditionals, and return?
    6. Functions
      1. How do I define reusable chunks of code in Python?
        1. Can I generalize a chunk like that so it works for a variety of different inputs?
        2. Can I extract a piece of Python code into a helper, even if that code uses variables from its original context?
      2. Within a function body, how does Python decide which variables are defined and valid?
      3. If a function body assigns a value to one of its parameters, does the original variable's value change?
      4. If a function body calls a method like list.sort on one of its parameters, does the original variable's value change?
      5. What will the output of the following function be, and why?

        def mystery(n):
          x = n
          mystery(x*2)
          print(x)
        
        mystery(1)
        
  2. Thinking Like a Computer Scientist
    1. Can I draw a truth table for common boolean functions (and, or, not, xor) and combinations of boolean functions?
    2. Given a program, can I understand what it does?
    3. Given a description of a problem or procedure, can I come up with a program to implement it?
    4. In my own words, what is recursion and when is it useful?
    5. What are the components of a recursive definition?
    6. Can I take a value of some type and determine how to break it into "smaller" values?
    7. Can I take a description of a problem and determine what its recursive sub-problems are?
    8. In my own words, what is a higher-order function?
    9. When might it be useful to pass a function as an argument to another function?
    10. Can I compare and contrast passing in a function versus passing in an object to achieve varying behavior?
    11. Input/Output
      1. In my own words, what are some differences between print and return?
        1. Can I ever substitute print for return or vice versa?
      2. How do I read in a file and process its contents?
      3. How are files different from strings?
      4. How do I get a line of input from a user?
      5. How do I structure a program that interacts with a user?
    12. Data Structures
      1. What is the difference between a queue and a stack?
      2. Lists and sequences are one-dimensional data types. How can I build multi-dimensional data types?
      3. In my own words, what is a matrix?
      4. Do I know how to access and modify locations in a matrix? (Ignoring numpy for now.)
      5. Do I know how to safely copy a matrix in Python? (Ignoring numpy for now.)
      6. What could happen if I improperly copy a matrix in Python? (Ignoring numpy for now.)
      7. What is a tree in computer science?
      8. What are the most important properties of trees that make them convenient for computation?
    13. Professional Practice
      1. If I'm just allowed to read a function and not execute it, can I determine whether there's a bug?
      2. If I'm allowed to execute a function and I see an exception or other error, how could I track down the cause?
      3. If I'm allowed to execute a function and it returns a wrong result, how could I track down the cause?
      4. What is a debugger?
      5. How do I measure how long a function takes to execute?
      6. If I have two implementations of a function that ought to produce the same results, how do I compare which one is faster in general?
  3. Artificial Intelligence
    1. Machine Learning
      1. What is machine learning?
      2. What are a few different scenarios for machine learning, in terms of whether ground truth is available?
      3. What are some examples of problems suitable for machine learning approaches?
      4. What is a feature vector and how does it relate to a training example?
      5. What is the key idea behind Naive Bayes?
      6. How is Naive Bayes trained?
      7. What are some simplifying assumptions made in Naive Bayes?
      8. What is the key idea behind perceptrons?
      9. How are perceptrons trained?
      10. Are there functions a perceptron can't compute?
      11. How are neural networks different from perceptrons?
      12. What is an activation function and what role does it play in neural metaphors for computing?
    2. Search
      1. What are the key components of a search problem?
      2. How do uninformed, informed, and adversarial search differ?
      3. Given a search algorithm and a tree, could I determine the order in which nodes will be visited?
      4. What is a heuristic in informed search?
      5. How can we compare the quality of two heuristics?
      6. What are the tradeoffs between breadth-first, depth-first, and best-first search?
        1. Can I come up with search trees on which each of the algorithms would do better than the other two?
      7. What is the key assumption behind adversarial search in algorithms like minimax?
      8. How is a board evaluation function like and unlike a heuristic function?
      9. What are the key components of an evolutionary algorithm?
      10. How are evolutionary algorithms similar to and different from classical search problems?

3 The Individual Effort

Your first task, due 5/4, is to write a faux exam (in a word processor is fine, but submit a PDF!) addressing:

  1. At least 10 of the bold face questions above.
  2. At least 10 non-bold-face questions.
  3. An index that maps learning outcomes (numbered as above) to questions on your exam.

By addressing, I mean that in order to ace the exam, a hypothetical test-taker must be able to answer the questions you have targeted. One question might hit several learning outcomes. Exam questions should be a mix of true/false, programming, debugging, short answer, multiple choice, matching, or any other question format you like. You should aim for about 45 minutes worth of questions on your exam, so a mix of longer and shorter questions is good.

4 The Group Effort

Your second task, due 5/11, is to work with your small group and come up with about a 3-hour exam worth of questions that covers every bold-faced question, along with an index and however many other questions you can include. Here's a suggestion for how to do that:

  1. Share your questions (but not your answers!) with your group. Try to complete a few of your peers' questions and tell them your answers, how long they took, whether and how they were confusing, and how well they target the learning outcomes they were meant to.
  2. Think about overall coverage of course learning outcomes. You could compare your index with your peers' and try to maximize the number of covered questions. You must cover all the bold-faced items and it's good to cover as many of the non-bold-faced ones as possible.
  3. Finally, think about the overall duration of the test. You're aiming for about three hours. If you have trouble hitting that with the questions you have, consider changing some questions into multiple-choice.

The deliverable for this is an exam and a question index.

5 The Reflection

Finally, due 5/12 is a reflection.

  1. Without referring to the learning outcomes above, what are some of the most important things you learned in this class?
  2. What were some things you learned during the group effort to come up with an exam?
  3. Looking at the exams produced by the other groups, are there questions you especially like or think are really effective at appraising understanding of key course concepts?

Author: Joseph C. Osborn

Created: 2020-04-20 Mon 12:34

Validate