Grading the AP Exam
I’ve been spending a lot of time with computational thinking concepts because of the illustration project where we’re trying to create images to represent those ideas. So when my students took the AP Computer Science exam on Tuesday, it was natural for me to think about the exam in those terms.
One of the computational thinking concepts is decomposition and, to be fair to the College Board, decomposition isn’t explicitly part of the Computer Science A topic outline.
The just-released 2011 Free Response Questions reveal the extent to which this is the case. My students reported that they felt okay about the exam, and I think overall it’s a decently fair way to assess their learning on a limited set of programming concepts and skills, on a limited budget. Decomposition just isn’t one of those skills that’s being assessed, and the writers of the exam should be more honest about that in the way they present the questions.
First, a quick overview of the four Free Response Questions:
1(a). Given an array of ints, apply a ceiling and floor to each element, returning the number of elements that were changed.
1(b). Given an array of ints, remove all leading zeroes, changing the size of the array if necessary.
The arrays of ints were said to represent sample values for a digitally-recorded sound.
Write a subclass of Critter that moves other Actors closer to it, observing all pre- and post-conditions.
3(a). Scan an ArrayList of objects, calling the one method we know they have, to find an object that reports a value below a given threshold.
3(b). Manipulate an object through a limited set of method calls (changeDirection, moveForward) to change its state based on a given input.
4(a). Place each character from a String into a given 2-d array.
4(b). Break a given String into block-length substrings (where block size must be calculated), then call the method from 4(a) to fill the block, then call encryptBlock, and repeat until you’ve done the whole String, concatenating the results along the way to return.
What’s wrong with these? First, questions 1 and 3 are complete pseudo-context. The premise of the problems, either that an array of ints represents some audio data or that the ArrayList of objects represents a set of fuel tanks, contributes nothing to the work that needs to be done. The students are not asked to reason about audio or fuel, and so putting that veneer around the core task is just a distraction. We can’t say that we’re asking students to figure out the requirements for solving a real problem, because the solutions need to be precisely specified in order to be graded. Let’s drop the pseudo-context and admit what we’re actually testing in terms of computer science.
Question 4 is the worst offender. Imagine that you were asked to implement a block cipher according to a particular paramterized encoding specification. One choice you might make is to break the problem down into sub-problems by creating fillBlock and encryptBlock methods. That’s a decent way to decompose, and it implies the need to either have a private instance variable to hold the block of text, or that the block be passed around. But the AP question doesn’t give students the opportunity to show their ability (or lack thereof) to reason in that way. Instead, it makes all the choices for them, and the students are left to (again) simply perform the menial task of implementing a precisely-specified method body. There’s nothing wrong with testing that ability, but let’s not pretend it’s anything more than it is. The exam should admit what it’s testing, and not obscure — to either students or the exam authors — the true nature of the problems.