Learning Assessments

To directly assess your mastery of the learning objectives of this course, we will conduct a series of Sets of Learning Assessments (SoLAs) over the course of the semester. Each will contain assessments from one or more Learning Assessment Phases (LAPs). The use LAs of this course is inspired by mastery-based testing practices found in mathematics.

There are three primary SoLAs in the course, along with one optional final SoLA.

  • SoLA 1 (LAP 1): Week 4, Friday, 22 September 2023
  • SoLA 2 (LAPs 1–2): Week 7, Friday, 13 October 2023
  • SoLA 3 (LAPs 1–3): Week 13, Friday, 1 December 2023
  • SoLA 4 (LAPs 1–4): Finals week

You may choose to attempt as many of the individual assessment problems as you wish for that period. As described in the syllabus, LA problems are graded on a binary satisfactory/non-satisfactory scale. Once you receive a satisfactory on a problem tied to a particular learning objective, you do not need to attempt additional problems tied to that learning objective in subsequent SoLAs, i.e., you have demonstrated sufficient mastery of that objective, so you are done with it!

Example: The first SoLA will have six problems corresponding to six learning objectives from the first Learning Assessment Phase described below (not including the in-class only objectives). Suppose that you receive S grades on the first four problems but not the fifth or sixth. The second SoLA will have 12 problems: six corresponding to the first set of learning objectives and six corresponding to the six new learning objectives from Phase 2. You do not have to answer the questions corresponding to the first four learning objectives you have mastered already. Instead, you are free to attempt the additional six areas new to SoLA 2 as well as the problems corresponding to the fifth and sixth objectives from LAP 1 that you missed previously.

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

Weekly Quizzes

In addition to the SoLAs, we will also have weekly quizzes most Fridays during the semester. These quizzes will be 10 minutes long at the beginning of class, and will include 1 problem covering a relevent learning assessment from the current phase. If you receive an S grade on the weekly quiz, you will not need to attempt that problem when the SoLA is assigned, since you have already demonstrated sufficient mastery of that objective!

Lab Reflections

In addition to the learning assessment problems, our course has two additional learning objectives for the course: developing collaborative skills and engaging with ethical considerations in computing. These topics are more complex than could (or should) be covered by learning assessment problems on an exam or quiz. Instead, we will plan to spend a full day in class for each of these topics to read about and discussing them. After those class sessions, you will be assigned a lab reflection where you will be asked to reflect on the day’s discussion and provide your own thoughts and insights on the topic. These two lab reflections will be graded on a binary satisfactory/non-satisfactory scale based on demonstrating a good faith effort to engage with the topics. These grades will count as 2 of the 24 learning objectives for the course.

Learning Objectives

Below is the list of the full learning objectives of the course, with the learning assessments organized by phase. Note that these objectives may change slightly during the semester if the schedule shifts.

Learning Assessments, Phase 1 (LAP 1)

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

  2. Procedural abstraction. Take a concrete implementation in Racket and create a procedure that generalizes that behavior.

  3. Tracing (in-class only). Trace the execution of a Racket program using a substitutive model of computation.

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

  5. Conditionals. Use Boolean expressions and conditional operations to produce conditional behavior.

  6. Lists. Manipulate lists with fundamental higher-order list functions.

  7. Randomness. Write programs that produce unpredictable output.

Learning Assessments, Phase 2 (LAP 2)

  1. Code style (in-class only). Correct the formatting and style of an existing program.

  2. Documentation (in-class only). Document programs according to good software engineering principles.

  3. Testing. Test programs according to good software engineering principles.

  4. Local bindings. Refactor redundancy and add clarity in computations with let-bindings.

  5. List recursion. Design and write recursive functions over lists.

  6. Numeric recursion. Design and write recursive functions over the natural numbers.

  7. Higher-order programming. Write procedures that take procedures as parameters and return procedures as results.

  8. Lambda-free anonymous procedures. Use section and composition to simplify computations.

Learning Assessments, Phase 3 (LAP 3)

  1. Dictionaries. Design and write functions that use dictionaries.

  2. Vectors. Design and write functions (potentially recursive functions) that use vectors.

  3. Data abstraction. Design data structures to separate interface from implementation.

  4. Diagramming structures (in-class only). Use our mental model of memory to describe or diagram the layout of memory for lists, pairs, and vectors.

  5. Tree recursion. Design and write recursive functions over trees.

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

  7. Sorting and Searching. Update or modify fundamental sorting and searching algorithms or trace the execution of those algorithms over concrete inputs.

Learning Objectives, Lab Reflections

  1. Collaboration. Explain best practices for solving problems in a collaborative setting.

  2. Ethical considerations. Consider implications of the power of computing.

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.