My first year teaching sole-contact courses at the University of Maryland suffered from a slow onboarding process, thanks to the fully-online modality. I only gained access to the learning management system as the first month of remote classes was coming to an end. With so much teacher-student interaction already taking place online, I was in no mood to spend more screen time than absolutely necessary exploring the intricacies of Canvas. It was challenging enough trying to design learning activities for the synchronous Zoom environment; I was reluctant to take on more work customizing a Canvas course page for self-directed learning.
When offered the chance to teach in-person classes in Fall 2021, my attitude toward Canvas remained mostly unchanged. I knew in theory that students would reap great benefits from self-grading assignments and opportunities to engage asynchronously with teacher-curated content, but I deluded myself into thinking that the novelty of face-to-face meetings would make up for a bare-bones Canvas course page (the most I felt able to assemble under the time constraints of prepping for six different sections). The fact that our online homework system came with its own rich collection of asynchronous content also discouraged me from putting in too much effort to learn Canvas properly. With students already likely to complain about the amount of homework assigned in this course, giving them supplementary material to study from might only earn further complaints on my course evaluations.
Discouraged on all fronts from investing the time to learn Canvas properly, I imported assignments into the gradebook the week before classes began, and then left the gradebook mostly unmonitored as the semester progressed, except for the handful of times I uploaded the results of in-class assessments. Even into finals week, Canvas was showing my students a calculated grade that differed from the weighted average I laid out in the syllabus. I figured that calculus students would be intelligent enough to download the data and apply the syllabus formula by hand, rather than naively trusting the totals column in Canvas. This project illustrates one way of carrying out such an offline calculation.
Rather than try to adapt the Standards-Based Grading scheme from my Fall 2020 section of Calculus II to fit the curriculum of a different institution, I reverted to the traditional grading scheme this semester. From Canvas I would frequently export the class gradebook into a single CSV file, containing the grades of each student on all the assessments so far.
The first line of the gradebook lists the names of all the assignments. Sticking with a consistent naming scheme allows the awk script to quickly classify each assignment into one of the various categories (homework, quizzes, midterm exams, or final exam).
The next line of the Canvas gradebook lists the "Points Possible" on each assignment. The awk script will go through and populate an integer-indexed array with these values.
Each subsequent line of the gradebook starts with the name of a student, followed by the scores earned on the various assignments. The awk script will use the array of "Assignment Categories" to add each score to the appropriate category subtotal for that student, and then divide by the points possible to get a category average. Finally, the weighted average is computed and displayed for each student.
takes as its first argument the name of the CSV file exported from Canvas.