<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>grading on C'est la Z</title><link>https://cestlaz.github.io/cestlaz-old-hugo.github.io/tags/grading/</link><description>C'est la Z (grading)</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 18 May 2023 14:12:59 -0400</lastBuildDate><atom:link href="https://cestlaz.github.io/cestlaz-old-hugo.github.io/tags/grading/rss.xml" rel="self" type="application/rss"/><item><title>Grading And Ungrading</title><link>https://cestlaz.github.io/cestlaz-old-hugo.github.io/post/grading-and-ungrading/</link><pubDate>Thu, 18 May 2023 14:12:59 -0400</pubDate><guid>https://cestlaz.github.io/cestlaz-old-hugo.github.io/post/grading-and-ungrading/</guid><description>&lt;p>
Classes are done and all that&amp;#39;s left is the grading. Grading is
something I truly hate. Hating grading actually had a lot to do with
my starting to build CS at Stuy (&lt;a href="https://cestlaz.github.io/post/quarter-century-courses/">story here&lt;/a>). I&amp;#39;m glad it&amp;#39;s my last
grading rodeo but even as I work through assignments for the final
time after 33 years I still have many questions about the best way to
do it.&lt;/p>
&lt;p>
Should we give tests or be project based? What about deadlines? Work
alone or in a group? Should students be able to update solutions after
getting back an initial grade? How many assessments? And of course,
how important are grades anyway.&lt;/p>
&lt;p>
A recent trend has been to move to ungrading or it&amp;#39;s relative
specification grading. There are many more variants and names but the
idea, described here in terms of a programming assignment for
convenience, is that a student project must check off certain things -
to be awarded an A grade. The student can update the project over time
and often resubmit it after an initial grading. If a student checks
off enough items on enough assignments, they get an A for the term.&lt;/p>
&lt;p>
As a coarse example, in my algorithms class, I gave 8 assignments. If I
said that any student that completes 4 out of 5 of the &amp;#34;deliverables&amp;#34;
for each assignment they get an A. Alternatively if the get 5 out of 5
on, let&amp;#39;s say 5 assignments and 3 out of 5 on the other two they can
also get an A. Then variations ensue.&lt;/p>
&lt;p>
I&amp;#39;m not actually doing that this semester. I have 8 projects, each has
a hard deadline that can be extended upon request. Each gets a
holistic grade and then I do a hard average. The vast majority of my
students will be getting an A or A- as a result with most earning an A.&lt;/p>
&lt;p>
Now, I like the idea of ungrading but I have some real concerns. First
though, we have to discuss why grades are, or are not important.&lt;/p>
&lt;p>
In many classes, truth be told, they aren&amp;#39;t important. I&amp;#39;d argue that
this is true for most advanced CS classes and CS electives. Companies
might use GPA as a first cut for interviews but really most look at
resumes and a student transcript is not what&amp;#39;s used but rather the
technical interview, which is flawed in its own ways. I guess grad
school might care more about specific class grades but that&amp;#39;s really a
very small minority of students and so is the tail wagging the dog.&lt;/p>
&lt;p>
Grades can be important as a baseline of information in classes though
that have follow ups. If a student got an A or a B in data structures
it can inform the algorithms teacher about what to expect from those
students vs a student who squeaked by with a C. On the other hand, do
college instructors actually look at that information?&lt;/p>
&lt;p>
At the high school level, teachers will and it can be useful. Not as
useful as what often happens when teachers have time together and can
compare notes. I used to trade class lists with colleagues and we&amp;#39;d
share info. We were all perceptive enough to know that the previous
teacher might have some biases so we wouldn&amp;#39;t hold anything against a
student but it was helpful to know where kids had challenges and what
were some tendencies. Grades can do that a little but discussion works
better.&lt;/p>
&lt;p>
I didn&amp;#39;t know where I&amp;#39;d end up when I started writing this but from
the importance of grades side, I&amp;#39;m thinking they&amp;#39;re not very important
in the greater scheme of things other than pass/fail with the idea
that pass means you know what you need to know for the next course.&lt;/p>
&lt;p>
At Stuy, grades were 55, 65 to 90 in increments of 5 then 90 to 100
and culturally grades were very important. For our AP classes and
higher in CS I&amp;#39;d always say that we want to reward a student who&amp;#39;s
trying to do and learn more so be generous with grades. In our intro
class, the feeder to our AP and advanced classes, I&amp;#39;d say to my
teachers &amp;#34;if you award under a 90 you&amp;#39;re saying that the student will
struggle in our APCS class. If you award a 90 - 95 you&amp;#39;re saying the
student will do well and if you award 95 or above, the student will
breeze through the class.&amp;#34; That was the purpose of grades so a year
later when the teacher was unavailable we could still assess the kid
for placement.&lt;/p>
&lt;p>
So, one can be lose with grades and take away a fair amount of
pressure but there are other issues with ungrading.&lt;/p>
&lt;p>
One issue involves deadlines. I like the idea of ungrading but I also
think that deadlines are important. While frequently people opposed to
deadlines will say they&amp;#39;re not really important - real world projects
are frequently delivered late, there are plenty of times where
deadlines are real - try getting to your plane after they close the
boarding gate. Doc says come back in 6 months to check that thing and
you don&amp;#39;t for 18, you might be in trouble. Miss that college
application deadline and you&amp;#39;re probably SOL. Some deadlines are
flexible. Many are not and in any event, I want my former students to
be the ones who deliver on time. Open deadlines are also bad for
students who need more structure. Instructors who favor unlimited
assignment submission and re submission are only catering to students
who thrive under those circumstances. Also, students who would benefit
from deadlines can also fall behind and experience a snoball effect in
cumulative classes - this is not good. Finally, not having deadlines
results in a massive workload increase on teachers.&lt;/p>
&lt;p>
At the end of the day, deadlines aren&amp;#39;t bad and can be good and
important but you need to be reasonable and flexible. I talk about
what I do &lt;a href="https://cestlaz.github.io/post/deadlines-and-commitments/">here&lt;/a> and &lt;a href="https://cestlaz.github.io/post/late-assignments">here&lt;/a>.&lt;/p>
&lt;p>
Another issue with ungrading. and this might be specific to CS and
programming classes is that when students can complete things any time
in any way they might not really learn what they have to learn (with
of course, the ultimate bad end of this being outright cheating). This
happened with a small number of teachers in my program. As
professionals, they were left to do certain things on their own for
prework and we followed very open deadlines and specification grading
for our summer courses. Some students benefited from this, others were
take it or leave it, there were a few, though, who were able to finish
what had to be finished but since it was as flexible as it was, and
through the program they saw more code samples, similar code samples,
etc., at the end of the day they completed what they needed to
complete but didn&amp;#39;t really learn what we wanted them to learn.&lt;/p>
&lt;p>
In reality, this wasn&amp;#39;t a huge deal for my program
(although one or two teachers actively took advantage of the lose
policy and while it helped some legitimately and I&amp;#39;m glad for that,
it pisses me off when people take advantage) since the CS we cover is
far and away more than the teachers will need but it still didn&amp;#39;t sit
well with me. I wasn&amp;#39;t going to change policy for the summer session
mid stream but it ended up not giving them as much as it should have.&lt;/p>
&lt;p>
I know other places are trying to implement versions of ungrading and
I&amp;#39;m guessing they&amp;#39;re also seeing mixed results if they track students
to later classes. Unfortunately, all the experiments I know of are in
&amp;#34;elite&amp;#34; institutions. I&amp;#39;d be curious if anyone&amp;#39;s trying anything in a
mid-performing public high school or mid tier (perception wise)
college.&lt;/p>
&lt;p>
So, now that I&amp;#39;ve avoided grading for the duration of this post, I
should probably get back to work and finish looking at those last sets
of assignment. &lt;/p></description></item><item><title>Predicting Grades</title><link>https://cestlaz.github.io/cestlaz-old-hugo.github.io/post/predicting-grades/</link><pubDate>Sat, 18 May 2019 12:03:10 -0400</pubDate><guid>https://cestlaz.github.io/cestlaz-old-hugo.github.io/post/predicting-grades/</guid><description>&lt;p>
Just saw this:&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="en" dir="ltr">Evaluation
metric idea: take snapshots of students&amp;#39; grades each week
(specifically, the grade they actually see in your LMS). How well do
these correlate with your final assigned grade? Were students getting
good estimates?&lt;/p>&amp;mdash; Austin Cory Bart (@AustinCorgiBart) &lt;a
href="https://twitter.com/AustinCorgiBart/status/1129743671639838720?ref_src=twsrc%5Etfw">May
18, 2019&lt;/a>&lt;/blockquote> &lt;script async
src="https://platform.twitter.com/widgets.js"
charset="utf-8">&lt;/script>
&lt;p>
It made me think of a couple of conversations I had with more senior
teachers early in my career.&lt;/p>
&lt;p>
They&amp;#39;d tell me &amp;#34;by and large, you know what the kids are going to get
after a few week.&amp;#34; By and large they were right. Sure there were some
kids that would turn it on midway and raise end up earning a higher
grade and some who fell off a cliff but for the most part, you knew
pretty early. &lt;/p>
&lt;p>
This doesn&amp;#39;t mean that you don&amp;#39;t need assessments along the way - both
to inform the student on how they&amp;#39;re doing and to inform both teacher
and student on how to best proceed in order to benefit the student. Of
course, sometimes, even when you present some students will their dire
situations they can remain in denial for a remarkable period of time.&lt;/p>
&lt;p>
At Stuy, the standing grading policy was 2 full period exams each marking
period - this meant at least 6 a semester. Add to that a final which
usually counted as two tests and we had more than enough to drop the
lowest grade - a practice followed by many teachers. Depending on
subject you&amp;#39;d also add in papers, projects, quizes, Homework,
participation and anything else you&amp;#39;d like weighted in a variety of ways.&lt;/p>
&lt;p>
As an interesting aside, I was able to evaluate my senior classes at Stuy
entirely on projects - no tests but not my sophomore classes. Stuy
students were so conditioned on exams that they really needed them to
keep themselves honest. It took time to ween them off. &lt;/p>
&lt;p>
I started at Seward Park High School and that school had a similar policy. &lt;/p>
&lt;p>
In any event, those teachers that told me that you&amp;#39;d know the final
grades early on were pretty spot on. A number of times I tried an
experiment - for final grades, I&amp;#39;d first write down what I thought the
grades would be and then I ran all the assessments through the
weighted average formula. The &amp;#34;guesses&amp;#34; were almost always pretty spot
on. I also compared the final grades to the second marking period
grades. I chose the second because the first marking period grades
were just letters - E for excellent, S satisfactory, N needs
improvement, and U. There was some movement but it was more from my
grading up or down due to the amrking period rather than a real
change. I would grade down in the second marking period and up in the
third. &lt;/p>
&lt;p>
This isn&amp;#39;t to say that Cory&amp;#39;s suggestion doesn&amp;#39;t make sense and it
also doesn&amp;#39;t mean that I or other teachers are fabulous estimators -
for all I know, I was biasing some subjective students grades based on
some preconceived notion I wasn&amp;#39;t aware of making the final grade a
self fulfilling prophecy. &lt;/p>
&lt;p>
In any event, I was able to do this when I was teaching in high school
but not so far in college. Maybe it&amp;#39;s because I&amp;#39;ve only been at Hunter
for three years and I developed my high school chops over
decades. Maybe it&amp;#39;s because I have far less contact time with the
students - 2 days a week for an hour fifteen vs five days a week for
43 minutes a shot. It could be that there were more opportunities for
assessment in high school due to more contact time. I&amp;#39;m really not
sure. Something to ponder further.&lt;/p></description></item><item><title>Unit Tests Grading Workflow</title><link>https://cestlaz.github.io/cestlaz-old-hugo.github.io/posts/unit-tests-grading-workflow/</link><pubDate>Fri, 20 Apr 2018 00:00:00 +0000</pubDate><guid>https://cestlaz.github.io/cestlaz-old-hugo.github.io/posts/unit-tests-grading-workflow/</guid><description>&lt;p>
I&amp;#39;ve talked before about unit testing (&lt;a href="http://cestlaz.github.io/posts/testing-testing">here&lt;/a>, and &lt;a href="http://cestlaz.github.io/posts/testing-part2">here&lt;/a>). My premise is
that in addition to being an important industry technique, it&amp;#39;s a
sound practice for students studying CS. I also contend that it can
make grading easier on the teacher. Maybe not as easy as an
auto-grader but those have &lt;a href="https://cestlaz.github.io/posts/2015-10-16-graders.html/#.WtplHHXwZhE">their own problems&lt;/a>.&lt;/p>
&lt;p>
Since I spent most of today grading I thought I&amp;#39;d share my current
workflow and how unit tests have made me more efficient.&lt;/p>
&lt;p>
I have each student make a single GitHub repo for all individual
homeworks, labs and small projects. They&amp;#39;ll make additional repos for
larger and group projects. They fill out a Google form to give me the
repo link. I download the form and end up with a CSV file something like this:&lt;/p>
&lt;div class="src src-csv">
&lt;pre tabindex="0">&lt;code class="language-csv" data-lang="csv">&lt;pre tabindex="0">&lt;code class="language-csv" data-lang="csv">Doe, John, git@github.com:johndoe/mymoework.git
Doe, Jane, git@github.com:janedoe/labs.git
etc.&lt;/code>&lt;/pre>&lt;/code>&lt;/pre>
&lt;/div>
&lt;p>
My goal is to clone each students repo into a directory and then
throughout the term, they add assignments to their own repos using the
names and specifications I give them. For example, after assigning
three assignments, I could pull everything from their repos and I
would have a directory structure something like this:&lt;/p>
&lt;pre class="example">
hw
├── doe_jane
│ ├── hw_01
│ ├── hw_02
│ └── hw_03
│
└── doe_john
├── hw_01
└── hw_02
&lt;/pre>
&lt;p>
To get there, I have to change the csv file to a small shell script:&lt;/p>
&lt;div class="src src-bash">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>git clone git@github.com:johndoe/mymoework.git doe_john
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git clone git@github.com:janedoe/labs.git doe_jane
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>etc.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;p>
I usually do this in Emacs with a macro.&lt;/p>
&lt;p>
Now I&amp;#39;m ready to go.&lt;/p>
&lt;p>
Whenever there&amp;#39;s a new assignment, I just have to update all the
repos. I go into the root hw directory and loop through all the
subdirectoryes:&lt;/p>
&lt;div class="src src-bash">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>cs /path/to/hw_root
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">for&lt;/span> i in &lt;span style="color:#e6db74">`&lt;/span>ls&lt;span style="color:#e6db74">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd /path/to/hw_root/$i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git pull
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">done&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;p>
At this point I could go into each repo but we can do better. Since I
have all of my students submit a Makefile with a default target to
build an executable named &lt;code>main&lt;/code> and also a target named &lt;code>tests&lt;/code> which
will build an executable to run the unit tests named &lt;code>tests&lt;/code> I do this
instead of a straight pull:&lt;/p>
&lt;div class="src src-bash">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>cs /path/to/hw_root
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">for&lt;/span> i in &lt;span style="color:#e6db74">`&lt;/span>ls&lt;span style="color:#e6db74">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd /path/to/hw_root/$i
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git pull
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd hw_03 &lt;span style="color:#75715e"># or whatever assignment I&amp;#39;m grading&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make tests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">done&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;p>
Now, if I want, I can go into each directory, run the tests by typing
&lt;code>./tests&lt;/code> and the hw or project with &lt;code>./main&lt;/code>. I can also add a
couple of lines to the for loop above like:&lt;/p>
&lt;div class="src src-bash">
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>echo &lt;span style="color:#e6db74">&amp;#34;&lt;/span>$i&lt;span style="color:#e6db74"> Test Report\n----------------\n&amp;#34;&lt;/span> &amp;gt;&amp;gt; /path/to/hw_root/test_report
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>./tests &amp;gt;&amp;gt; /path/to/hw_root/test_rport
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>echo &lt;span style="color:#e6db74">&amp;#34;----------------------\n\n&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;p>
This gives me a single file with everyone&amp;#39;s test results. Either by
doing this or by running the tests in each folder manually I can
quickly see what works and what doesn&amp;#39;t.&lt;/p>
&lt;p>
While I&amp;#39;m doing this, I have Emacs up and with &lt;strong>dired mode&lt;/strong> and more
specifically &lt;strong>ag-dired-regexp&lt;/strong> which lets me easily
navigate to any student&amp;#39;s files. Combined with the test results I can
quickly evaluate the entire assignment.&lt;/p>
&lt;p>
Put all of this together and it makes grading somewhat bearable. I can
work through well written, correct assignments extremely quickly and
drill down into the other projects efficiently as well.&lt;/p></description></item></channel></rss>