Grading Workflow

‘Tis the season of exam grading!

Due to the pandemic, we moved all teaching online. This included exams as well. Previously, students handed in physical copies of their exams for grading. However, this year things are different, and they end up uploading a single PDF containing their solutions. I ended with 40 PDFs to sift through.

The exam usually consists of 5 questions, and these vary in complexity. The problems are typically logical puzzles that the students need to solve using Ladder logic, SFC, or logic statements. Since the students can approach each question in multiple ways, it takes quite some effort to understand their logic and thinking behind the solutions. Hence, I prefer grading one question at a time. Doing this with physical papers was much more comfortable. With everything digital, keeping track of the PDFs is a mess and the additional overload of opening, closing, and registering grades. I had to find a decent workflow to speed up things and reduce the mental overload.

There comes Emacs to my rescue.

Taking some inspiration from Mike Zamasky’s video, I could create my own workflow. I started by downloading all the PDF files and importing them into an Org document; the structure looked something like this:

* Student1
* Student2
  .
  .
  .

Making use of pdf-view in Emacs, I could link each of the headings to its corresponding file using the link as

[[pdfview://pathToSolution/Student1.pdf::1][Student1]]

By hitting RET, I could now open the PDF, and q would bring me back to my main file.

PDF-tools also makes it possible to annotate the files using C-c C-a t. Using these annotations to give comments and put in a grade for the students.

One common thing with these exams is that the kind of mistakes students make is quite common. Each question has a couple of main points I would look for; if this was missing, I had to deduct points. It’s usually beneficial to include this comment to remind myself and the student why the points were deducted. With Emacs, I had all of these points stored into registers which could be quickly inserted with a short key press.

I do not want to look into the PDF comments when it came time to tally the points. So I inserted them under the heading for each student in the main org file. Making the main file look something like this:

* Student1
  - q1: x
  - q2: y
  - q3: z
* Student2
  - q1: x
  - q2: y
  - q3: z

This was again easy to achieve with registers. Instead of typing out - q1:, I had it stored in a register and could quickly insert it. In hindsight, it might have been a better idea to use macros here. It would further reduce the key chords.

Adding up the grades was still a manual process. It was too late to automate it.

When it finally came time to upload the grades, I had to copy each student’s points and paste them on Canvas(the LMS used at Chalmers). I created a macro to copy all the grades for each student, and then I could just paste this on the grading page.

If I again have to do this in the future, I will use the properties drawer instead of storing the points as bullet lists. That way, I will be able to generate tables and use these tables to automate the remaining stuff.

PS: I am aware of this package that integrate Canvas and Emacs but did not have the time to figure it out.