Learning Assessments

To directly assess your mastery of the learning goals of this course, we will conduct a series of learning assessments (LAs) over the course of the semester. The LAs of this course are inspired by mastery-based testing practices found in mathematics.

There are four primary learning assessment periods in the course, along with one optional final LA.

  • Learning assessment 1: Week 2, TBD.
  • Learning assessment 2: Week 4, TBD.
  • Learning assessment 3: Week 6, TBD.
  • Learning assessment 4: Week 7, TBD.
  • Learning assessment 5: Finals week, Monday, 21 December 2020.

LAs consist of a set of problems—one problem for each learning goal of the course covered so far. The approximate lists of learning goals by LA period are listed below. You will begin your learning assessments during class time. If you need extra time (e.g., for learning assessments left over from the prior assessment), you will have 24 hours to complete the problems. All problems are released online in Gradescope. You may choose to attempt as many of the LA problems as you wish for that period. As described in the syllabus, LA problems are graded on a binary satisfactory/non-satisfactory. Once you receive a satisfactory on a problem tied to a particular learning goal, you do not need to attempt additional problems tied to that learning goal in subsequent LAs, i.e., you have demonstrated mastery of that goal, so you are done with it!

Example: The first LA will have six problems corresponding to the first six learning goals described below. Suppose that you receive S grades on the first five problems but not the sixth. The second LA will have 12 problems: six corresponding to the first set of learning goals and six corresponding to the six new learning goals of LA 2. You do not have to answer the questions corresponding to the first five learning goals you have mastered already. Instead, you are free to attempt the additional six problems new to LA 2 as well as the problem corresponding to the sixth goal of LA 1 that you missed previously.

LA 5 during finals week is a last-chance assessment period. No new learning goals are introduced, but you are free to re-attempt any goals that you missed in previous LAs.

Learning goals

Learning Assessment 1

  1. Decompose a computational problem into smaller sub-problems amendable to implementation with functions.

  2. Take a concrete implementation in Racket and create a function that generalizes that behavior.

  3. Trace the execution of a Racket program using a substitutive model of computation.

  4. Express basic computations over primitive values and their associated standard library functions.

  5. Utilize boolean expressions and values in a program to produce conditional behavior.

  6. Refactor redundancy in computations with let-bindings.

Learning Assessment 2

  1. Manipulate lists with fundamental higher-order list functions and computational pipelines.

  2. Explain best practices for solving problems in a collaborative setting.

  3. Document and test programs according to good software engineering principles.

  4. Use systematic debugging techniques to discover problems in code.

  5. Write programs that read and write from files.

  6. Analyze strings using regular expressions.

Learning Assessment 3

  1. Read and interpret programs involving recursive behavior over lists and numbers.

  2. Design and write recursive functions over lists.

  3. Design and write recursive functions over the natural numbers.

  4. Design and write functions that utilize dictionaries.

  5. Transform recursive functions into tail-recursive functions.

  6. Design and write recursive functions involving higher-order parameters.

Learning Assessment 4

  1. Read and interpret programs involving recursive behavior over trees.

  2. Design and write recursive functions over trees.

  3. Use a mental model of computation to count the relevant number of operations performed by a function.

  4. Trace the execution of fundamental searching and basic sorting algorithms over concrete inputs.

  5. Trace the execution of divide-and-conquer algorithms (binary search and mergesort) over concrete inputs.

  6. Give justification for why we want our code to strongly reflect the design of our algorithms.

Rubrics for learning assessments

Programming problems

For programming problems in learning assessments, we are concerned primarily with correctness rather than design. Make sure that your program works according to the specification outlined in the problem by testing it on a variety of inputs. Pay attempt to the prompt for guidance about what aspects of design you need to include in your program, e.g., documentation or explicit test suites.

Written problems

For problems with written responses, we are looking for responses that address the prompt directly and concisely. In particular, if a written problems asks you to solve a problem in a certain style or show your work, e.g., the trace of the execution of a program, make sure to include this information in the style presented in class.