I probably should have asked this last week since we just finished up finals today. But, there's always next year :)

How do you create a final exam that is a valid assessment of an entire year or computer science, but can still be completed in a couple of hours? Ideally I think a large-ish scale project would be the best assessment of where the kids are. But two hours just isn't enough time.

I'm not a fan of throwing 2 hours worth of multiple choice questions at students. Sure, I could probably come up with 75 or 100 multiple choice tracing questions. Make sure there are some recursive tracings and it could easily hit 2 hours.

The other side though is coming up with a coding assignment that is doable in 2 hours. To do that you'd probably have a few of the upper students finishing in 15 minutes. Sort of the same issue as the discussion we had a few days ago on students finishing labs quickly.

I normally do a hybrid of the two, and it works okay. A multiple choice section that should take about half the period and a couple of simple coding questions for the other half. This semester I only had one student that had to stop because time was up, although a few stopped themselves early because they knew that had done well enough for the average they wanted.

In my 2nd and 3rd year courses I normally do a take home project, but I don't think that would work as well in my first year AP-A course.

  • 2
    $\begingroup$ What's wrong with some students finishing in 15 minutes and others taking the full 2 hours? $\endgroup$ Jun 2, 2017 at 21:02
  • $\begingroup$ I find designing exams very difficult. Perhaps you could start with some samples from your colleagues and then modify them as you see fit. The exams I have that I'm happy about were created this way. $\endgroup$ Jun 3, 2017 at 7:00
  • $\begingroup$ @DavidWhite I do that, and overall I'm pretty happy with my final. But also always looking for ideas outside of a standard test. $\endgroup$
    – Ryan Nutt
    Jun 4, 2017 at 13:21

2 Answers 2


I had a rather odd solution to this back when I taught at a school that had no material beyond AP. I figured that they worked their butts off for the AP test, and (especially juniors and seniors) were often burnt out. So I had them free-build a project (ie. no new curricular material after the AP test)

For the final exam, I made a very odd test. There was no material that they had learned up until that point at all - everything consisted of standalone activities that they would learn during the exam itself from texts I provided. So, there would be a long explanatory text of some concept in CS that they hadn't learned, and then some simple problems. (I chose regular expressions, a teensy bit of functional programming in ML, and coding in Java for memory efficiency, but you could do any topics that you want them to learn about as long as you can create or find a good explanatory text)

They were allowed to ask each other questoins about understanding the text I provided, but not about the questions they had to answer, and they were not allowed to refer to the internet. The only questions I would answer were clarifying questions about the exam itself.

The grading worked like this: whatever their grade average was for the year in my class was theor 0% on this exam as long as they clearly made an effort to complete the exam. (No attempt would be graded as a 0 score)

Then, whatever their % on the exam was would be added to their 0 score. So, if their average for the year to date was 85%, and they scored a 50% on the exam (a relatively high score), they would receive a final grade on the exam of 92.5%.

The advantages for them: no studying, and they learned a bunch of material in a highly focused 2-hour session. The advantages for me: no complaining, no review sessions, and they could work on their projects until the end of the terms.

  • $\begingroup$ What do parents think of this, assuming you're high school? I could see some flipping out about there being new content on the final, even if there's no way that grades could go down. I assume there are still a few students that don't improve their grades. $\endgroup$
    – Ryan Nutt
    Jun 2, 2017 at 19:59
  • $\begingroup$ Grades always came up (since it was a mathematical certainty, as long as the exam was attempted). I never spoke to any parents about it, but I also never received any complaints. I think I explained it clearly enough to the kids that such complaints were possibly headed off at the pass. (Or maybe I was just lucky?) $\endgroup$
    – Ben I.
    Jun 7, 2017 at 10:30
  • $\begingroup$ I guess my concern would be a student ending the semester with an 88 or 89 and the parent (or student) getting upset because they weren't given an assessment of what they learned causing them to stay at a B. I certainly can see the validity of doing something like this, and I really like the idea, but I could see a lot of misunderstandings. $\endgroup$
    – Ryan Nutt
    Jun 7, 2017 at 14:31

Rather than doing one large full-on project, do several smaller, focused coding segments that are not complete programs. Use the stated course objectives as a guide and create problems designed to show mastery of the listed points.

As examples:

  • Find a problem statement that can be done reasonably well in both a loop and recursion, have them write both versions
  • Have them create a set of classes that has a abstract base class, two instantiatable classes, and at least one that inherits from one of the instantiatable classes
  • Give the specs for a class, without the implementation, and have them solve a problem using that class
  • Provide some broken code and have them find, and fix, the error(s)
  • Give a procedure and have them modify it to handle a new feature, or expanded parameters
  • Give an overly large procedure and have them re-factor it

All things that demonstrate some subset of their skills, but don't require writing a complete program.

Bonus for them: If they choose a career in code, is that they'll find a lot of their professional time is spent doing similar tasks. Teams might make a program, but each coder only does a part.

Bonuses for you: You can see what concepts seem to have been the hardest to implement and can adjust your syllabus for the next term. The scope of each problem is small enough that you can grade them, collectively, faster than trying to evaluate an entire program, which will of necessity contain lots of standard code that's really boiler plate - such as the includes.

Problems for you: You have to decide what concepts to test where, and you have to create new questions every term that still test the same concepts.

  • $\begingroup$ I do something like this with my advanced classes. About two weeks out I give them a set of contest problems. They pick any 10 of what I give them and get 10 points a piece for the ones they solve. Works pretty well because they can skip the ones that they think are too difficult and they know exactly what score they get. Downside is they know exactly what score they get, so several students will only do 3 or 4 problems because that's enough to keep an A average. $\endgroup$
    – Ryan Nutt
    Jun 7, 2017 at 14:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.