Picture of Jim McIntosh

Jim McIntosh

August 9, 2017

Design Assignments With Mimir Code Questions In 5 Steps

Designing an assignment or quiz becomes more difficult as you consider incorporating new technology and tools. This is common problem when adopting any new technology, really. I often wonder… am I using a new tool correctly or am I taking the ‘best new hammer approach’*?

*This is where your new tool’s likeness is to that of a brand new hammer. You perceive that everything you subsequently encounter is a nail. Your prerogative is to use that new ‘hammer’ to pound in all of the nails.

The best way to consider adding a code question is to augment your previous strategies or methods. The code question does provide more feedback to the student by creating an environment that mimics an editor or IDE. This simulated environment is one computer science students recognize. But most of all, it accelerates grading since the TA or instructor is given a qualitative score to start the review.

I. Set a baseline with multiple-choice options


(Simple multi-choice question)

Don’t try and reinvent the wheel by beginning with a code question. Start an assignment with a question that aligns the student with the learning objective and offer them a set of multiple-choice options to build upon. For example, use a question or two that, if answered correctly, can support the coding assignment in later questions. There may be simple syntax questions that can be used in the code question in order to segment understanding of the concept from the mechanics of execution.

II. Include starter code with comments to code questions


(Starter code and comments)

By adding starter code with comments the student can get a sense for the scope of the question. Consider establishing some variables and describing a function to start.

III. Write helpful test failure messages to help the student debug

This concept seems simple as a best practice for coding, but when considering that the debug information will be used in an assignment or quiz, the failure messaging could contain additional hints. The failure message might offer some language to reference a specific concept.

Additionally, no programmer writes code without learning to debug and relying on tests to ensure the quality of the code they write.

IV. Don’t show all test cases to the student


(Options to provide test visibility to students)

In order to keep the students from coding to tests, keep one or two of the tests hidden from the assignment code block. You may consider adding a code quality test to inform your manually assigned points, or maybe a metric-based test to evaluate the number of lines of code and number of functions or tokens used.

V. Consider isolating quizzes during class hours (~20 min)

If constructed correctly, limiting the time for an assignment or quiz during class can allow instructors to test knowledge and provide feedback before the class ends. Instructor can then evaluate student’s comprehension and respond immediately.

Finally, time boxing is a great way to challenge a student who overthinks assignments or spends too much time coding a problem. If a student is given the expectation to complete a quiz in 20 minutes, this can shape their coding solution scope.