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 four primary SoLAs in the course, along with one optional final SoLA.
SoLAs consist of a set of individual assessment problems—one problem for each learning objective of the course covered so far. The approximate lists of learning objectives by LA period are listed below. You will begin your learning assessments during class time. If you need extra time (e.g., for individual 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 individual assessment 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 objective, you do not need to attempt additional problems tied to that learning objective in subsequent LAs, i.e., you have demonstrated mastery of that objective, so you are done with it!
Example: The first SoLA will have seven problems corresponding to seven learning objectives from the first Learning Assessment pHase described below. Suppose that you receive S grades on the first five problems but not the sixth or seventh. The second SoLA will have 14 problems: seven corresponding to the first set of learning objectives and seven corresponding to the seven new learning objectives from Phase 2. You do not have to answer the questions corresponding to the first five learning objectives you have mastered already. Instead, you are free to attempt the additional seven areas new to SoLA 2 as well as the problems corresponding to the sixth and sevents objectives from LAP 1 that you missed previously.
SoLA 5 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.
SoLA 5 will be distributed on Tuesday morning and due Wednesday evening.
I will hold a review session during class time on reading day.
Learning Assessments, Phase 1
Decomposition. Decompose a computational problem into smaller sub-problems amendable to implementation with functions.
Procedural Abstraction. Take a concrete implementation in Racket and create a procedure that generalizes that behavior.
Tracing. Trace the execution of a Racket program using a substitutive model of computation.
Primitive Types. Express basic computations over primitive values and their associated standard library functions.
Conditionals. Utilize boolean expressions and values in a program to produce conditional behavior.
Lists. Manipulate lists with fundamental higher-order list functions
Collaboration. Explain best practices for solving problems in a collaborative setting.
Learning Assessments, Phase 2
Higher-order procedures. Use section and composition to simplify computations.
Local bindings. Refactor redundancy and add clarity in computations with let-bindings.
Documentation. Document programs according to good software engineering principles.
Testing. Test programs according to good software engineering principles.
List recursion. Design and write recursive functions over lists.
Numeric recursion. Design and write recursive functions over the natural numbers.
Learning Assessments, Phase 3
Tail recursion. Transform recursive functions into tail-recursive functions.
Writing higher-order procedures. Write procedures that take procedures as parameters and return procedures as results.
Vectors. Design and write functions (potentially recursive functions) that utilize vectors.
Mental Models of Memory. Describe or diagram the layout of memory for lists and vectors/arrays.
Randomness. Write programs that produce unpredictable output.
Side effects. Read and interpret programs involving side-effects, in particular, mutation.
Dictionaries. Design and write functions that utilize dictionaries.
Learning Assessments, Phase 4
Information hiding. Design data structures to separate interface from implementation.
Tree recursion. Design and write recursive functions over trees.
Running time. Use a mental model of computation to count the relevant number of operations performed by a function.
Sorting and searching. Update or modify fundamental searching and sorting algorithms or trace the execution of those algorithms over concrete inputs.
Divide and conquer. Read and interpret divide-and-conquer algorithms (e.g., tree algorithms, binary search, and mergesort) or trace the operation of those algorithms over concrete inputs.
Computational thinking. Explain the details or relevance of some aspect of computational thinking.
Cultural competency. Understand and explain the perspective of those different from you, particularly as it may relate to the development or use of software.
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.