<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
  <title>Ayaan M. Kazerouni</title>
  <link>https://ayaankazerouni.org/blog/</link>
  <description>Posts about computing education</description>
  <lastBuildDate>Fri, 10 Jul 2026 07:32:46 +0530</lastBuildDate>

  
  
  
  <item>
    <title>Peer Networks and Instructor Resources as Complementary Support Systems in Six CS Classrooms</title>
    <link>https://ayaankazerouni.org/blog/peer-collaboration-networks/</link>
    <guid>https://ayaankazerouni.org/blog/peer-collaboration-networks/</guid>
    <pubDate>Thu, 14 May 2026</pubDate>
    <description>
      &lt;figure id=&quot;network-fig-inline&quot; style=&quot;margin: 1rem 0;&quot; aria-hidden=&quot;true&quot;&gt;
  &lt;svg class=&quot;invert&quot; height=&quot;20&quot; width=&quot;380&quot; style=&quot;display: block; margin: 0 auto;&quot;&gt;
    &lt;circle cx=&quot;10&quot; cy=&quot;10&quot; r=&quot;6&quot; fill=&quot;#1f77b4&quot; class=&quot;gender-m&quot;&gt;&lt;/circle&gt;
    &lt;text x=&quot;22&quot; y=&quot;14&quot; style=&quot;font-family: Avenir; font-size: 0.75em&quot;&gt;Man&lt;/text&gt;
    &lt;circle cx=&quot;70&quot; cy=&quot;10&quot; r=&quot;6&quot; fill=&quot;white&quot; stroke=&quot;#ff7f0e&quot; stroke-width=&quot;2&quot; class=&quot;gender-wnb&quot;&gt;&lt;/circle&gt;
    &lt;text x=&quot;82&quot; y=&quot;14&quot; style=&quot;font-family: Avenir; font-size: 0.75em&quot;&gt;Woman/Non-binary&lt;/text&gt;
    &lt;line x1=&quot;220&quot; y1=&quot;10&quot; x2=&quot;244&quot; y2=&quot;10&quot; stroke=&quot;black&quot; stroke-width=&quot;2&quot; class=&quot;anonymous&quot;&gt;&lt;/line&gt;
    &lt;rect x=&quot;244&quot; y=&quot;4&quot; width=&quot;12&quot; height=&quot;12&quot; fill=&quot;black&quot; class=&quot;anonymous&quot;&gt;&lt;/rect&gt;
    &lt;text x=&quot;262&quot; y=&quot;14&quot; style=&quot;font-family: Avenir; font-size: 0.75em&quot;&gt;Anonymous student&lt;/text&gt;
  &lt;/svg&gt;
  &lt;div style=&quot;display: flex; justify-content: center; gap: 0.5rem; flex-wrap: wrap;&quot;&gt;
  
  
  
  &lt;div class=&quot;fig-thumb&quot;&gt;
      &lt;svg class=&quot;invert network-fig-thumb&quot; viewBox=&quot;0 0 300 300&quot;&gt;
    &lt;use href=&quot;./intro.svg#course&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
      &lt;div style=&quot;font-size: 0.7em;&quot;&gt;Intro&lt;/div&gt;
    &lt;/div&gt;
  
  &lt;div class=&quot;fig-thumb&quot;&gt;
      &lt;svg class=&quot;invert network-fig-thumb&quot; viewBox=&quot;0 0 300 300&quot;&gt;
    &lt;use href=&quot;./eng.svg#course&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
      &lt;div style=&quot;font-size: 0.7em;&quot;&gt;Eng&lt;/div&gt;
    &lt;/div&gt;
  
  &lt;div class=&quot;fig-thumb&quot;&gt;
      &lt;svg class=&quot;invert network-fig-thumb&quot; viewBox=&quot;0 0 300 300&quot;&gt;
    &lt;use href=&quot;./oop-fall2024.svg#course&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
      &lt;div style=&quot;font-size: 0.7em;&quot;&gt;OOP F24&lt;/div&gt;
    &lt;/div&gt;
  
  &lt;div class=&quot;fig-thumb&quot;&gt;
      &lt;svg class=&quot;invert network-fig-thumb&quot; viewBox=&quot;0 0 300 300&quot;&gt;
    &lt;use href=&quot;./oop-spring2025.svg#course&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
      &lt;div style=&quot;font-size: 0.7em;&quot;&gt;OOP S25&lt;/div&gt;
    &lt;/div&gt;
  
  &lt;div class=&quot;fig-thumb&quot;&gt;
      &lt;svg class=&quot;invert network-fig-thumb&quot; viewBox=&quot;0 0 300 300&quot;&gt;
    &lt;use href=&quot;./oop-fall2025.svg#course&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
      &lt;div style=&quot;font-size: 0.7em;&quot;&gt;OOP F25&lt;/div&gt;
    &lt;/div&gt;
  
  &lt;div class=&quot;fig-thumb&quot;&gt;
      &lt;svg class=&quot;invert network-fig-thumb&quot; viewBox=&quot;0 0 300 300&quot;&gt;
    &lt;use href=&quot;./se.svg#course&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
      &lt;div style=&quot;font-size: 0.7em;&quot;&gt;SE&lt;/div&gt;
    &lt;/div&gt;
  
  &lt;/div&gt;
&lt;/figure&gt;

&lt;p&gt;This is an overview of the research paper &lt;a href=&quot;https://ayaankazerouni.org/publications#iticse2026peer-collaboration&quot;&gt;&lt;em&gt;Peer Networks and Instructor Resources as Complementary Support Systems in Six CS Classrooms&lt;/em&gt;&lt;/a&gt;.
The work was led by former master’s student &lt;a href=&quot;https://www.linkedin.com/in/noah-r-252571129/&quot;&gt;Noah Ravetch&lt;/a&gt; and undergraduate students &lt;a href=&quot;https://www.linkedin.com/in/naomi-nayman/&quot;&gt;Naomi Nayman&lt;/a&gt; and &lt;a href=&quot;https://www.jackherberger.com/&quot;&gt;Jack Herberger&lt;/a&gt; at Cal Poly San Luis Obispo, and co-advised by my colleague &lt;a href=&quot;https://theresamigler.com/&quot;&gt;Theresa Migler&lt;/a&gt;.&lt;/p&gt;

&lt;ul class=&quot;no_toc&quot; id=&quot;markdown-toc&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#background&quot; id=&quot;markdown-toc-background&quot;&gt;Background&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#context&quot; id=&quot;markdown-toc-context&quot;&gt;Context&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#data&quot; id=&quot;markdown-toc-data&quot;&gt;Data&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#who-participated-in-the-peer-networks&quot; id=&quot;markdown-toc-who-participated-in-the-peer-networks&quot;&gt;Who participated in the peer networks?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#what-was-the-relationship-with-academic-performance&quot; id=&quot;markdown-toc-what-was-the-relationship-with-academic-performance&quot;&gt;What was the relationship with academic performance?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#how-did-use-of-instructor-resources-factor-in&quot; id=&quot;markdown-toc-how-did-use-of-instructor-resources-factor-in&quot;&gt;How did use of instructor resources factor in?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ## Outline

- background
  - learning is a social process
  - peers and instructors are part of this
  - we have a lecture+lab setup in most courses --- not unique, but maybe not common either
  - added contemporary concern: &quot;all roads lead to chatgpt&quot; -- erosion of the social fabric in CS courses
  - RQs
- what we did
  - network figures
  - men/women figure + finding
  - isolated/non-isolated figure + finding
  - table showing the four clusters of social resource usage
- discussion
  - what do our findings mean?
    - 203 figures including encoding for use of instructor resources
    - participation in the peer network and use of instructor office hours seemed to play a complementary role
  - recommendations
    - focus on collaborative work (not just group projects)
    - less focus on &quot;driving students to office hours&quot; since that is inequitable and doesn&apos;t seem productive 
--&gt;

&lt;p&gt;We studied the interplay between peer collaboration networks in six CS classrooms, usage of instructor-provided help resources, and performance on summative assessments.
Students who were unconnected to their peers scored relatively lower on summative assessments.
Students who were connected to their peers &lt;em&gt;or&lt;/em&gt; used instructor resources performed dramatically better than those who used neither.&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;A classroom is a social system at work—students are participating in a network consisting of their peers and the instructor.
Having strong connections in this network is a form of &lt;em&gt;social capital&lt;/em&gt;: it can facilitate advice about courses, policies, and study materials, and can lead to downstream improvements to academic persistence and performance.
However, some students may lack this form of capital for a number of reasons, e.g., fear of breaching academic integrity policies, being new to the institution, or factors that prevent the student from interacting with their instructor (e.g., anxiety or external obligations preventing one from visiting office hours).&lt;/p&gt;

&lt;!--Similarly, some students might not use instructor resources like in-person office hours for a number of reasons, e.g., they are not familiar with what &quot;office hours&quot; means, they&apos;re worried about asking &quot;good questions&quot;, or they may be managing external obligations like family,  work, hobbies, or illness, that prevent them from visiting out-of-class office hours.--&gt;

&lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/3724363.3729024&quot;&gt;Evidence&lt;/a&gt; also mounts that general availability of large language model-powered chatbots like ChatGPT are contributing to a general erosion of the social fabric of classrooms.
To add to that, I offer two bits of anecdata: first, I and my colleagues have experienced a steep dropoff in students attending office hours—no surprise, since it’s far more convenient to ask ChatGPT a question than to visit office hours on campus.
Second, I advise the computer science peer tutoring center in our department at Cal Poly, where we’ve experienced a nearly 50% decrease in visits since LLM-based tools became mainstream.&lt;/p&gt;

&lt;p&gt;In this study, we investigated whether use of &lt;em&gt;social help resources&lt;/em&gt;—such as collaborating with peers or seeking help from the instructor—was associated with better academic performance.&lt;/p&gt;

&lt;h2 id=&quot;context&quot;&gt;Context&lt;/h2&gt;

&lt;p&gt;The study took place at Cal Poly San Luis Obispo. Some salient info about our context:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We have small-to-medium class sizes (in this study, 29–35 students in each class). A large lecture-hall-style class might observe markedly different peer network dynamics than we did.&lt;/li&gt;
  &lt;li&gt;The courses that we studied have a prominent lab component that is led by the instructor, and is given as much time during the week as lectures.
This results in a significant amount of time available for students to work on course activities in proximity to their peers and to the instructor.
It is in these lab sessions that we expected peer networks to develop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We studied four courses (six classrooms): an introductory programming course taken mostly by Graphic Communication majors (referred to as Intro), an intro programming course taken by Engineering majors (Eng), three sections of an object-oriented programming course (OOP), and an upper-division software course (SE).
Noah taught Eng and I taught the rest.&lt;/p&gt;

&lt;h2 id=&quot;data&quot;&gt;Data&lt;/h2&gt;

&lt;p&gt;We studied three variables:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Performance on a summative assessment&lt;/strong&gt;: In Intro, OOP, and Eng, this was measured as a 0–100 score on a cumulative final exam. In SE, this was measured as the average performance on programming assignments.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Use of office hours or the online forum.&lt;/strong&gt;: In the OOP sections, I kept track of office hour visits using a simple online form. Only the frequency of visits was tracked, not the length or purpose. For online forum usage, we downloaded analytics data from the course &lt;a href=&quot;https://edstem.org&quot;&gt;EdStem&lt;/a&gt; platform.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Participation in the classroom peer network&lt;/strong&gt;: We used self-reported survey data to learn about peer collaborations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The network survey was distributed to students toward the end of the term in which data collection took place.
The survey asked for informed consent and demographic information, and then prompted the student to list any classmates with whom they had worked that term.
For each collaboration they were asked to choose one or more of the following options:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;I helped them&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;They helped me&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;We studied together&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;We collaborated on an assignment&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;We discussed course logistics&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Other&lt;/em&gt; (free response; no students picked this option)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The vast majority of students (over 95%) picked at least one of the &lt;strong&gt;&lt;em&gt;bolded&lt;/em&gt;&lt;/strong&gt; items above, indicating a bidirectional flow of help.
We used these responses to construct for each classroom an undirected disjoint graph in which edges indicated &lt;em&gt;any collaborative relationship&lt;/em&gt; between two students.&lt;/p&gt;

&lt;p&gt;Since students were reporting on their collaborations, we enacted the following protections for surveyed students.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It was made clear that questions were assumed to be about coursework on which collaboration was explicitly allowed.&lt;/li&gt;
  &lt;li&gt;Raw survey responses were not accessible to course instructors before anonymisation.&lt;/li&gt;
  &lt;li&gt;If a survey taker (i.e., a consenting student) listed a non-consenting student as a collaborator, we included that edge in the network, but removed all information about the non-consenting student from the dataset (i.e., their grade and office hours and forum usage). We did not exclude the edge entirely because this might falsely label the consenting student as “isolated” if it was their only connection.&lt;/li&gt;
  &lt;li&gt;If multiple survey takers listed the &lt;em&gt;same&lt;/em&gt; non-consenting student as a collaborator, those survey takers received edges to &lt;em&gt;two separate anonymous nodes&lt;/em&gt;, so no information about the non-consenting student would remain in our dataset.
In effect, all that remained in these cases was the fact that the consenting students “had a friend” in the classroom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The peer networks so constructed are depicted below.&lt;/p&gt;

&lt;h2 id=&quot;who-participated-in-the-peer-networks&quot;&gt;Who participated in the peer networks?&lt;/h2&gt;

&lt;figure style=&quot;margin: 2vw; display: flex; flex-direction: column; gap: 1rem;&quot;&gt;
  &lt;div style=&quot;display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem 1.5rem;&quot;&gt;
  &lt;svg class=&quot;invert&quot; height=&quot;30&quot; width=&quot;60&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;
    &lt;circle cx=&quot;15&quot; cy=&quot;15&quot; r=&quot;10&quot; fill=&quot;#1f77b4&quot; class=&quot;gender-m&quot;&gt;&lt;/circle&gt;
    &lt;text x=&quot;30&quot; y=&quot;20&quot; text-anchor=&quot;start&quot; style=&quot;font-family: Avenir; font-size: 0.9em&quot;&gt;Man&lt;/text&gt;
  &lt;/svg&gt;

  &lt;svg class=&quot;invert&quot; height=&quot;30&quot; width=&quot;170&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;
    &lt;circle cx=&quot;15&quot; cy=&quot;15&quot; r=&quot;10&quot; fill=&quot;white&quot; stroke=&quot;#ff7f0e&quot; stroke-width=&quot;2&quot; class=&quot;gender-wnb&quot;&gt;&lt;/circle&gt;
    &lt;text x=&quot;30&quot; y=&quot;20&quot; text-anchor=&quot;start&quot; style=&quot;font-family: Avenir; font-size: 0.9em&quot;&gt;Woman/Non-binary&lt;/text&gt;
  &lt;/svg&gt;

  &lt;svg class=&quot;invert&quot; height=&quot;30&quot; width=&quot;250&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;
    &lt;line x1=&quot;0&quot; y1=&quot;15&quot; x2=&quot;30&quot; y2=&quot;15&quot; stroke=&quot;grey&quot; stroke-width=&quot;2&quot; class=&quot;anonymous&quot;&gt;&lt;/line&gt;
    &lt;rect x=&quot;30&quot; y=&quot;5&quot; width=&quot;20&quot; height=&quot;20&quot; fill=&quot;black&quot; class=&quot;anonymous&quot;&gt;&lt;/rect&gt;
    &lt;text x=&quot;55&quot; y=&quot;20&quot; text-anchor=&quot;start&quot; style=&quot;font-family: Avenir; font-size: 0.9em&quot;&gt;Edge to anonymous student&lt;/text&gt;
  &lt;/svg&gt;
&lt;/div&gt;


&lt;svg width=&quot;100&quot; height=&quot;15&quot; aria-hidden=&quot;true&quot; font-size=&quot;0.8em&quot;&gt;
  &lt;text x=&quot;10&quot; y=&quot;10&quot; aria-hidden=&quot;true&quot; focusable=&quot;false&quot; fill=&quot;currentColor&quot;&gt;scroll&lt;/text&gt;
  &lt;path d=&quot;M 42 6 l 10 0 m -3 -3 l 3 3 m -3 3 l 3 -3&quot; stroke=&quot;currentColor&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot; aria-hidden=&quot;true&quot; /&gt;
&lt;/svg&gt;

&lt;div style=&quot;display: flex; gap: 1rem; flex-direction: row; overflow-x: auto;&quot;&gt;








&lt;div&gt;

      &lt;svg class=&quot;invert network-fig&quot; viewBox=&quot;0 0 300 300&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-labelledby=&quot;net-intro-desc}}&quot;&gt;
  &lt;title id=&quot;net-intro-title&quot;&gt;Network diagram for intro&lt;/title&gt;
  &lt;desc id=&quot;net-intro-desc&quot;&gt;An intro CS class made up mostly of women and non-binary students, with one large connected component and many small components.&lt;/desc&gt;
  &lt;use href=&quot;./intro.svg#course&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;

      &lt;div style=&quot;font-size: 0.8em; font-family: sans-serif; margin-bottom: 1vh;&quot;&gt;
Intro
&lt;/div&gt;
    &lt;/div&gt;




&lt;div&gt;

      &lt;svg class=&quot;invert network-fig&quot; viewBox=&quot;0 0 300 300&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-labelledby=&quot;net-eng-desc}}&quot;&gt;
  &lt;title id=&quot;net-eng-title&quot;&gt;Network diagram for eng&lt;/title&gt;
  &lt;desc id=&quot;net-eng-desc&quot;&gt;An intro CS class for non-CS majors, made up mostly of male students, with a large connected component, and other dyads, triads, and isolates.&lt;/desc&gt;
  &lt;use href=&quot;./eng.svg#course&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;

      &lt;div style=&quot;font-size: 0.8em; font-family: sans-serif; margin-bottom: 1vh;&quot;&gt;
Eng
&lt;/div&gt;
    &lt;/div&gt;




&lt;div&gt;

      &lt;svg class=&quot;invert network-fig&quot; viewBox=&quot;0 0 300 300&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-labelledby=&quot;net-oop-fall2024-desc}}&quot;&gt;
  &lt;title id=&quot;net-oop-fall2024-title&quot;&gt;Network diagram for oop-fall2024&lt;/title&gt;
  &lt;desc id=&quot;net-oop-fall2024-desc&quot;&gt;An object-oriented programming course made up mostly of male students, containing one large connected component, a smaller connected component, and dyads, triads, and isolates.&lt;/desc&gt;
  &lt;use href=&quot;./oop-fall2024.svg#course&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;

      &lt;div style=&quot;font-size: 0.8em; font-family: sans-serif; margin-bottom: 1vh;&quot;&gt;
OOP (Fall 2024)
&lt;/div&gt;
    &lt;/div&gt;




&lt;div&gt;

      &lt;svg class=&quot;invert network-fig&quot; viewBox=&quot;0 0 300 300&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-labelledby=&quot;net-oop-spring2025-desc}}&quot;&gt;
  &lt;title id=&quot;net-oop-spring2025-title&quot;&gt;Network diagram for oop-spring2025&lt;/title&gt;
  &lt;desc id=&quot;net-oop-spring2025-desc&quot;&gt;Another object-oriented course mostly comprising four connected components.&lt;/desc&gt;
  &lt;use href=&quot;./oop-spring2025.svg#course&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;

      &lt;div style=&quot;font-size: 0.8em; font-family: sans-serif; margin-bottom: 1vh;&quot;&gt;
OOP (Spring 2025)
&lt;/div&gt;
    &lt;/div&gt;




&lt;div&gt;

      &lt;svg class=&quot;invert network-fig&quot; viewBox=&quot;0 0 300 300&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-labelledby=&quot;net-oop-fall2025-desc}}&quot;&gt;
  &lt;title id=&quot;net-oop-fall2025-title&quot;&gt;Network diagram for oop-fall2025&lt;/title&gt;
  &lt;desc id=&quot;net-oop-fall2025-desc&quot;&gt;Another object-oriented course with fewer students, containing a small connected component and many isolates.&lt;/desc&gt;
  &lt;use href=&quot;./oop-fall2025.svg#course&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;

      &lt;div style=&quot;font-size: 0.8em; font-family: sans-serif; margin-bottom: 1vh;&quot;&gt;
OOP (Fall 2025)
&lt;/div&gt;
    &lt;/div&gt;




&lt;div&gt;

      &lt;svg class=&quot;invert network-fig&quot; viewBox=&quot;0 0 300 300&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-labelledby=&quot;net-se-desc}}&quot;&gt;
  &lt;title id=&quot;net-se-title&quot;&gt;Network diagram for se&lt;/title&gt;
  &lt;desc id=&quot;net-se-desc&quot;&gt;A software engineering course containing a larger connected component and many isolates.&lt;/desc&gt;
  &lt;use href=&quot;./se.svg#course&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;

      &lt;div style=&quot;font-size: 0.8em; font-family: sans-serif; margin-bottom: 1vh;&quot;&gt;
SE
&lt;/div&gt;
    &lt;/div&gt;



&lt;/div&gt;

&lt;figcaption&gt;
Peer collaboration networks in six CS classrooms.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Our first focus was on students who were &lt;em&gt;isolated&lt;/em&gt; in the peer network, i.e., those who did not list any collaborators and none listed them.
About a quarter of the students were isolated, and men were more likely than expected to be isolated.
They were ~60% of the surveyed students but just under 80% of isolated students.&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
&lt;figure&gt;
  &lt;svg class=&quot;invert num-collaborators&quot; viewBox=&quot;0 0 612 120&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-label=&quot;Num collaborators distribution.&quot;&gt;
    &lt;use href=&quot;./num-collaborators.svg#num-collaborators&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
  &lt;figcaption&gt;
  Most students had one or two collaborators, and none had more than four. 25% of students were isolated, i.e., they listed no collaborators, and none listed them.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
  &lt;svg class=&quot;invert isolation-gender&quot; viewBox=&quot;0 0 498 83&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-label=&quot;Isolation frequency by gender&quot;&gt;
    &lt;use href=&quot;./isolation-gender.svg#isolation-gender&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
  &lt;figcaption&gt;
  Men made up a higher-than-expected proportion of isolated students.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;what-was-the-relationship-with-academic-performance&quot;&gt;What was the relationship with academic performance?&lt;/h2&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;div&gt;

    &lt;p&gt;We used hypothesis tests to check for a relationship between a students’ connectedness in the network and their performance on the course’s summative assessment.&lt;/p&gt;

    &lt;p&gt;Isolated students tended to perform worse on the summative assessment, but with great variability, suggesting other factors at play.&lt;/p&gt;

  &lt;/div&gt;
  &lt;figure&gt;
    &lt;svg class=&quot;invert isolation-grade&quot; viewBox=&quot;0 0 377 82&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-label=&quot;Grade distribution for isolated and non-isolated students.&quot; aria-describedby=&quot;grade-desc&quot;&gt;
      &lt;title&gt;Grade distribution&lt;/title&gt;
      &lt;desc id=&quot;grade-desc&quot;&gt;Isolated students scored an average of around 70% with a wide confidence interval. Non-isolated students scored an average of about 80% with a narrow confidence interval.&lt;/desc&gt;
      &lt;use href=&quot;./isolation-grade.svg#isolation-grade&quot;&gt;&lt;/use&gt;
    &lt;/svg&gt;
    &lt;figcaption&gt;
    Each tick is a student&apos;s score on a summative assessment. The reddish dot and line represent the group average and 95% confidence interval.
    &lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;how-did-use-of-instructor-resources-factor-in&quot;&gt;How did use of instructor resources factor in?&lt;/h2&gt;

&lt;p&gt;In the three OOP classes, we collected data about office hour visits and use of the online EdStem forum.
The distributions were remarkably similar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;58% of students did not visit office hours, and 55% of students did not post on EdStem.&lt;/li&gt;
  &lt;li&gt;19% of students visited office hours once, and 17% of students posted once on the EdStem.&lt;/li&gt;
  &lt;li&gt;Only a handful of students visited office hours or posted on the forum more than once.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hypothesis testing suggested a significant relationship between likelihood of posting on the forum and visiting office hours: students were likely to use &lt;em&gt;both&lt;/em&gt; resources or &lt;em&gt;neither&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Finally, we turn to the interplay between use of instructor resources, participation in the peer network, and summative assessment performance.
We looked at four groups of students: those who had peer collaborators, those who used instructor resources, those who used both, and those who used neither.&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
&lt;div&gt;
Each group was pretty small, since we only collected office hours and forum usage data from the three OOP. So while these descriptive statistics are suggestive, they should be interpreted cautiously.
&lt;/div&gt;
&lt;figure&gt;
  &lt;svg class=&quot;invert group-grades&quot; viewBox=&quot;0 0 433 122&quot; role=&quot;img&quot; focusable=&quot;false&quot; aria-label=&quot;Group grades&quot; aria-describbedby=&quot;group-grades&quot;&gt;
    &lt;desc id=&quot;group-grades&quot;&gt;Students who didn&apos;t have peer collaborators and didn&apos;t use instructor resources performed dramatically worse than the others.&lt;/desc&gt;  
    &lt;use href=&quot;./group-grades.svg#group-grades&quot;&gt;&lt;/use&gt;
  &lt;/svg&gt;
  &lt;figcaption&gt;Summative assessment scores of students who used instructor resources, had peer collaborators, both, or neither.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Given our results, we recommend that instructors take steps to broker social connections in the classroom, e.g., through in-class activities or collaborative assignments.
Because peer connections seemed associated with comparable score improvements (to say nothing of other benefits of peer connections that we didn’t study), and because office hours impose real costs on students with external obligations, we place more emphasis on building in-class connection than on driving up office hours attendance.&lt;/p&gt;

&lt;p&gt;For more details and discussion, see &lt;a href=&quot;https://ayaankazerouni.org/publications#iticse2026peer-collaboration&quot;&gt;the paper&lt;/a&gt;.&lt;/p&gt;

&lt;!-- end --&gt;

&lt;style&gt;
.network-fig {
  width: 200px;
  height: 200px;
}

.isolation-gender, .num-collaborators, .isolation-grade {
  width: min(100vw, 375px); 
}

.isolation-grade {
  margin: 0 auto;
}

.group-grades {
  width: min(100vw, 375px);
}

.network-fig-thumb {
  width: 110px;
  height: 110px;
}

circle.gender-wnb {
  stroke-width: 2pt;
}

figure {
  margin: 2 0;
}

@media (prefers-color-scheme: dark) {
  circle.gender-wnb {
    fill: lightgrey;
  }
}
&lt;/style&gt;

&lt;hr /&gt;


    </description>
  </item>
  
  
  
  <item>
    <title>What Topics Interest Students in Socially Responsible Computing Coursework?</title>
    <link>https://ayaankazerouni.org/blog/what-topics-interest-students/</link>
    <guid>https://ayaankazerouni.org/blog/what-topics-interest-students/</guid>
    <pubDate>Sun, 14 Sep 2025</pubDate>
    <description>
      &lt;p class=&quot;blurb&quot;&gt;This is a brief summary of the paper &lt;a href=&quot;https://ayaankazerouni.org/publications#koli2025topic-choices&quot;&gt;&lt;em&gt;What Topics Interest Students in Socially Responsible Computing Coursework?&lt;/em&gt;&lt;/a&gt;, appearing at &lt;a href=&quot;https://www.kolicalling.fi&quot;&gt;Koli Calling&lt;/a&gt; 2025.
My co-authors were &lt;a href=&quot;https://cs.sfsu.edu/people/zainab-agha&quot;&gt;Zainab Agha&lt;/a&gt;, &lt;a href=&quot;https://aleatahubbard.com/&quot;&gt;Aleata Hubbard Cheuoua&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/in/melissa-lee-15637949&quot;&gt;Melissa Lee&lt;/a&gt;, &lt;a href=&quot;https://ethnicstudies.calpoly.edu/faculty-staff/jane-lehr&quot;&gt;Jane Lehr&lt;/a&gt;, &lt;a href=&quot;https://ilmiyoon8.wordpress.com/&quot;&gt;Ilmi Yoon&lt;/a&gt;, and &lt;a href=&quot;https://users.csc.calpoly.edu/~zwood/&quot;&gt;Zoë Wood&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When teaching math or CS, we often need to ground examples or assignments in some &lt;em&gt;context&lt;/em&gt;.
For example, when teaching boolean logic, I might give examples like deciding what kind of drivers’ license an individual should receive based on their age.
When working with lists, I might use the &lt;a href=&quot;https://runestone.academy/ns/books/published/StudentCSP/CSPIntroData/rainfall.html&quot;&gt;rainfall problem&lt;/a&gt;.
We tend to not teach “free-floating” computational thinking, untethered from any real-world problem context, however contrived by the instructor.&lt;/p&gt;

&lt;p&gt;Obviously, the contexts we choose will impact the student’s learning experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We should teach with humanitarian contexts.&lt;/strong&gt;
Students in CS courses &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3626253.3635513&quot;&gt;tend to be interested in applications of computing that further the social good&lt;/a&gt;&lt;sup id=&quot;fnref:why&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:why&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.
That is, when given a choice, students prefer to see more humanitarian contexts for their assignments and coursework, like tracking availability of shelters for the homeless, or building an application to help learn sign language, and fewer assignments focused on business contexts like tracking pizza deliveries.
This preference for humanitarian applications and learning through service is also present in other STEM disciplines.
For example, &lt;a href=&quot;https://www.ewb.calpoly.edu/&quot;&gt;&lt;em&gt;Engineers Without Borders&lt;/em&gt;&lt;/a&gt; is thriving at Cal Poly and other chapters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How we teach can impact students’ perceptions of the discipline.&lt;/strong&gt;
In early courses, one challenge is that it’s hard for students (and instructors) to draw a line from “learning Python” to “benefitting the social good”.
I imagine the same is true in, say, an introductory course in mechanical or electrical engineering.
Perhaps as a result, there’s evidence of a &lt;a href=&quot;https://journals.sagepub.com/doi/10.1177/0956797610377342&quot;&gt;perception that opportunity to pursue “communal goals” is impeded in STEM disciplines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We should give students choices about their learning.&lt;/strong&gt; We (humans) tend to be more motivated to learn &lt;a href=&quot;https://www.simplypsychology.org/self-determination-theory.html&quot;&gt;when we can make choices about how and what we learn&lt;/a&gt;, compared to a learning process where we follow a sequence of instructions without agency.
A &lt;a href=&quot;https://dl.acm.org/doi/10.1145/1595496.1562891&quot;&gt;number&lt;/a&gt; &lt;a href=&quot;https://ieeexplore.ieee.org/document/8985947&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://dl.acm.org/doi/10.1145/1383602.1383637&quot;&gt;experiences&lt;/a&gt; incorporating student choice into CS assignments have reported positive results in terms of affect, performance, and sense of belonging in the discipline.&lt;/p&gt;

&lt;p&gt;There’s a slight tension here: should we prioritise a focus on humanitarian and socially responsible topics, or should we prioritise giving students freedom to focus on topics of their choosing?
Even within socially responsible topic domains, not all students’ interests are the same.
If an instructor prescribes a focus on a topic like education, food access, or government, they run the risk of alienating a student that’s instead interested in economic development, human rights, or housing access.&lt;/p&gt;

&lt;p&gt;Unfortunately, teaching to individual students’ interests is not always feasible.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wouldn’t it be great to have a list of topic domains that would likely be interesting to a large number of students?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We learned from students which topic domains (within a fuzzy notion of socially responsible computing) students most wanted to see in their coursework.
We did this in three ways:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;We talked to students&lt;/strong&gt;: We interviewed 4 students at San Francisco State University and 2 at Cal Poly SLO.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;We surveyed college students taking CS courses&lt;/strong&gt;: We surveyed 1443 students at &lt;a href=&quot;../src-in-early-cs-courses/&quot;&gt;six CSU campuses&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;We studied the choices students made when given free rein to pick a topic&lt;/strong&gt;: Two data-centric CS courses at Cal Poly SLO (an &lt;a href=&quot;https://ayaankazerouni.org/courses/csc123&quot;&gt;introductory programming course&lt;/a&gt; and a &lt;a href=&quot;https://ayaankazerouni.org/courses/csc477&quot;&gt;data visualisation course&lt;/a&gt;) included assignments where students were free to choose &lt;strong&gt;any&lt;/strong&gt; topic and dataset to work with. Their choices provide insight into their interests.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;what-did-students-find-interesting&quot;&gt;What did students find interesting?&lt;/h2&gt;

&lt;p&gt;Students consistently expressed interest in the following topic domains:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Education&lt;/strong&gt;, e.g., analyzing data from the &lt;a href=&quot;https://csforca.org/accessreport/&quot;&gt;CSforCA report&lt;/a&gt; about K–12 CS education access in California.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Economic development&lt;/strong&gt;, e.g., analyzing data from &lt;a href=&quot;https://gapminder.org&quot;&gt;Gapminder.org&lt;/a&gt; about World Bank country development indicators.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Health&lt;/strong&gt;, e.g., measles outbreaks in the United States.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The Environment&lt;/strong&gt;, e.g., global carbon emissions.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Community engagement&lt;/strong&gt;, i.e., projects that actually engage with community members.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The topics above were present and prominent in both survey responses and in the actual topic choices made by students when given the freedom to do so.&lt;/p&gt;

&lt;p&gt;In survey responses, the vast majority of students also expressed interest in &lt;strong&gt;Artificial Intelligence&lt;/strong&gt; (surprise!) and &lt;strong&gt;Digital inclusion, safety, and privacy&lt;/strong&gt;.
These topics were also singled out by students in focus group interviews.
We think these didn’t show up in students’ assignment topic choices due to difficulty finding relevant datasets, and likely not because of a lack of interest.&lt;/p&gt;

&lt;h2 id=&quot;what-about-non-humanitarian-topics&quot;&gt;What about “non-humanitarian” topics?&lt;/h2&gt;

&lt;p&gt;In our study of students’ actual topic choices in open-ended assignments, 65% of projects focused on what we deemed to be “humanitarian” or “socially relevant” topics.&lt;sup id=&quot;fnref:bias&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:bias&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;
This is great! Those previous studies were right! Students &lt;em&gt;do&lt;/em&gt; find them interesting! (It is also good for humanity.)&lt;/p&gt;

&lt;p&gt;But that means 35% of projects did &lt;em&gt;not&lt;/em&gt; focus on these topics.
Instead, they focused on topics and datasets like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;LeBron James’ shot choices over his career&lt;/li&gt;
  &lt;li&gt;Video game sales over time&lt;/li&gt;
  &lt;li&gt;Broadway plays and ticket sales&lt;/li&gt;
  &lt;li&gt;UFO sighting reports in the USA (&lt;a href=&quot;https://nuforc.org/databank/&quot;&gt;there’s a dataset of these&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These topics may not be the most socially impactful, but were likely no less important, motivating, and &lt;em&gt;fun&lt;/em&gt; for these students.&lt;/p&gt;

&lt;p&gt;For example, in the intro programming class, one student who’d been relatively quiet throughout the term went well beyond the assignment’s requirement when they were given freedom to choose a topic, and gave an animated and energetic presentation about trends in Broadway plays at the end of the term.
Had I required a focus on “humanitarian” topics, this student might have lost this opportunity to connect their budding computing skills with an existing passion.&lt;/p&gt;

&lt;p&gt;For more details, see &lt;a href=&quot;https://ayaankazerouni.org/publications#koli2025topic-choices&quot;&gt;the paper&lt;/a&gt;, or a &lt;a href=&quot;https://ayaankazerouni.org/blog/src-in-early-cs-courses&quot;&gt;previous post&lt;/a&gt; outlining some of the broader goals of our work.&lt;/p&gt;

&lt;hr /&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:why&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;This is not the same as saying &lt;em&gt;that’s why they chose to study CS&lt;/em&gt;: &lt;a href=&quot;https://dl.acm.org/doi/abs/10.1145/2016911.2016915&quot;&gt;that’s a separate, multi-faceted decision&lt;/a&gt;. &lt;a href=&quot;#fnref:why&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:bias&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Obviously, this is subject to individual impressions—see &lt;a href=&quot;https://ayaankazerouni.org/publications#koli2025-topic-choices&quot;&gt;the paper&lt;/a&gt; for details about how we categorised students’ submissions. &lt;a href=&quot;#fnref:bias&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>Incorporating Socially Responsible Computing in Early Undergraduate CS Courses</title>
    <link>https://ayaankazerouni.org/blog/src-in-early-cs-courses/</link>
    <guid>https://ayaankazerouni.org/blog/src-in-early-cs-courses/</guid>
    <pubDate>Thu, 10 Apr 2025</pubDate>
    <description>
      &lt;style&gt;
.chart-container {
  margin-left: 10%;
}
&lt;/style&gt;

&lt;h2 class=&quot;no_toc&quot; id=&quot;contents&quot;&gt;Contents&lt;/h2&gt;

&lt;ul id=&quot;markdown-toc&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#overview&quot; id=&quot;markdown-toc-overview&quot;&gt;Overview&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#what-did-we-do&quot; id=&quot;markdown-toc-what-did-we-do&quot;&gt;What did we do?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#whats-src&quot; id=&quot;markdown-toc-whats-src&quot;&gt;What’s SRC?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#did-it-work&quot; id=&quot;markdown-toc-did-it-work&quot;&gt;Did it work?&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#final-remarks&quot; id=&quot;markdown-toc-final-remarks&quot;&gt;Final remarks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;/h2&gt;

&lt;p&gt;Hispanic/Latino students are currently underrepresented in CS majors in California.&lt;/p&gt;

&lt;p&gt;That is, the percentage of Hispanic/Latino students in CS majors is far lower than the percentage of college-going students in California who are Hispanic/Latino.
&lt;a href=&quot;https://tableau.calstate.edu/views/SelfEnrollmentDashboard/EnrollmentSummary&quot;&gt;48% of students in the CSU system identified as Hispanic/Latino in Fall 2023&lt;/a&gt;, but only &lt;a href=&quot;https://tableau.calstate.edu/views/CSUDegreesIssued/CSUDegreesIssued&quot;&gt;25% of the CS degrees awarded by the CSU in 2023 went to Hispanic/Latino students&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In an alliance of six campuses in the California State University system (CSU), we worked to incorporate &lt;em&gt;socially responsible computing&lt;/em&gt; (SRC) into our early CS courses in a sustained effort to improve the experience of students who are historically under-represented in computing majors.
Our explicit goal is to increase retention rates of students identifying as Hispanic/Latino—currently, these students tend to leave the CS major at our institutions at far higher rates than other students.
We are driven by evidence that suggests that &lt;a href=&quot;https://paul-bruno.com/wp-content/uploads/2019/07/Lewis_2019_CommunalGoals.pdf&quot;&gt;we might draw more students toward computing through clear signalling of computing’s &lt;em&gt;communal goal affordances&lt;/em&gt;&lt;/a&gt; (i.e., stronger signalling to students that they can use their computing knowledge to benefit society).&lt;/p&gt;

&lt;p&gt;This multi-year project was &lt;a href=&quot;https://www.nsf.gov/awardsearch/showAward?AWD_ID=2216687&amp;amp;HistoricalAwards=false&quot;&gt;funded by the National Science Foundation in 2022&lt;/a&gt;.
This helped support the following activities and personnel:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Development of new curricular materials,&lt;/strong&gt; including two new courses at Cal Poly SLO and San Francisco State University. These materials have also been adopted at universities outside our six-campus alliance.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monthly online teacher training workshops,&lt;/strong&gt; organised by social scientists and computer scientists, attended by 20–25 CS professors at various institutions.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Annual 1.5 day-long in-person workshops&lt;/strong&gt; in June 2023, 2024, and 2025 to support collaborative work, brainstorming, and feedback.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Independent external evaluation&lt;/strong&gt; by evaluators at the non-profit agency &lt;a href=&quot;https://wested.org&quot;&gt;WestEd.org&lt;/a&gt;, who helped collect the data leading to the conclusions described in this post.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Incentives for students to participate in focus groups&lt;/strong&gt; about their experiences in the courses we studied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our team was:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;At Cal Poly SLO: Zoë Wood, Jane Lehr, and myself.&lt;/li&gt;
  &lt;li&gt;At CSU Fullerton: Paul Salvador Inventado, Kevin Wortman, and Kanika Sood.&lt;/li&gt;
  &lt;li&gt;At San Francisco State University (formerly and currently): Ilmi Yoon, Aakash Gautam, Anagha Kulkarni, and Zainab Agha.&lt;/li&gt;
  &lt;li&gt;At CSU Los Angeles: Elaine Eun-Young Kang and David Krum.&lt;/li&gt;
  &lt;li&gt;At CSU Dominguez Hills: Mohsen Beheshti and Sahar Hooshmand.&lt;/li&gt;
  &lt;li&gt;At Cal Poly Pomona: Daisy Tang, Yu Sun, and Amlan Chatterjee.&lt;/li&gt;
  &lt;li&gt;At WestEd.org: Aleata Hubbard Cheuoua and Melissa Lee.&lt;/li&gt;
  &lt;li&gt;At Colorado Evaluation and Research Consulting: Sarah Hug.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, I summarize the work done by our team over the last two-and-a-half years.&lt;/p&gt;

&lt;h2 id=&quot;what-did-we-do&quot;&gt;What did we do?&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;We incorporated SRC in our intro CS courses at all six campuses. For example, at Cal Poly SLO, this took the form of a new data-centric introductory CS course focused on using computation to examine social trends and phenomena relevant to the students. The course is described in the paper &lt;em&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#sigcse2024cs0-course&quot;&gt;Community-Action Computing: A Data-centric CS0 course&lt;/a&gt;&lt;/em&gt; (SIGCSE 2024 Curricular Initiatives).&lt;/li&gt;
  &lt;li&gt;We also participated in a faculty learning community that met for monthly workshops led by social scientists (Jane Lehr from Cal Poly SLO and Sarah Hug from Colorado Evaluation and Research Consulting). Some lessons learned from these workshops were published in &lt;em&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#sigcse2025src-practices&quot;&gt;Reflecting on Practices to Integrate Socially Responsible Computing in Introductory Computer Science Courses&lt;/a&gt;&lt;/em&gt; (SIGCSE 2025 Experience Reports).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Finally (the focus of this post) we found that our curricular additions had positive impacts on students’ sense of belonging in computing and their perceived learning and agency in early CS courses.&lt;/strong&gt; These results were published in &lt;em&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#toce2025src&quot;&gt;The Benefits of Socially Responsible Computing in Early Computing Courses: A Multi-Institutional Study at Primarily Undergraduate Hispanic-Serving Institutions&lt;/a&gt;&lt;/em&gt; (TOCE).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;whats-src&quot;&gt;What’s SRC?&lt;/h2&gt;

&lt;p&gt;We sought to develop curricular materials that demonstrated to students that they could use computing to benefit their communities and society, and to encourage students to think critically about the impacts of computing on society.&lt;/p&gt;

&lt;p&gt;This went beyond teaching ethics in computing.
We encouraged students to actively consider social and
ethical implications of their work, acknowledge (with examples) the significant power that computing systems have in society, and aimed to prepare students to exercise that power responsibly as they develop technical skills.
To this end, we integrated SRC considerations in the context of technical skills introduced in the class, rather than introducing separate modules for ethical and social
considerations.&lt;/p&gt;

&lt;p&gt;These ideas have &lt;a href=&quot;https://responsible.cs.brown.edu/&quot;&gt;been&lt;/a&gt; &lt;a href=&quot;https://ethicalcs.github.io/&quot;&gt;around&lt;/a&gt; &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3702212.3702225&quot;&gt;for&lt;/a&gt; &lt;a href=&quot;https://identity.cs.duke.edu/fellows.html&quot;&gt;a while&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://evanpeck.github.io/&quot;&gt;Evan Peck&lt;/a&gt;’s work—a big source of inspiration for us—&lt;a href=&quot;https://ethicalcs.github.io/&quot;&gt;puts it well&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Introduce a deeper level of reflection in CS 1 courses.&lt;/strong&gt; I want students to see that their actions either directly or indirectly impact people, communities, and cultures, and that this impact is often not felt equally by different groups of people (along lines of gender, race, class, geography, etc.)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Develop reflection habits alongside coding habits&lt;/strong&gt; - all modules involve programming! I believe that habits are formed early in CS and must be tightly coupled with technical concepts in order for them to stick.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Pair directly with existing CS 1 curriculum&lt;/strong&gt; - CS 1 is already a busy course. You don’t need to set aside a month of new material. I believe that reflection and responsible computing pairs directly with technical concepts already taught (conditionals, for loops, etc.)&lt;/em&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;We were also driven by the knowledge that &lt;a href=&quot;https://paul-bruno.com/wp-content/uploads/2019/07/Lewis_2019_CommunalGoals.pdf&quot;&gt;some students, more than others, are strongly drawn to disciplines that &lt;em&gt;they believe&lt;/em&gt; would help benefit society&lt;/a&gt;.
Clear signalling in early CS courses of computing’s impact on and relevance to society, and demonstration to students that even their nascent computing skills can be applied toward the social good should, in theory, improve their motivation and sense of belonging in computing.&lt;/p&gt;

&lt;p&gt;For example, at CSU Fullerton the lessons on control flow with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if&lt;/code&gt; statements were accompanied by programming assignments where students designed, implemented, and critiqued in small groups schemes for allocating tips in restaurants.
These were also accompanied by readings about &lt;a href=&quot;https://www.nytimes.com/2021/02/05/opinion/minimum-wage-racism.html&quot;&gt;the racialized history of tipping in America&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also while learning about conditional logic, students at CSU Dominguez Hills wrote programs to determine individuals’ eligibilities for safe blood donations, and designed a simple system for tracking and managing blood donations.
All of this was accompanied by readings and reflections about the &lt;a href=&quot;https://www.youtube.com/watch?v=Tfwq_vJHwT8&amp;amp;feature=youtu.be&quot;&gt;need for blood donations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At Cal Poly SLO, we developed a new &lt;a href=&quot;https://ayaankazerouni.org/publications#sigcse2024cs0-course&quot;&gt;data-centric introductory programming course&lt;/a&gt; in which students used &lt;a href=&quot;https://typescriptlang.org&quot;&gt;TypeScript&lt;/a&gt; and &lt;a href=&quot;https://vega.github.io/vega-lite/&quot;&gt;Vega-Lite&lt;/a&gt; to analyze and visualize datasets about socially relevant phenomena.
Datasets were often chosen by the students and projects involved written and oral reflective components in addition to programs.
Among other topics, students studied disparities in access to CS education in the state of California using data provided by the non-profit organization &lt;a href=&quot;https://csforca.org&quot;&gt;CSforCA&lt;/a&gt;, data about the victims of fatal police shootings &lt;a href=&quot;https://www.washingtonpost.com/graphics/investigations/police-shootings-database/&quot;&gt;compiled by the Washington Post&lt;/a&gt;, and data about people’s access to fresh food compiled by the &lt;a href=&quot;https://www.ers.usda.gov/data-products/food-access-research-atlas/download-the-data/&quot;&gt;US Department of Agriculture’s Economic Research Service&lt;/a&gt;.&lt;sup id=&quot;fnref:corgis&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:corgis&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
In all cases, students were given freedom to choose their topics, ask their own questions, and present their findings to the rest of the class.&lt;/p&gt;

&lt;h2 id=&quot;did-it-work&quot;&gt;Did it work?&lt;/h2&gt;

&lt;p&gt;Over two academic years—2022–2023 and 2023–2024—we collected survey data from students at all six campuses to measure their &lt;em&gt;sense of belonging&lt;/em&gt; in CS.
Belonging was measured using the 26-item survey developed by &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3408877.3432425&quot;&gt;Moudgalya et al.&lt;/a&gt;, containing statements about belonging scored from &lt;em&gt;Strongly disagree&lt;/em&gt; (–3) to &lt;em&gt;Strongly agree&lt;/em&gt; (3).&lt;/p&gt;

&lt;p&gt;Statements were positive or negative and preceded by the phrase “In this computer science class…”. Some example statements are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I feel a connection with the computer science community.&lt;/li&gt;
  &lt;li&gt;I feel insignificant.&lt;/li&gt;
  &lt;li&gt;I feel at ease.&lt;/li&gt;
  &lt;li&gt;I enjoy being an active participant.&lt;/li&gt;
  &lt;li&gt;I try to say as little as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Fall 2022 term was our “Baseline” group.
Surveyed classes were taught with no added SRC curricular materials.
Spring 2023, Fall 2023, and Spring 2024 were our “Intervention” groups (“Post” in the figure below).
All surveyed courses had significant SRC materials added, ranging from individual assignments with discussions and reflective components (as in the case of &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3626252.3630853&quot;&gt;CSU Fullerton&lt;/a&gt;) to entirely new courses (as in the case of &lt;a href=&quot;https://ayaankazerouni.org/publications#sigcse2024cs0-course&quot;&gt;Cal Poly SLO&lt;/a&gt; and &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3626252.3630926&quot;&gt;San Francisco State University&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our intervention had significant positive impacts on students’ sense of belonging at some campuses, but not others.&lt;/strong&gt;
The split appeared to be between campuses that had “competitive enrolment policies” for their CS majors, and those that did not.
&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3328778.3366805&quot;&gt;Nguyen and Lewis&lt;/a&gt; describe competitive enrolment policies as those in which students already at the University need to meet minimum GPA thresholds to declare a CS major and take CS courses, or where students are admitted directly to the CS major.&lt;/p&gt;

&lt;p&gt;In our study, the two Cal Polys (SLO and Pomona) have competitive enrolment policies, due in large part to enrolment pressures. 
Students are either admitted directly into the CS major or must satisfy fairly intensive requirements before transferring into the CS major.
Conversely, the other participating campuses—SFSU, Dominguez Hills, Fullerton, and CSU LA—have no such additional requirements for majoring in CS.
They also have relatively higher proportions of students identifying as Hispanic/Latino.&lt;/p&gt;

&lt;p&gt;In general, we saw that the campuses &lt;em&gt;without&lt;/em&gt; competitive enrolment policies were more likely to report significant positive impacts from SRC curricular additions. The pattern is visible in the figure below.&lt;/p&gt;

&lt;p&gt;(CSU Fullerton does not appear in this figure because no classes at Fullerton were surveyed in both the Baseline and Intervention terms. Fullerton features in other analyses in &lt;a href=&quot;https://ayaankazerouni.org/publications#toce2025src&quot;&gt;the paper&lt;/a&gt;.)&lt;/p&gt;

&lt;figure&gt;
&lt;svg class=&quot;chart&quot; viewBox=&quot;0 0 730 423&quot; role=&quot;img&quot; aria-label=&quot;Belonging score distributions&quot; focusable=&quot;false&quot;&gt;
&lt;use href=&quot;./chart.svg#chart&quot;&gt;&lt;/use&gt;
&lt;/svg&gt;
&lt;figcaption&gt;Sense of belonging scores at each campus in the Baseline term (Fall 2022) and in post-surveys in Intervention terms (Spring 2023, Fall 2023, Spring 2024). The paper reports transformed belonging scores based on a confirmatory factor analysis, but the same trend is visible and easier to interpret with the –3 &amp;rarr; 3 scale shown here.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;final-remarks&quot;&gt;Final remarks&lt;/h2&gt;

&lt;p&gt;While there were &lt;a href=&quot;https://ayaankazerouni.org/publications#toce2025src&quot;&gt;other overall benefits&lt;/a&gt; of our SRC curricular additions, in terms of sense of belonging our intervention appeared to impact students at some campuses far more than others.
Five of the six participating campuses in our alliance were designated as Hispanic-Serving Institutions at the time the research was carried out (all except Cal Poly SLO).&lt;/p&gt;

&lt;p&gt;Upon reflection, perhaps the relative stability of sense of belonging at the institutions with competitive CS enrolment (the two Cal Polys) is to be expected.
CS students at those campuses have already been put through significant filtering criteria, based on GPA thresholds within the University, and admissions that are heavily influenced by AP courses, the availability of which is largely dependent on school district and household income levels.
It would make sense that these students, who were also more likely to have had pre-college CS experiences, had a relatively stable sense of self in the computing discipline.&lt;/p&gt;

&lt;p&gt;With occasional exceptions, the two groups of campuses also differed in other important ways,
like overall University acceptance rates, representation and attrition of historically underrepresented students in CS, and percentage of students on federal Pell grants, a proxy for the overall socio-economic status of our student bodies.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Attribute&lt;/th&gt;
      &lt;th&gt;DH&lt;/th&gt;
      &lt;th&gt;LA&lt;/th&gt;
      &lt;th&gt;SF&lt;/th&gt;
      &lt;th&gt;Fullerton&lt;/th&gt;
      &lt;th&gt;Pomona&lt;/th&gt;
      &lt;th&gt;SLO&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Had pre-college CS education&lt;/td&gt;
      &lt;td&gt;21%&lt;/td&gt;
      &lt;td&gt;38%&lt;/td&gt;
      &lt;td&gt;23%&lt;/td&gt;
      &lt;td&gt;43%&lt;/td&gt;
      &lt;td&gt;65%&lt;/td&gt;
      &lt;td&gt;47%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;% Hispanic/Latino (University)&lt;/td&gt;
      &lt;td&gt;69%&lt;/td&gt;
      &lt;td&gt;75%&lt;/td&gt;
      &lt;td&gt;37%&lt;/td&gt;
      &lt;td&gt;52%&lt;/td&gt;
      &lt;td&gt;53%&lt;/td&gt;
      &lt;td&gt;23%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;% Hispanic/Latino (CS Majors)&lt;/td&gt;
      &lt;td&gt;63%&lt;/td&gt;
      &lt;td&gt;54%&lt;/td&gt;
      &lt;td&gt;26%&lt;/td&gt;
      &lt;td&gt;27%&lt;/td&gt;
      &lt;td&gt;27%&lt;/td&gt;
      &lt;td&gt;11%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;% of students who leave CS who are “URM”&lt;/td&gt;
      &lt;td&gt;42%&lt;/td&gt;
      &lt;td&gt;45%&lt;/td&gt;
      &lt;td&gt;45%&lt;/td&gt;
      &lt;td&gt;30%&lt;/td&gt;
      &lt;td&gt;26%&lt;/td&gt;
      &lt;td&gt;18%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;% Receiving Pell grant&lt;/td&gt;
      &lt;td&gt;61%&lt;/td&gt;
      &lt;td&gt;66%&lt;/td&gt;
      &lt;td&gt;43%&lt;/td&gt;
      &lt;td&gt;47%&lt;/td&gt;
      &lt;td&gt;46%&lt;/td&gt;
      &lt;td&gt;18%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;% First-generation students&lt;/td&gt;
      &lt;td&gt;46%&lt;/td&gt;
      &lt;td&gt;57%&lt;/td&gt;
      &lt;td&gt;32%&lt;/td&gt;
      &lt;td&gt;32%&lt;/td&gt;
      &lt;td&gt;55%&lt;/td&gt;
      &lt;td&gt;17%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;University acceptance rate&lt;/td&gt;
      &lt;td&gt;86%&lt;/td&gt;
      &lt;td&gt;91%&lt;/td&gt;
      &lt;td&gt;93%&lt;/td&gt;
      &lt;td&gt;59%&lt;/td&gt;
      &lt;td&gt;44%&lt;/td&gt;
      &lt;td&gt;33%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Has competitive CS enrollment?&lt;/td&gt;
      &lt;td&gt;No&lt;/td&gt;
      &lt;td&gt;No&lt;/td&gt;
      &lt;td&gt;No&lt;/td&gt;
      &lt;td&gt;No&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;An example of how these environmental contexts might influence educational outcomes: we found that Hispanic/Latino students at the campuses without competitive enrolment policies were more likely than other students to report that work and family obligations interfered with their learning during the term.
&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3446871.3469755&quot;&gt;The same effect was observed by Salguero et al. at UC San Diego.&lt;/a&gt; 
&lt;strong&gt;However, no such effect was observed at the two participating Cal Polys.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These results underscore the importance of attending to institutional contextual differences when evaluating research results or considering (or disregarding) the adoption of curricular initiatives.&lt;/p&gt;

&lt;hr /&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:corgis&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;In many cases, students used tidied versions of the datasets from the &lt;a href=&quot;https://corgis-edu.github.io/corgis/&quot;&gt;CORGIS&lt;/a&gt; dataset repository, which was a part of &lt;a href=&quot;https://acbart.github.io/&quot;&gt;Austin Cory Bart&lt;/a&gt;’s wonderful dissertation project. &lt;a href=&quot;#fnref:corgis&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>Challenges with learning end-user programming: A case study with Chemistry undergraduate students</title>
    <link>https://ayaankazerouni.org/blog/end-user-programming/</link>
    <guid>https://ayaankazerouni.org/blog/end-user-programming/</guid>
    <pubDate>Tue, 25 Jun 2024</pubDate>
    <description>
      &lt;p&gt;This is an overview of the research paper &lt;em&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#jce2024end-user-programming&quot;&gt;Recommendations for Improving End-User Programming Education: A Case Study with Undergraduate Chemistry Students&lt;/a&gt;&lt;/em&gt;, published in the American Chemical Society (ACS) Journal of Chemical Education.&lt;/p&gt;

&lt;p&gt;The work was conducted at Cal Poly and was led by MS student &lt;a href=&quot;https://www.linkedin.com/in/wifuchs&quot;&gt;Will Fuchs&lt;/a&gt;.
Our co-authors were &lt;a href=&quot;https://chemistry.calpoly.edu/content/faculty/ashley_mcdonald&quot;&gt;Dr. Ashley McDonald&lt;/a&gt; from the Chemistry &amp;amp; Biochemistry department at Cal Poly and &lt;a href=&quot;https://aakash.xyz&quot;&gt;Dr. Aakash Gautam&lt;/a&gt; from the CS department at the University of Pittsburgh.&lt;/p&gt;

&lt;p&gt;This article should be of interest to educators in disciplines &lt;strong&gt;other than computer science or software engineering&lt;/strong&gt; who are teaching their students programming.
For more details, see &lt;a href=&quot;https://ayaankazerouni.org/publications#jce2024end-user-programming&quot;&gt;the paper&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;where-should-we-teach-chemists-to-program&quot;&gt;Where should we teach Chemists to program?&lt;/h2&gt;

&lt;p&gt;Professional software engineers are a minority of professionals who use programming in their work.
They are vastly outnumbered by professionals in other disciplines who use programming in their work (like chemists, climate scientists, or graphic designers).
These professionals are often the end-users of the software they create, and they are referred to as &lt;em&gt;end-user programmers&lt;/em&gt;. 
Students preparing to enter these roles tend to learn &lt;em&gt;some&lt;/em&gt; programming at the undergraduate level, through various channels, each with its own challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They could take the same intro programming course as computing majors&lt;/strong&gt;, but this means they would be learning programming that is mostly disconnected from their discipline-specific context.
An additional challenge, at least at Cal Poly, is that computing departments tend to be over-enrolled and under-staffed.
If whole majors begin requiring their students to take our introductory CS course, we would quickly buckle under the enrolment pressure.
&lt;!-- (Or, maybe everyone _should_ take it, just like they take Calculus, English, or History courses. But that&apos;s a separate conversation.) --&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They could take specially-designed contextualised computing courses&lt;/strong&gt;, where they learn programming specifically geared toward their discipline.
For example, the Media Computation courses at Georgia Tech have been hugely successful at getting folks from different (demographic as well as professional) backgrounds interested in programming, and “CS + X” programs are sprouting up at universities all over the USA.
This is great, but difficult for a campus to operationalise for all its majors that would use programming.
If these courses were designed to cast a wide-enough net, we’d end up back at problem #1 above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They could learn programming within their discipline-specific courses&lt;/strong&gt;.
An obvious challenge here is that most courses are already bursting at the seams with content, and the designers of those courses are often loath to let go of much of it to make room for new content.
I’m the same—when I design a course I could swear that every single topic is absolutely essential.
But the reality is that about 85% of the material is essential, and the rest is just, like, my opinion, man.&lt;/p&gt;

&lt;p&gt;So, if we want to add programming to discipline-specific courses to prepare, say, chemists to use programming in their work, we need Chemistry professors who know how to program, and who care enough about its importance in their discipline to include it in their already-full curricula.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happily, that describes the Physical Chemistry instructors at Cal Poly SLO.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Typically during their third year of undergraduate studies, students majoring in Chemistry or Biochemistry at Cal Poly take a 3-course sequence of Physical Chemistry courses, in which they also learn programming.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
Including programming alongside thermodynamics, kinetics, and mechanics certainly does add to the instructional obligations of these courses, but over a decade with the curriculum has also revealed desirable gestalt effects—students not only learned &lt;em&gt;to&lt;/em&gt; program; they also learned Chemistry &lt;em&gt;through&lt;/em&gt; programming.
Many students go on to successfully apply their newfound computing skills to real problems in their research labs at Cal Poly and beyond.&lt;/p&gt;

&lt;p&gt;However, many students also seem to intensely dislike the programming aspects of the courses: they find it challenging, are unmoved by arguments that it would benefit them professionally, and generally don’t “reach for computing” to help them solve Chemistry problems outside the classroom.
Most of them also self-select out of future computing experiences, opting out of an elective Computational Chemistry course following the 3-course Physical Chemistry sequence.&lt;/p&gt;

&lt;h2 id=&quot;understanding-students-challenges-with-learning-programming&quot;&gt;Understanding students’ challenges with learning programming&lt;/h2&gt;

&lt;p&gt;We (Chemists and Computer Scientists at Cal Poly) conducted two studies to learn about the challenges that the students faced while learning programming in these Chemistry courses.
In the first study, we used surveys to learn about students’ attitudes toward programming and their programming abilities.
In the second study, we conducted one-on-one interviews to gain deeper insight into their attitudes and abilities.&lt;/p&gt;

&lt;h3 id=&quot;preliminary-surveys&quot;&gt;Preliminary surveys&lt;/h3&gt;

&lt;div class=&quot;row&quot;&gt;
&lt;div&gt;
    &lt;p&gt;We used the &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3287324.3287369&quot;&gt;&lt;strong&gt;attitudes toward computing survey&lt;/strong&gt;&lt;/a&gt; to measure students’ self-reported &lt;em&gt;confidence&lt;/em&gt; with and &lt;em&gt;enjoyment&lt;/em&gt; of computing, their perception of computing as being &lt;em&gt;important and useful&lt;/em&gt;, and the strength of their sense that they &lt;em&gt;belong&lt;/em&gt; in computing.&lt;/p&gt;

    &lt;p&gt;Results were…not fun.
On average, the students reported negative attitudes toward computing: low confidence, low enjoyment, and low sense of belonging to a computing community.
They did perceive computing to be marginally useful.&lt;/p&gt;

    &lt;p&gt;To measure students’ abilities with programming, we used the &lt;a href=&quot;https://peer.asee.org/mcs1-a-matlab-programming-concept-inventory-for-assessing-first-year-engineering-courses&quot;&gt;&lt;strong&gt;MCS1 concept inventory&lt;/strong&gt;&lt;/a&gt;, a peer-reviewed assessment of MATLAB knowledge. (It’s a multiple-choice test.)&lt;/p&gt;

    &lt;p&gt;Students generally performed poorly on the assessment.
Part of this is attributed to the fact that it included some language elements that they had not seen before.
But there were also challenges on questions that “should” have been doable.&lt;/p&gt;

  &lt;/div&gt;
&lt;figure&gt;
&lt;img style=&quot;width: max(7vw, 100px);&quot; src=&quot;attitudes.png&quot; alt=&quot;A column chart showing the average reported confidence with and enjoyment of computing, sense of belonging in computing, and sense that computing is important.&quot; /&gt;
&lt;figcaption&gt;Students&apos; average responses to ATC questions. Questions were answered on a 1–5 scale from &lt;i&gt;Strongly disagree&lt;/i&gt; to &lt;i&gt;Strongly agree&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;h3 id=&quot;interviews&quot;&gt;Interviews&lt;/h3&gt;

&lt;p&gt;Ok, so the students had negative attitudes toward computing, and struggled with MATLAB questions.
That’s kind of all we can say from numerical responses to Likert questions.
We can say nothing about what causes these negative attitudes, or what exactly their misunderstandings are that lead to their difficulties on the test.&lt;/p&gt;

&lt;p&gt;Will, the MS student leading the work, conducted one-on-one interviews with 8 students enrolled in the Physical Chemistry courses.
He asked them questions from the MCS1 assessment, and instead of framing them as multiple-choice questions, he framed them as open-ended short-answer questions, and asked the students to “think out loud” while answering them.
He recorded the interviews (with the students’ consent), and together we analysed the transcripts.&lt;/p&gt;

&lt;p&gt;Details are in &lt;a href=&quot;https://ayaankazerouni.org/publications#jce2024end-user-programming&quot;&gt;the paper&lt;/a&gt;, but here are the highlights:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We used &lt;a href=&quot;https://kar.kent.ac.uk/23997/1/TaxonomyFuller.pdf&quot;&gt;Fuller et al.’s Matrix Taxonomy&lt;/a&gt; to categorise the level at which students were operating in terms of their programming knowledge. Students were generally competent with code comprehension involving patterns they had seen before.&lt;/li&gt;
  &lt;li&gt;This served them well when they saw similar-looking programs, but stymied them when they were faced with different representations of the same concepts. They lacked an abstract enough mental model of MATLAB’s syntax and semantics.&lt;/li&gt;
  &lt;li&gt;Without having been taught explicit strategies to solve programming problems, students faced challenges with program planning. This caused difficulties with multi-step problems, which were discouraging and daunting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, consider the following MATLAB expression (a Boolean AND): &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;and(a, b)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The students had previously only seen Boolean expressions in the context of conditional branching using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if&lt;/code&gt; statements.&lt;/p&gt;

&lt;p&gt;So, students who were correctly able to trace code involving conditional branching (e.g., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if and(a, b)&lt;/code&gt;) were then &lt;em&gt;un&lt;/em&gt;able to trace code that included &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c = and(true, and(true, false))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lacking abstract understandings for &lt;em&gt;statements&lt;/em&gt; and &lt;em&gt;expressions&lt;/em&gt;, students combined the notions of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;and&lt;/code&gt; into a single construct based on superficial characteristics of programs they had seen before. Students faced similar difficulties with things like matrix concatenation and functions.&lt;/p&gt;

&lt;p&gt;In addition to questions adapted from the MCS1, Will also asked the students about their feelings toward programming in general, and their confidence with the programming they had learned.
He found that MATLAB appeared to be little more than a glorified graphing calculator to most of the students.
The students’ collective mindset was exemplified nicely by this quote from one participant:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;So I literally threw my calculator away and started doing everything on MATLAB.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most students did not foresee themselves using MATLAB in their futures, and felt that they had not gained generalisable ability with programming that they could use outside the classroom.
Some more quotes from students are below:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I know how to do explicitly what I’ve learned, and not much else.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;I think with Chemistry they do a really good job of teaching us. But there’s no, like, okay we’re only going to be doing like MATLAB and like learning the very basics of the basics.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;I should probably understand everything computationally little bit more because that’s the way that the research is moving and I think that’s, you know, an important part of the research future. So I want to develop these skills more but I’m like I don’t know what specific applications really look like.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;final-remarks&quot;&gt;Final remarks&lt;/h2&gt;

&lt;p&gt;Our paper closes with some recommendations for teaching programming to these would-be end-user-programmers:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Promote abstraction and abstract understandings&lt;/strong&gt;. We discuss strategies for helping students achieve abstraction, for example, using multiple representations of the same concepts to help disentangle students’ understandings from the specific examples they have learned with.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Decomposition&lt;/strong&gt;. Use sub-goals to break programming problems into small steps, and show examples of function reuse.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Meta-cognitive awareness&lt;/strong&gt;. Teach an explicit programming problem-solving process so that students may confidently approach larger multi-step problems. This should include steps for problem comprehension, testing, and debugging.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re thinking that these recommendations would not be out of place in a book titled &lt;em&gt;How to Teach Programming to Anyone, Not Just These Chemistry &amp;amp; Biochemistry Students&lt;/em&gt;, you’re right!
These are all things that we try to accomplish in the introductory programming courses taken by our CS and SE majors.
But these skills as they relate to programming &lt;a href=&quot;https://faculty.washington.edu/ajko/papers/Ko2011EndUserSoftwareEngineering.pdf&quot;&gt;tend not to be prioritised&lt;/a&gt; in end-user programming education.
However, though these students are not aiming to become software engineers, they &lt;em&gt;will&lt;/em&gt; engineer software, potentially of a critical nature, and their programming education should account for this.&lt;/p&gt;

&lt;p&gt;The good news is that upper-division Chemistry and Biochemistry students already have significant skill with abstraction, decomposition, and meta-cognitive awareness.
These skills are obviously not unique to computer science or programming—they are practised all the time in other STEM disciplines.
And so our final recommendation is to &lt;strong&gt;harness the students’ and instructors’ existing competencies&lt;/strong&gt; with abstraction, decomposition, and meta-cognitive awareness while teaching them in the context of programming.&lt;/p&gt;

&lt;p&gt;For example,&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Abstraction&lt;/strong&gt; is already used when reasoning about chemical equations, which are lightweight abstractions of real-world phenomena.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Decomposition&lt;/strong&gt; has been espoused as an important skill even in very early Chemistry education, e.g., scientific modelling skills involving breaking down a complex system into smaller elements and mechanisms.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Meta-cognitive awareness&lt;/strong&gt; is required to successfully navigate the multi-step process involved in identifying a chemical compound’s structure from its spectroscopic data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The programming aspects of the Physical Chemistry courses are being revamped as I write this (including a transition to Python)—more updates soon!&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;postscript&quot;&gt;Postscript&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why did we publish this paper at the Journal of Chemical Education, and not at a computing education venue like Koli Calling or SIGCSE?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am confident that this paper is published at the right venue, but it took a bit to get here.&lt;/p&gt;

&lt;p&gt;The manuscript was rejected from computing education venues twice!
Both times, the primary (but not the only) hit against it was that it was probably of more interest to Chemistry instructors than CS instructors (the implication being that the readership of computing education research publications are mostly computing instructors).
I have two reasons to push back against this.
First, my view is that our Chemistry faculty who are teaching programming &lt;em&gt;are&lt;/em&gt; computing instructors — they are teaching computing!
Second, I perhaps naïvely expect that if instructors in other disciplines are interested in research about teaching computing, they would look in computing education research publications for recommendations or techniques.&lt;/p&gt;

&lt;p&gt;(Ok, fine, I also have some sense of professional identity wrapped up in publishing at my “home” venues.)&lt;/p&gt;

&lt;p&gt;Meanwhile, as part of her broader work in computational Chemistry education, our co-author Ashley had been working with her colleagues to update the curriculum based on this work.
She’d been travelling to meetups of Chemistry educators and talking about this work, and reported high levels of interest and engagement from other Chemists working to include computing in their courses.
The audience for the paper was right there.&lt;/p&gt;

&lt;p&gt;So, we made &lt;em&gt;significant improvements&lt;/em&gt; to the manuscript (for example, we added the entire discussion section on abstraction, decomposition, and meta-cognitive awareness) and submitted it to the Journal of Chemical Education, where it ended up with extremely positive reviews.&lt;/p&gt;

&lt;p&gt;I’m also grateful to be in a department where my scholarly output is not expected to exist in a narrow selection of publication targets—without this, there would’ve been a whole other calculus to consider.&lt;/p&gt;

&lt;hr /&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;At the time this work was carried out, the courses taught MATLAB, and are now switching to Python. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>It&apos;s good to be bad at something</title>
    <link>https://ayaankazerouni.org/blog/good-to-be-bad/</link>
    <guid>https://ayaankazerouni.org/blog/good-to-be-bad/</guid>
    <pubDate>Sun, 31 Mar 2024</pubDate>
    <description>
      &lt;p&gt;&lt;em&gt;I signed up for a short machine shop training, and was reminded what it’s like to do something for the first time and struggle with it. In related news, I am teaching intro programming again in the Fall.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A couple of weeks ago some colleagues and I signed up for the Cal Poly College of Engineering &lt;a href=&quot;https://ceng.calpoly.edu/connection/2019/09/red-tag-training-2/&quot;&gt;Red Tag Tour&lt;/a&gt; and earned our “red tags”.
These are passes that allow us to use the wood and sheet metal shop on the Cal Poly campus.
It was a 3-hour session that started with a whirlwind introduction to the machine shop in the Aero Hangar on campus, following which we worked through a scaffolded sequence of steps to make our own bookends.
Here’s mine:&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;figure&gt;
&lt;img src=&quot;./bookend.png&quot; alt=&quot;A bookend made by me in a machine shop training session.&quot; /&gt;
&lt;figcaption&gt;
Not just my best handiwork, but also my only handiwork.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;It was a blast! I think it’s super cool that this is offered on our campus, and that they had a day where faculty could attend.
And I’m super grateful to the two student volunteers who were extremely patient with us.
What I do with my cool new red tag pass remains to be seen.&lt;/p&gt;

&lt;p&gt;Anyway, we used a number of tools to make our bookends:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A compound slide to cut a piece of acrylic&lt;/li&gt;
  &lt;li&gt;A few different drill presses&lt;/li&gt;
  &lt;li&gt;A miter saw to cut a length of wood&lt;/li&gt;
  &lt;li&gt;A step shear to cut a sheet of metal (by far the most fun tool to use)&lt;/li&gt;
  &lt;li&gt;A rotex punch to punch holes in the metal&lt;/li&gt;
  &lt;li&gt;A corner shear to cut a 90° corner off the metal&lt;/li&gt;
  &lt;li&gt;A finger brake to bend the sheet metal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was a nicely-designed activity meant to introduce us to the types of tools that are available in a typical machine shop and what they do.&lt;/p&gt;

&lt;p&gt;I had never set foot in a machine shop before, so this was all new to me. And boy was I bad at it.&lt;/p&gt;

&lt;p&gt;By that I mean there were many steps with which I struggled in many little ways; ways that I didn’t expect while watching the student volunteer demonstrate the steps beforehand.
For example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;While cutting the acrylic piece, I stopped pushing the acrylic through the saw when I felt the resistance reduce. But I had only cut through 3/4 of the acrylic, and didn’t immediately see this from my line of sight. This was easy to fix, but resulted in a cut that was not super smooth.&lt;/li&gt;
  &lt;li&gt;While countersinking the holes I drilled in my acrylic piece, I first drilled too little, and then over-corrected and ended up with comically large rims (far bigger than the heads of the screws that eventually went in).&lt;/li&gt;
  &lt;li&gt;While punching holes in the sheet metal, I didn’t do so in a smooth motion and ended up with holes that were jagged on the other side. Thanks to the student volunteer who hammered away at them to flatten them out!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s been a while since I did something &lt;em&gt;totally, completely&lt;/em&gt; new to me.
It felt good to be that far from familiar territory!
First, I promptly forgot a fair bit about all the tools to which I was introduced.
Then, after watching the student volunteer demonstrate the steps to build the bookend, I thought “okay, looks fine, I can do that”.
Finally, I proceeded to struggle in a bunch of little ways that neither they nor I expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The experience has made me a bit more empathetic toward students in my introductory programming courses.&lt;/strong&gt;
For example, the students in my CS 0 class have often never programmed before I see them, and they are doing something &lt;em&gt;totally, completely&lt;/em&gt; new to them.&lt;/p&gt;

&lt;p&gt;A really reductive description of my intro course might be that I introduce students to a bunch of “tools” (&lt;del&gt;drill presses, step shear, miter saw&lt;/del&gt; control flow, functions, test cases) and give them scaffolded practice tasks (&lt;del&gt;making a bookend&lt;/del&gt; making data visualisations).
They then proceed to work on their bookends, and while doing so struggle in little ways that neither they nor I expected.&lt;/p&gt;

&lt;p&gt;It’s hard to do things for the first time!&lt;/p&gt;

&lt;p&gt;It’s also worth remembering that I don’t have any personal investment in being good at wood- or metal-working, so I was comfortable asking for help when I needed it, and was okay with taking a bit more time to make my bookend if I needed to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is usually not so for first-year CS students.&lt;/strong&gt;
At Cal Poly we have a “competitive enrolment policy”, i.e., students are admitted directly into the CS major, or need to jump through some GPA hoops to transfer into the CS major.
This can be a bad thing,&lt;sup id=&quot;fnref:competitive-enrolment-policy&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:competitive-enrolment-policy&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; in part because it results in students already having a bunch of perceived self-worth wrapped up in being good at computer science, which can get in the way of their learning.&lt;/p&gt;

&lt;p&gt;Anyway, I’m grateful to the Red Tag training for (1) existing, and (2) reminding me what it’s like to be a student doing something for the first time.
I will try to remember the feeling during Q&amp;amp;A sessions and office hours.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:competitive-enrolment-policy&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Nguyen &amp;amp; Lewis. &lt;em&gt;&lt;a href=&quot;https://par.nsf.gov/servlets/purl/10195776&quot;&gt;Competitive Enrollment Policies in Computing Departments Negatively Predict First-Year Students’ Sense of Belonging, Self-Efficacy, and Perception of Department&lt;/a&gt;&lt;/em&gt; &lt;a href=&quot;#fnref:competitive-enrolment-policy&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>How relative novices make sense of code coverage and mutation-based feedback</title>
    <link>https://ayaankazerouni.org/blog/test-feedback-sensemaking/</link>
    <guid>https://ayaankazerouni.org/blog/test-feedback-sensemaking/</guid>
    <pubDate>Thu, 04 Jan 2024</pubDate>
    <description>
      &lt;p&gt;This is an overview of the research paper &lt;em&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#toce2023testing&quot;&gt;A Model of How Students Engineer Test Cases with Feedback&lt;/a&gt;&lt;/em&gt; published in ACM Transactions on Computing Education. The work was conducted at Cal Poly and was led by MS student &lt;a href=&quot;https://www.linkedin.com/in/amshin98/&quot;&gt;Austin Shin&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;Most programming courses require students to write automated software tests to verify and demonstrate the correctness of their solutions to programming problems.
The quality of these test suites can vary in terms of their defect-detection capability.
The thoroughness of a test suite can be measured using a &lt;em&gt;test adequacy criterion&lt;/em&gt; like &lt;a href=&quot;https://en.wikipedia.org/wiki/Code_coverage&quot;&gt;code coverage&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Mutation_testing&quot;&gt;mutation analysis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In most CS courses, it is matter of course to assess both the correctness of students’ programmed solutions as well as the thoroughness of their software tests.
As students are encouraged to frequently write and run their own tests to check the correctness of their programs, so they are encouraged to frequently assess the thoroughness of their tests using one of the above criteria.&lt;/p&gt;

&lt;p&gt;Within this context, it is useful to understand how students respond to software testing feedback while creating test suites.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;We qualitatively studied how students made sense of software testing feedback generated using two feedback mechanisms: code coverage and mutation analysis.&lt;/p&gt;

&lt;p&gt;Our findings are summarised in the process model below.&lt;/p&gt;

&lt;style&gt;
figure.wide {
  overflow-x: visible;
  max-width: 120%;
}

figure.wide img {
  max-width: 120%;
  display: block;
  margin-left: auto;
  margin-right: auto;
}

figure.wrap {
  float: left;
}

figure.wrap img {
  max-width: 40vw;
}

figure.wrap figcaption {
  max-width: 20vw;
}

figure.wrap img,
figure.wrap figcaption {
  margin-right: 5vw;
}

@media only screen and (max-width: 768px) {
  figure.wrap {
    float: unset;
  }

  figure.wrap img,
  figure.wrap figcaption {
    max-width: 95vw;
  }
}
&lt;/style&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://ayaankazerouni.org/blog/test-feedback-sensemaking/process-model.png&quot; target=&quot;_blank&quot;&gt;
    
    &lt;img src=&quot;https://ayaankazerouni.org/blog/test-feedback-sensemaking/process-model.png&quot; alt=&quot;A process diagram showing a novice&apos;s test selection process. A participant receives a testing task, then reads the source code or program description to first understand the problem and program. Once this is done, they write an initial set of tests based on experience and intuition. If any tests fail, the participant re-evaluates their understanding. Once all tests pass, they receive test adequacy feedback. They use strategies like code tracing to identify gaps in branch or mutation feedback. If mutation feedback is too difficult to address, the participant may fall back to addressing branch coverage instead. Once all feedback is satisfied, the testing task is done.&quot; /&gt;
    
  &lt;/a&gt;

  &lt;figcaption&gt;A process model for how novices write software tests when being guided by a test adequacy criterion (code coverage or mutation analysis).&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;method&quot;&gt;Method&lt;/h2&gt;

&lt;p&gt;We did a series of one-on-one interviews in which we gave students a number of small programs for which they were asked to write test cases.
Students were asked to think out loud while performing the testing tasks, and the sessions were recorded.&lt;/p&gt;

&lt;p&gt;Interviews went roughly as follows:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Warm-up problem, with no testing feedback&lt;/li&gt;
  &lt;li&gt;First testing problem, with no testing feedback&lt;/li&gt;
  &lt;li&gt;Warm-up problem, with code coverage feedback&lt;/li&gt;
  &lt;li&gt;Second testing problem, with code coverage feedback&lt;/li&gt;
  &lt;li&gt;Warm-up problem, with mutation-based feedback&lt;/li&gt;
  &lt;li&gt;Third testing problem, with mutation-based feedback&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below is the interface in which students were given testing exercises.&lt;/p&gt;

&lt;style&gt;
figure.wide {
  overflow-x: visible;
  max-width: 120%;
}

figure.wide img {
  max-width: 120%;
  display: block;
  margin-left: auto;
  margin-right: auto;
}

figure.wrap {
  float: left;
}

figure.wrap img {
  max-width: 40vw;
}

figure.wrap figcaption {
  max-width: 20vw;
}

figure.wrap img,
figure.wrap figcaption {
  margin-right: 5vw;
}

@media only screen and (max-width: 768px) {
  figure.wrap {
    float: unset;
  }

  figure.wrap img,
  figure.wrap figcaption {
    max-width: 95vw;
  }
}
&lt;/style&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://ayaankazerouni.org/blog/test-feedback-sensemaking/muttle.png&quot; target=&quot;_blank&quot;&gt;
    
    &lt;img src=&quot;https://ayaankazerouni.org/blog/test-feedback-sensemaking/muttle.png&quot; alt=&quot;A screenshot of the testing interface, showing where the user creates test cases and receives branch coverage or mutation coverage feedback about those test cases&quot; /&gt;
    
  &lt;/a&gt;

  &lt;figcaption&gt;Each exercise lets the user create, modify or delete test cases (A). If their test cases pass, they are given code coverage feedback in the coloured gutter next to the line numbers (B) or mutation-based feedback in the form of bug badges above the lines of code where mutations were made (C) In this example, the statement &lt;code&gt;return x * y&lt;/code&gt; was mutated to &lt;code&gt;return x ** y&lt;/code&gt;. The interviewer used the toggles at the top of the screen to switch between no coverage, code coverage, or mutation-based feedback, based on the experimental condition (D).&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We qualitatively analysed the transcripts from these interviews.
For details about our analytic method, see &lt;a href=&quot;https://ayaankazerouni.org/publications#toce2023testing&quot;&gt;the paper&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;

&lt;p&gt;Here are the highlights:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem and program comprehension had a strong influence on students’ abilities to write useful tests.&lt;/strong&gt;
If they had a shaky understanding of the problem or the code under test, their ability to address gaps in code coverage or mutation coverage suffered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Various intuitions came into play when no feedback was available.&lt;/strong&gt;
Nearly all students started with a “happy path” test case—something simple that they could quickly work out in their minds.
They may have been using these simple test cases as scaffolds to confirm that they understood the problem and program correctly.&lt;/p&gt;

&lt;p&gt;When no testing feedback was available, students often chose test inputs based on intuitions about “edge cases”—these most often took the form of boundary values for the data type at hand (e.g., zero, negative numbers, or empty lists).
Importantly, these types of inputs were chosen whether or not they represented unexplored &lt;a href=&quot;https://en.wikipedia.org/wiki/Equivalence_partitioning&quot;&gt;equivalence partitions&lt;/a&gt; in the input space.&lt;/p&gt;

&lt;p&gt;Some students started by identifying beacons&lt;sup id=&quot;fnref:beacons&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:beacons&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; in the problem description or program, and targeting their initial tests toward those beacons.
For example, in the &lt;em&gt;Rainfall problem&lt;/em&gt;, the program is given an input list of numbers (daily rainfall), and is expected to compute the mean of all the positive numbers that occur before a “sentinel value” (say, 99999).
In our interviews, most students zeroed in on that sentinel value requirement and wrote an early test to target that requirement.&lt;/p&gt;

&lt;p&gt;Finally, because students had seen code coverage before, some of them mentally simulated code coverage to self-assess their own test suites and identify gaps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code tracing strategies were employed while addressing code coverage feedback.&lt;/strong&gt;
As described above, code comprehension played an important role in students’ abilities to address coverage gaps.
They used various strategies to manage the cognitive load of code comprehension involved during testing.
For example,&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;While tracing code to identify gaps in (code or mutation) coverage, students often limited their tracing to the &lt;em&gt;basic block&lt;/em&gt;&lt;sup id=&quot;fnref:basic-block&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:basic-block&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; in which the gap existed.&lt;/li&gt;
  &lt;li&gt;They used &lt;em&gt;variable roles&lt;/em&gt;&lt;sup id=&quot;fnref:variable-roles&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:variable-roles&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; to help them reason about the variables involved their tracing.&lt;/li&gt;
  &lt;li&gt;Sometimes, they simply ignored the feedback and opted to write tests based on their intuitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Addressing mutation-based feedback proved to be cognitively demanding.&lt;/strong&gt;
Reasoning about mutation-based feedback appeared to be a high-cognitive-load activity for the interviewed students.
To devise test cases to address a gap in mutation coverage, students needed to develop and maintain an understanding of the mutated program &lt;em&gt;while simultaneously&lt;/em&gt; maintaining their understanding of the original program.
Moreover, they need to identify to point at which the two programs diverge.
This was a demanding task.&lt;/p&gt;

&lt;p&gt;Even after demonstrating an understanding of the idea behind mutation analysis, students struggled mightily on certain mutants.
One student was so distracted by this parallel comprehension task that when they eventually wrote a test case, they wrote one that would &lt;em&gt;pass&lt;/em&gt; the mutated program, and &lt;em&gt;fail&lt;/em&gt; the original program (i.e., the opposite of the task at hand).&lt;/p&gt;

&lt;p&gt;Difficulties more commonly arose for mutants that appeared at conditional branching points in the program, as opposed to, say, mutants that involved changes to arithmetic expressions or variable assignments.&lt;/p&gt;

&lt;p&gt;As before, students developing strategies to manage this demanding parallel code tracing task:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Like with code coverage, they traced basic blocks and reasoned about the program in terms of variable roles.&lt;/li&gt;
  &lt;li&gt;When addressing mutation-based feedback was too difficult, they “fell back” to addressing the weaker criterion (code coverage) instead. This heuristic—of simply targeting code coverage instead of mutants—was sometimes fruitful.&lt;/li&gt;
  &lt;li&gt;Finally, some students ignored the specific mutations and focused only on the fact that they were &lt;em&gt;present&lt;/em&gt;. The presence of an un-addressed mutant alerted students to “suspicious” lines of code, and they did not need to look at the specific mutation in order to target their testing toward those lines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more details, see &lt;a href=&quot;https://ayaankazerouni.org/publications#toce2023testing&quot;&gt;the paper&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:beacons&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Prominent structures or symbols (variable names, function names, comments) in a program (or problem description, here) that help a reader to quickly understand the program’s purpose. &lt;a href=&quot;#fnref:beacons&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:basic-block&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;A basic block in a program is a straight-line sequence of statements such that “if the first statement is executed, all statements in the block will be executed”. &lt;a href=&quot;#fnref:basic-block&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:variable-roles&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/1046340&quot;&gt;Sajaniemi&lt;/a&gt; suggests that a small number of categories can describe the purposes of most variables in most programs. When novice programmers were explicitly taught to recognise these categories, their performance on code comprehension tasks improved significantly. This general idea has a &lt;a href=&quot;https://www.manning.com/books/the-programmers-brain&quot;&gt;strong basis in human cognition&lt;/a&gt;, even if the specific categories suggested are are bit limited to imperative programming languages. &lt;a href=&quot;#fnref:variable-roles&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>What makes CS students seek or avoid academic help resources?</title>
    <link>https://ayaankazerouni.org/blog/help-seeking-behaviours/</link>
    <guid>https://ayaankazerouni.org/blog/help-seeking-behaviours/</guid>
    <pubDate>Sat, 13 Nov 2021</pubDate>
    <description>
      &lt;p&gt;&lt;small&gt;
&lt;em&gt;This article was originally posted on &lt;a href=&quot;https://ayaankazerouni.medium.com&quot;&gt;my Medium blog&lt;/a&gt; on November 13, 2021.&lt;/em&gt;
&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;This is an overview of the paper &lt;em&gt;&lt;a href=&quot;https://ayaankazerouni.github.io/publications#koli2021help-seeking&quot;&gt;Patterns of Academic Help-Seeking in Undergraduate Computing Students&lt;/a&gt;&lt;/em&gt;, appearing at the 2021 &lt;a href=&quot;https://www.kolicalling.fi/&quot;&gt;Koli Calling&lt;/a&gt; conference on computing education research. It was written by my student collaborator Augie Doebling and myself.&lt;/p&gt;

&lt;p&gt;Help-seeking is an expected phase in learning or problem-solving. The process involves a fair bit of self-regulatory skill; a learner must recognise that a problem or difficulty exists, assess whether they need help to surmount it, identify a help resource, and finally seek and process help.&lt;/p&gt;

&lt;p&gt;Undergraduate students tend to have a variety of academic help resources at their disposal. For example, taking Cal Poly as a typical example, students can seek help with their coursework from online sources, their peers, instructors, or the departmental peer tutoring centre.&lt;/p&gt;

&lt;p&gt;Much has been written about how students use individual resources, such as &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3291279.3339418&quot;&gt;TA office hours&lt;/a&gt; or &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3017680.3017745&quot;&gt;Piazza&lt;/a&gt;. But what we know holistically about how computing students navigate this array of resources is largely anecdotal. What resources do they tend to use most frequently? Does this differ for different demographic groups? What influences students to approach or avoid certain resources?&lt;/p&gt;

&lt;p&gt;We conducted a mixed-methods study to better understand the help-seeking behaviours of students in the CSSE department at Cal Poly.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Survey:&lt;/strong&gt; Distributed in a wide variety of Cal Poly CS courses, asking students about the frequency with which they accessed various help resources.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interviews:&lt;/strong&gt; A series of one-on-one interviews with students to learn the factors that influence their help-seeking decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We discussed the following resources (acronyms are for the figure that follows):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The instructor—in office hours (IN-OH), in class (IN-CL), or online (IN-OC)&lt;/li&gt;
  &lt;li&gt;The TA—in class (TA-CL) or online (TA-OC)&lt;/li&gt;
  &lt;li&gt;Peers—enrolled in the same class (PEC) or other classes (OP)&lt;/li&gt;
  &lt;li&gt;The peer tutoring centre (CSTC)&lt;/li&gt;
  &lt;li&gt;Online materials—specific to the course (OM-SC) or not specific to the course (OM-NSC)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;frequency-of-help-seeking&quot;&gt;Frequency of help-seeking&lt;/h2&gt;

&lt;p&gt;We received 138 survey responses about the frequency with which students accessed various help resources.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;frequency.png&quot; alt=&quot;Stacked bar charts showing frequency with which students reported accessing help resources. The chart&apos;s message is described after this figure.&quot; /&gt;
  &lt;figcaption&gt;
  Frequency of accessing various help resources.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Students most frequently relied on &lt;strong&gt;online sources&lt;/strong&gt;, followed closely by their &lt;strong&gt;peers in class&lt;/strong&gt;.
They reported modest reliance on the &lt;strong&gt;instructor&lt;/strong&gt; for help, preferring to ask questions in class or online rather than going to office hours.&lt;/p&gt;

&lt;p&gt;Students did not report much use of &lt;strong&gt;course TAs&lt;/strong&gt; or the &lt;strong&gt;peer tutoring centre&lt;/strong&gt;.
The former may be because TAs at Cal Poly do not hold office hours like they might at other universities—there is typically much more contact with instructors than with TAs.&lt;/p&gt;

&lt;h2 id=&quot;trends-by-student-demographics&quot;&gt;Trends by student demographics&lt;/h2&gt;

&lt;p&gt;There was no difference in the overall frequency of help-seeking (across all resources) between men and women.
However, women reported turning to the “social” help resources more often than men did: they attended instructor office hours and accepted help from peers roughly &lt;em&gt;Once a Week&lt;/em&gt; compared to men’s &lt;em&gt;Every Few Weeks&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why might this be?&lt;/strong&gt; &lt;a href=&quot;https://bera-journals.onlinelibrary.wiley.com/doi/10.1002/rev3.3196&quot;&gt;Previous research&lt;/a&gt; has suggested that women tend to have a better attitude toward help-seeking than men do, viewing it more as a learning strategy and less as a sign of dependence.
It’s possible that students who are less inclined to seek help from social sources perceive some level of threat to their self-esteem from the act of seeking help.&lt;/p&gt;

&lt;p&gt;Finally, computing majors reported relying on their peers and online sources more often than did non-computing majors. No other notable patterns were observed for other resources and demographic groups (e.g., ethnicity, prior experience with computing, or academic progress).&lt;/p&gt;

&lt;h2 id=&quot;what-makes-students-approach-or-avoid-help-resources&quot;&gt;What makes students approach or avoid help resources?&lt;/h2&gt;

&lt;p&gt;Having discovered trends and correlations regarding frequency of accessing help resources, we turned to interviews to understand why students make the help-seeking decisions that they do.&lt;/p&gt;

&lt;p&gt;We asked students about the primary resources they turn to for academic help, the resources that they tend to avoid, and their reasons for both. A number of themes emerged from our qualitative analysis of interview transcripts.&lt;/p&gt;

&lt;p&gt;First, students tended to progress from informal to formal sources of help: a frequently reported pattern was the progression from &lt;em&gt;online sources&lt;/em&gt; to &lt;em&gt;peers&lt;/em&gt; to &lt;em&gt;instructors&lt;/em&gt;, where students only progressed to the next resource if the previous resource did not help surmount a problem.&lt;/p&gt;

&lt;p&gt;Below, I describe students’ reasons for using or not using different sources of academic help.&lt;/p&gt;

&lt;h3 id=&quot;online-sources&quot;&gt;Online sources&lt;/h3&gt;

&lt;p&gt;Reasons for using:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Ease of access:&lt;/em&gt; Just a few button presses away.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Concrete examples:&lt;/em&gt; Sites like StackOverflow were reported as being useful when one is trying to “get the ball rolling” with a new language or API, but less useful for obtaining concept knowledge about a topic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reasons for not using:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Low signal-to-noise ratio:&lt;/em&gt; It takes experience and expertise to sort through the wealth of information available through a simple Google search. Students reported that online resources became more useful to them as they became more experienced programmers, but were overwhelming when they were first learning programming.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interestingly, some students did not report online sources in their help-seeking process until specifically asked about them; they did not view it as seeking help, but rather viewed it as helping themselves.&lt;/p&gt;

&lt;h3 id=&quot;peers&quot;&gt;Peers&lt;/h3&gt;

&lt;p&gt;Reasons for using:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Ease of access:&lt;/em&gt; Peers are just a text message away.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Stress-free help:&lt;/em&gt; Peers tend to not judge one’s lack of knowledge. There is less (perceived or actual) “threat” from seeking help from a peer than there is from, say, course staff.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reasons for not using:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Lack of a peer network:&lt;/em&gt; First-year students, transfer students, or students from historically minoritised groups may not have access to a solid network of peers.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Fear of academic dishonesty:&lt;/em&gt; Students worried about accidentally breaking rules related to academic dishonesty if they worked too closely with peers. For example, they reported being hesitant to speak in detail about (or ask others about) their programming projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;instructors&quot;&gt;Instructors&lt;/h3&gt;

&lt;p&gt;Reasons for using:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Depth of content knowledge:&lt;/em&gt; Instructors are knowledgeable about their subject matter, and often provide the definitive help needed to surmount a problem.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Depth of pedagogical content knowledge:&lt;/em&gt; Instructors have seen many of the common bugs, pitfalls, and strategies used for their assignments, and are best suited to help when a student is struggling.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Forming a connection:&lt;/em&gt; Synchronous office hours helped some students form connections with their instructors, making help-seeking and learning a stress-free experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reasons for not using:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Tacit knowledge:&lt;/em&gt; Instructors often have an “expert blind spot”, and the help they give often assumes knowledge that the student (1) doesn’t have, or (2) can’t automatically transfer to their current problem.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Approachability:&lt;/em&gt; Students reported that instructors could often be intimidating (or worse, demeaning) when they were asked for help. Importantly, many students reported that poor experiences with one instructor made them less likely to seek help from any instructors in the future.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;recommendations-for-cs-instructors-or-departments&quot;&gt;Recommendations for CS instructors or departments&lt;/h2&gt;

&lt;p&gt;Based on students’ responses, we close with some recommendations for reducing the barriers to seeking academic help.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Online sources&lt;/strong&gt;—In early courses, model a process for finding information online and identifying high-quality sources. This need not be limited to StackOverflow answers; it can also include official documentation for programming languages or APIs.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Peers&lt;/strong&gt;—Feature collaborative work more prominently in early courses. This could include team projects as well as teaching practices like peer instruction or think-pair-share. Featuring more collaborative work in earlier courses would provide students access to peers to work with “legally”, and would help them form peer networks that could last into future courses.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Instructors&lt;/strong&gt;—Ensure that classrooms and office hours are welcoming spaces. Instructors play a massive role in shaping the overall climate of a classroom or department. Being cognizant of this outsized impact and taking steps to ensure a welcoming atmosphere could have huge positive implications for student success.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>Fast and Accurate Incremental Feedback for Students&apos; Software Tests Using Selective Mutation Analysis</title>
    <link>https://ayaankazerouni.org/blog/fast-accurate-mutation-feedback/</link>
    <guid>https://ayaankazerouni.org/blog/fast-accurate-mutation-feedback/</guid>
    <pubDate>Wed, 17 Mar 2021</pubDate>
    <description>
      &lt;p&gt;&lt;small&gt;
&lt;em&gt;This post originally appeared on &lt;a href=&quot;https://ayaankazerouni.medium.com&quot;&gt;my Medium blog&lt;/a&gt; on March 17, 2021.&lt;/em&gt;
&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;This is an overview of the paper &lt;em&gt;&lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S0164121221000029&quot;&gt;Fast and Accurate Incremental Feedback for Students’ Software Tests Using Selective Mutation Analysis&lt;/a&gt;&lt;/em&gt;, published in the Journal of Systems and Software. The paper is freely available. My co-authors were &lt;a href=&quot;https://davisjam.github.io&quot;&gt;Jamie Davis&lt;/a&gt;, &lt;a href=&quot;https://arinjoy-basak.github.io/&quot;&gt;Arinjoy Basak&lt;/a&gt;, &lt;a href=&quot;https://people.cs.vt.edu/shaffer&quot;&gt;Cliff Shaffer&lt;/a&gt;, &lt;a href=&quot;https://people.cs.vt.edu/fservant&quot;&gt;Francisco Servant&lt;/a&gt;, and &lt;a href=&quot;https://people.cs.vt.edu/edwards&quot;&gt;Steve Edwards&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;TL;DR: Use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; and arithmetic operator deletion (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt;) mutation operators for fast and reliable mutation analysis.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Feedback about students’ software tests is often generated using code coverage criteria (like statement or condition coverage). These can be unreliable given that code coverage is satisfied simply by the execution of the code-under-test, and not by the actual assertions in the tests.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mutation analysis&lt;/em&gt; is a stronger but much more costly criterion for measuring the adequacy of software tests. In this paper, we evaluated the feasibility of existing approaches to mutation analysis for producing automated feedback for student-written software tests. After finding that existing approaches were infeasible, we proposed new approaches for fast and accurate mutation analysis. Finally, we evaluated our proposed approaches for validity on an external dataset of open-source codebases, and report that our results may be generalisable beyond our educational context.&lt;/p&gt;

&lt;p&gt;This post is of interest to Computer Science educators interested in giving students useful feedback about their software testing, and to software engineers interested in using mutation analysis to help them write stronger software tests.&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;Software testing is important. As it is increasingly incorporated into undergraduate programming courses, teachers are giving students feedback not only about the correctness of their programs, but also about the quality of their software tests.&lt;/p&gt;

&lt;p&gt;Much of this feedback is based on assessments of test adequacy, most commonly &lt;em&gt;code coverage criteria&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Code coverage criteria are satisfied when structural elements (statements, conditions, etc.) of a program are exercised by a test suite at least once. For example, under statement coverage, the test suite’s adequacy is measured as the percentage of program constructs that are executed by the tests. Code coverage is &lt;strong&gt;fast to compute&lt;/strong&gt; and &lt;strong&gt;amenable to incremental feedback&lt;/strong&gt;. But it can be &lt;strong&gt;unreliable&lt;/strong&gt;, because the criterion is not bound to the &lt;em&gt;assertions&lt;/em&gt; in software tests, just to the underlying code that is executed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Mutation_testing&quot;&gt;Mutation analysis&lt;/a&gt;&lt;/em&gt; is a far more reliable option. Small changes (&lt;em&gt;mutations&lt;/em&gt;) are made to the target program, creating incorrect variants called &lt;em&gt;mutants&lt;/em&gt;. The test suite is run against these mutants, and its adequacy is measured as the percentage of mutants that are detected by the test suite (i.e., by a failing test). The different kinds of mutations you could make are called &lt;em&gt;mutation operators&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Mutation analysis subsumes code coverage as a test adequacy criterion&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, and has been shown to be a &lt;strong&gt;reliable measurement of test adequacy&lt;/strong&gt;. It can also be used to produce &lt;strong&gt;incremental feedback&lt;/strong&gt;: I don’t need a student to have finished a project to give them feedback about their tests.&lt;/p&gt;

&lt;h2 id=&quot;reducing-the-cost-of-mutation-analysis&quot;&gt;Reducing the cost of mutation analysis&lt;/h2&gt;
&lt;p&gt;Unfortunately, mutation analysis can be &lt;strong&gt;prohibitively expensive&lt;/strong&gt; computationally. The number of mutants produced for even a moderately sized project (~1 KLoC) can reach well into the thousands. Running the test suite for each of these mutants can take several minutes, sometimes hours.&lt;/p&gt;

&lt;p&gt;Significant research effort has been devoted to reducing this cost. One such approach is &lt;em&gt;selective mutation&lt;/em&gt;. The main idea behind selective mutation is to select a subset of mutation operators that give you the best “bang for your buck”. That is, out of the &lt;strong&gt;Full&lt;/strong&gt; set of mutation operators (all available operators) you want a subset that gives you a reliable test adequacy score — one that is close to the “true” thoroughness of your tests — while producing a small number of mutants.&lt;/p&gt;

&lt;p&gt;Numerous such operator subsets have been proposed. One key example is the &lt;strong&gt;Deletion&lt;/strong&gt; set, originally proposed by Roland Untch&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and reified by Jeff Offutt and colleagues&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Deletion operators create mutants by systematically deleting program constructs. This simple mutation scheme results in significantly fewer mutants. For example, if we were to remove the arithmetic operator in the expression &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a + b&lt;/code&gt;, we just create two mutants: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt;. This is in contrast to the four mutants that would be created by arithmetic operator &lt;strong&gt;replacement&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a — b, a / b, a * b, a % b&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We used the mutation analysis system &lt;a href=&quot;https://pitest.org&quot;&gt;PIT&lt;/a&gt;, which is built for speed and scalability. We approximated the Deletion set in PIT to be:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;RemoveConditionals&lt;/strong&gt;, which replaces conditional statements with boolean literals, i.e., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; (forcing the execution of the “if” branch) or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt; (forcing execution of the “else” branch)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Arithmetic operator deletion (AOD)&lt;/strong&gt;. E.g., the expression &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a + b&lt;/code&gt; would produce the mutants &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt;, removing the arithmetic operator (and one operand) entirely.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;NonVoidMethodCalls&lt;/strong&gt;, which replaces calls to non-void methods with the default values for the specific return type. That is, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int&lt;/code&gt;-returning method calls would be replaced with 0, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object&lt;/code&gt;-returning method calls would be replaced with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt;, etc.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;VoidMethodCalls&lt;/strong&gt;, which simply removes calls to methods that do not return anything.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MemberVariable&lt;/strong&gt;, which removes assignments to instance variables.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ConstructorCalls&lt;/strong&gt;, which replaces calls to constructors with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;null&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;fast-and-accurate-mutation-based-feedback&quot;&gt;Fast and accurate mutation-based feedback&lt;/h2&gt;

&lt;p&gt;Students in our courses are allowed and encouraged to make many incremental submissions to the auto-grader to help them ensure they’re on the right track. As deadlines approach, this can result in bursty traffic placing enormous load on the server.&lt;/p&gt;

&lt;p&gt;We ran mutation analysis on 1389 submissions in two courses in the CS program at Virginia Tech: a second year course on Software Design and Data Structures, and a third-year course on Data Structures and Algorithms. Projects were implemented in Java, and students were required to turn in &lt;a href=&quot;https://junit.org&quot;&gt;JUnit&lt;/a&gt; test suites with their project submissions.&lt;/p&gt;

&lt;p&gt;Analysis was conducted on a machine with similar specifications as the one serving our auto-grading infrastructure, &lt;a href=&quot;https://web-cat.github.io&quot;&gt;Web-CAT&lt;/a&gt;. We did not eliminate &lt;em&gt;equivalent mutants&lt;/em&gt; from our data-set. These cannot be automatically identified, which makes eliminating them from our corpus a daunting prospect.&lt;/p&gt;

&lt;p&gt;We grouped submissions by source lines of code (SLoC), ranging from ~150 LoC to ~1200 LoC.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;submission-groups.png&quot; alt=&quot;A histogram showing project groupings. Group 1, with submissions smaller than 341 lines of code, contains 672 submissions. Group 2, with submissions smaller than 666 lines of code, contains 353 submissions. Group 3, with submissions smaller than 1097 lines of code, contains 245 submissions. Group 4, with the largest submissions, contains 119 lines of code.&quot; /&gt;
  &lt;figcaption&gt;Groups of submissions based on source lines of code (SLoC). Dashed lines indicate group boundaries.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;For each operator subset, we looked at&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Computational cost:&lt;/strong&gt; the running time in seconds (i.e., how long would a student spend twiddling their thumbs waiting for feedback?) and the number of mutants produced per thousand lines of code&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Accuracy&lt;/strong&gt; at predicting coverage under the Full set. That is, if mutants under a given subset are killed by the test suite, how likely is it that the test suite will also kill mutants under the Full set?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Preliminary results showed that comprehensive mutation (i.e., using all available mutation operators) was certainly too slow for our purposes. For submissions in the larger submissions groups, even the Deletion set took too long (nearly a minute) to produce feedback.&lt;/p&gt;

&lt;p&gt;That said, the Deletion set showed promise. As Offutt and friends reported, it produces a remarkably good approximation of mutation adequacy at a fraction of the computational cost of comprehensive mutation.&lt;/p&gt;

&lt;p&gt;Can we reduce this cost further?&lt;/p&gt;

&lt;h2 id=&quot;reducing-the-cost-of-the-deletion-set&quot;&gt;Reducing the cost of the Deletion set&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Do we need all six Deletion operators to make a useful approximation of mutation adequacy?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We used forward selection to determine an appropriate ordering of Deletion operators, set up as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Dependent variable:&lt;/strong&gt; Mutation coverage using all available operators&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Independent variables:&lt;/strong&gt; Mutation coverage under each individual Deletion operator&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Procedure:&lt;/strong&gt; Starting from an empty set of operators, we iteratively added the single operator that most improved a model predicting comprehensive mutation coverage, stopping when all Deletion operators were included or when the model could no longer improve.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All Deletion operators were included, in the following order: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals, AOD, NonVoidMethodCalls, VoidMethodCalls, MemberVariable, ConstructorCalls&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, we examined the cost and effectiveness of incremental slices of this ordering:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;1-operator subset&lt;/strong&gt;, containing only &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2-operator subset&lt;/strong&gt;, containing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;3-operator subset&lt;/strong&gt;, containing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NonVoidMethodCalls&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;…continued until the entire Deletion set is included&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;result&quot;&gt;Result&lt;/h2&gt;
&lt;p&gt;We found that most of the Deletion set’s effectiveness comes from the first two operators, i.e., &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt;. Inclusion of additional operators drives up the cost, but with little improvement to accuracy.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;inc-subsets.png&quot; alt=&quot;Four subplots, each with four box plots showing operator subset cost, and line plots showing operator subset accuracy.&quot; /&gt;
  &lt;figcaption&gt;The cost and accuracy of our proposed incremental subsets of operators. For each subplot, the left axis represents cost (# mutants per KSLoC) and the right axis represents accuracy (Adjusted R&lt;sup&gt;2&lt;/sup&gt; predicting Full coverage) Y-axes are shared across subplots. Inline text at the bottom of the charts indicates the median running time on our server.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;In the figure above,&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Each column represents a single submission group,&lt;/li&gt;
  &lt;li&gt;Each box plot represents the cost distribution of a subset for that submission group, in mutations-per-thousand-LoC,&lt;/li&gt;
  &lt;li&gt;Each blue dot represents the percent of variance in comprehensive mutation that is explained by that subset for the given submission group&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can see that for submission groups 2–4, the cost drops precipitously from Deletion → 3-op → 2-op → 1-op, while the accuracy stays more or less the same. For the smaller submissions in group 1, it’s possible that they simply do not provide enough opportunities for mutation to take place, so accuracy takes a huge hit for each mutation operator that is excluded.&lt;/p&gt;

&lt;p&gt;Some key takeaways:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The RemoveConditionals operator, by itself, is enormously effective&lt;/strong&gt; for the larger, more complex submissions, pushing 90% adjusted R&lt;sup&gt;2&lt;/sup&gt; for group 4 submissions (see the 1-op box plot in the rightmost subplot). For groups 2 and 3, it still does pretty well, but requires the inclusion of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt; operator to cross the 90% threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which operators are most useful seems tied to the project itself.&lt;/strong&gt; It is no surprise that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; does not do so well for the group 1 submissions: they are of minimal cyclomatic complexity, meaning they contain few conditional statements. Including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt; substantially improves the approximation, because these projects tend to focus more on arithmetic operations and less on data structure implementations (in contrast to the submissions found in the Data Structures and Algorithms course).&lt;/p&gt;

&lt;h2 id=&quot;validating-our-results&quot;&gt;Validating our results&lt;/h2&gt;
&lt;p&gt;At this point, it looks like mutation analysis using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals+AOD&lt;/code&gt; are feasible options for giving our students fast and reliable feedback about their test suites.&lt;/p&gt;

&lt;p&gt;The question now is: are these results generally useful? Or are they specific to submissions produced by students in our courses?&lt;/p&gt;

&lt;p&gt;We turn to a data-set&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; released by Marinos Kintis and colleagues containing programs, mutants, and mutation-adequate test suites, drawn from 6 open-source Java projects.&lt;/p&gt;

&lt;p&gt;Using this dataset, we evaluated the cost and effectiveness of the Deletion, 3-op, 2-op, and 1-op subsets.&lt;/p&gt;

&lt;p&gt;For each subset, we examined:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt;, measured by creating a subset-adequate test suite, and seeing how it held up using all possible mutants. In other words, if a developer stopped testing when they satisfied a subset, how thorough would their test suite be under comprehensive mutation?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cost&lt;/strong&gt;, measured as the percentage of all possible mutants that were created by the subset.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kintis et al. also hand-marked equivalent mutants in their published data-set. This gives us an opportunity to test our operator subsets in the absence of these mutants, addressing a limitation present in our analysis of our students’ submissions.&lt;/p&gt;

&lt;h2 id=&quot;result-1&quot;&gt;Result&lt;/h2&gt;
&lt;p&gt;Results were largely in agreement with the study described above.&lt;/p&gt;

&lt;p&gt;In terms of &lt;strong&gt;reliability&lt;/strong&gt;, it appeared that the incremental subsets were nearly as effective as the entire Deletion set, with the 3-op subset (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NonVoidMethodCalls&lt;/code&gt; and beyond) bringing diminishing returns. This is similar to our original results.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;cost&lt;/strong&gt; naturally decreases in the order Deletion → 3-op → 2-op → 1-op.&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;val-mutation-score.png&quot; alt=&quot;Four box-plots shows the Mutation score of the Deletion, 3-op, 2-op, and 1-op subsets. The median mutation scores are 0.95, 0.95, 0.95, and 0.9, respectively.&quot; /&gt;
  &lt;figcaption&gt;Mutation coverage: Proportion of Full mutants detected by the subset-adequate test suite.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;val-cost.png&quot; alt=&quot;The cost in terms of the proportion of mutants produced by the Deletion, 3-op, 2-op, and 1-op subsets. The median proportions are around 0.155, 0.148, 0.110, 0.060, respectively.&quot; /&gt;
  &lt;figcaption&gt;Computational cost: Number of mutants produced by each subset, expressed as a proportion of the Full number of mutants.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;

&lt;h2 id=&quot;final-remarks&quot;&gt;Final remarks&lt;/h2&gt;
&lt;p&gt;These results suggest that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; operator is a feasible option for fast and accurate mutation analysis. And this makes sense, because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RemoveConditionals&lt;/code&gt; can be thought of as a stronger form of condition coverage—only instead of simply requiring that all conditions evaluate to true and false at least once, it is satisfied when the tests depend on the conditions evaluating to true or false at least once. The difference is subtle, but results in much more thorough tests when used as a basis for measuring test adequacy.&lt;/p&gt;

&lt;p&gt;Including the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AOD&lt;/code&gt; operator provides an even stronger criterion, and it especially useful when the code-under-test has few logical branches. Including further Deletion operators drives up the cost but without improvements in effectiveness.&lt;/p&gt;

&lt;p&gt;It remains to be seen whether mutation-based testing feedback using one or both of these operators helps students to produce stronger test suites. Future work should involve evaluating mutation analysis for its utility as a device for practice and feedback with software testing.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://cs.gmu.edu/media/techreports/ISSE-TR-96-01.pdf&quot;&gt;Offutt, 1996&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/1566445.1566540&quot;&gt;Untch, 2009&lt;/a&gt; &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/document/6823861&quot;&gt;Delamaro, Offutt, &amp;amp; Ammann, 2014&lt;/a&gt; &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://pages.cs.aueb.gr/~kintism/papers/scam2016/&quot;&gt;Kintis et al., 2016&lt;/a&gt; &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>Explicit Milestones on Intermediate Software Projects are Pretty Not Bad</title>
    <link>https://ayaankazerouni.org/blog/explicit-project-milestones/</link>
    <guid>https://ayaankazerouni.org/blog/explicit-project-milestones/</guid>
    <pubDate>Wed, 14 Oct 2020</pubDate>
    <description>
      &lt;p&gt;&lt;small&gt;
&lt;i&gt;This article was originally posted on &lt;a href=&quot;https://ayaankazerouni.medium.com&quot;&gt;my Medium blog&lt;/a&gt; on October 14, 2020.&lt;/i&gt;
&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is an overview of the research paper “&lt;strong&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#sigcse2021milestones&quot;&gt;The Impact of Programming Project Milestones on Procrastination, Project Outcomes, and Course Outcomes&lt;/a&gt;&lt;/strong&gt;” by &lt;a href=&quot;https://people.cs.vt.edu/shaffer&quot;&gt;Cliff Shaffer&lt;/a&gt; and myself, appearing at SIGCSE 2021.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Undergraduate CS students often lack experience working on large, un-scaffolded, and long-running software projects. When they encounter such projects for the first time in intermediate programming courses, they do so without any procedural knowledge for how to go about tackling them. As a result, many of them struggle to complete these projects on time or correctly. As educators, we can do a better job supporting students as they approach these projects.&lt;/p&gt;

&lt;p&gt;We started giving students explicit project milestones with intermediate deadlines, to go with software project specifications in a third-year Data Structures course. The goal is to give students guided practice with project decomposition, time management, and successful project completion.&lt;/p&gt;

&lt;p&gt;In a quasi-experiment to determine the impact that milestones had on timeliness, project correctness, and course outcomes, we found that:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Milestones had a considerably strong effect on timeliness, reducing the rate of late submissions by nearly 30%&lt;/li&gt;
  &lt;li&gt;Students with milestones produced projects with slightly higher correctness than students without milestones&lt;/li&gt;
  &lt;li&gt;Milestones had little effect on frequencies of course outcomes, with its positive effects limited to the “students in the middle”. Unfortunately, just as many students failed the course, and just as many students withdrew from the course, with or without milestones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read on for more information.&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;Students in intermediate programming courses often work on large, un-scaffolded, and relatively long-running software projects. These tend to be larger and more complex than projects they have worked on in the past, and consequentially bring with them a set of self-regulatory challenges that the students may be ill-equipped to deal with. No longer are assignment specifications given as easy-to-approach bullet-lists of requirements. Instead, they’re presented with a “wall of prose” from which they must extract requirements, plan their development, and get to work.&lt;/p&gt;

&lt;p&gt;An expert software developer has the domain-specific self-regulatory skills to tackle such a project. She can decompose such a project into sub-goals and budget the time needed to tackle each one. Novices, however, are often unable to do this decomposition themselves, and are famously poor at estimating the time needed for a development task &lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. So instead, they are left facing the project with no clear place to start, low self-efficacy regarding their ability to finish, and not much prior experience from which to draw strategies or confidence.&lt;/p&gt;

&lt;p&gt;A common manifestation of students’ ill-preparedness to approach these projects is procrastination, the “quintessential self-regulatory failure”&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. According to Science, there are many reasons for procrastination. Chief among them are task-related reasons. For example, we know that people are more likely to procrastinate:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;when the task’s outcome is expected farther in the future&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;,&lt;/li&gt;
  &lt;li&gt;when they have low expectancy of successfully completing the task&lt;sup id=&quot;fnref:3:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;, and&lt;/li&gt;
  &lt;li&gt;when the task offers numerous junctures for decision-making (e.g., the student doesn’t know where to start)&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Can we use this knowledge to reduce the frequency of procrastination on these projects and ameliorate its negative effects? I previously wrote about the pervasive and pernicious nature of procrastination in this context—students start late, work late, and finish late, often resulting in degraded project outcomes.&lt;/p&gt;

&lt;p&gt;In this post, I describe a simple classroom intervention that helped reduce the rate of late submissions on programming projects by about 30%, and helped improve class performance in the intermediate Data Structures and Algorithms (DSA) course at Virginia Tech.&lt;/p&gt;

&lt;h2 id=&quot;explicit-project-milestones&quot;&gt;Explicit project milestones&lt;/h2&gt;

&lt;p&gt;Our intermediate DSA course involves three to four programming projects, each of which is worked on for about a month. Each project requires students to build one or more interacting data structures—for example, a hash table or a PR quad-tree. Projects are un-scaffolded (no starter code) and students are free to design their own solutions. They are allowed to make as many submissions as they like to our auto-grader, which tests their solutions using acceptance tests written by the course staff.&lt;/p&gt;

&lt;p&gt;Unfortunately, these projects usually have distressingly high rates of late submissions and failing grades, and about 25–30% of students either fail or withdraw from the course.&lt;/p&gt;

&lt;p&gt;We believe that poor self-regulation and project management (often manifesting as procrastination) may be a significant contributor to these poor outcomes. Therefore, we instituted explicit project milestones—we broke down projects into sub-tasks that students needed to complete by intermediate deadlines. We expected to observe reduced procrastination stemming from&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;outcomes that are too far in the future to be valued in the present,&lt;/li&gt;
  &lt;li&gt;students not being able to decompose a large engineering task into manageable sub-tasks, and&lt;/li&gt;
  &lt;li&gt;low expectancy of success, because completing each successive sub-task is likely to increase the student’s self-efficacy regarding the larger overarching task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The milestones themselves were pretty straightforward, and checkable using our auto-grading infrastructure. For any given data structure (or database made up of interacting data structures), they were as follows:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Milestone 1&lt;/strong&gt;: Make a first submission to the auto-grader (speaking as a former instructor for this course, this was surprisingly effective at making students start thinking about the project early)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Milestone 2&lt;/strong&gt;: Complete the insertion operation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Milestone 3&lt;/strong&gt;: Complete the search and update operations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Final submission&lt;/strong&gt;: Complete the removal operation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Done in that order, the removal operation is completed last. This is good because removal is often the hardest-to-implement operation in many data structures, involving complex structural rearrangements (e.g., re-ordering a binary search tree, or re-balancing a B+ tree). Our hope is that the experience of successfully completing the other, simpler operations a week or two earlier helps build the student’s self-efficacy regarding the more difficult sub-task ahead.&lt;/p&gt;

&lt;h2 id=&quot;how-helpful-were-the-milestones&quot;&gt;How helpful were the milestones?&lt;/h2&gt;
&lt;p&gt;We instituted Milestones in the Spring of 2016. We are interested in knowing if the milestones had any impact on procrastination, project outcomes, or course outcomes. So we compared outcomes in the “milestones semester” (Spring 2016) with outcomes in a “no milestones semester”—Fall 2013. In Fall 2013, the course was taught by the same instructor (Cliff), and the projects were of comparable difficulty. In terms of LoC and cyclomatic complexity, there were no differences between project submissions in the two semesters.&lt;/p&gt;

&lt;p&gt;We measured differences in terms of timeliness, project correctness, and course outcomes. I present a high-level overview of our results below. More details can be found in the paper.&lt;/p&gt;

&lt;h3 id=&quot;timeliness&quot;&gt;Timeliness&lt;/h3&gt;

&lt;p&gt;Milestones were pretty effective! We measured the rate of late submissions and the time of project completion for the two semesters. We checked for differences between the two semesters as well as differences within the milestones semester based on the number of milestones completed.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The rate of late submissions dropped from 41% without milestones to 12% with milestones&lt;/li&gt;
  &lt;li&gt;Within the treatment semester, students who completed 0 or 1 milestones tended to finish on the day of or after the deadline, while students who completed 2 or 3 milestones tended to finish their projects a day or more before the deadline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Results are summarised in the figure below.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;completion-time-milestone-group.png&quot; alt=&quot;A series of boxplots showing distributions of project completion times in terms of hours before the deadline. They generally completing more milestones led to generally earlier completion times.&quot; /&gt;
  &lt;figcaption&gt;Completion times (in terms of hours before or after the deadline) with and without milestones. Whiskers are the 10th and 90th percentiles. Outliers beyond these percentiles are omitted.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;project-correctness&quot;&gt;Project correctness&lt;/h3&gt;

&lt;p&gt;As I stated above, a lack of self-efficacy or discipline-specific procedural knowledge may be contributing to students’ poor outcomes on these projects. In addition to late submissions, students are prone to submitting incorrect or inadequately tested solutions. So we checked to see if milestones had any impact on project correctness.&lt;/p&gt;

&lt;p&gt;Project correctness was defined as the percentage of instructor-written acceptance tests that the student’s submission passed. We checked for differences in correctness between submissions in the two semesters, and differences within the milestones semester based on the number of milestones completed.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The mean correctness score increased slightly, from 72% (sd = 20%) without milestones to 76% (sd = 21%) with milestones&lt;/li&gt;
  &lt;li&gt;Students who completed 2 or more milestones tended to produce projects with higher correctness than those who completed fewer milestones&lt;/li&gt;
&lt;/ul&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;correctness-milestone-group.png&quot; alt=&quot;A series of boxplots showing distributions of project scores in terms of percentage of reference tests passed. Generally, completing more milestones was associated with more correct projects.&quot; /&gt;
  &lt;figcaption&gt;Correctness scores with and without milestones&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;course-outcomes&quot;&gt;Course outcomes&lt;/h3&gt;
&lt;p&gt;Having seen that milestones had a positive impact on timeliness and correctness, we now turn to course outcomes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;, we examine the pass, fail, and withdrawal rates in the course.&lt;/p&gt;

&lt;p&gt;Students at our institution tend to find this course challenging, and it is common to see 25–30% of students withdraw from the course or fail to achieve a grade that will let them progress on to subsequent courses.&lt;/p&gt;

&lt;p&gt;Success in the course is largely driven by success on the projects, and students may be withdrawing from the course based on early bad outcomes. So did milestones help to brighten this gloomy picture?&lt;/p&gt;

&lt;p&gt;Sadly, no.&lt;/p&gt;

&lt;p&gt;We first checked for differences in the frequency of the following course outcomes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Pass&lt;/em&gt;, where the student achieved a grade that let them move on in the major&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Fail&lt;/em&gt;, where the student completed the course, but would need to take it again before moving on&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Withdraw&lt;/em&gt;, where the student did not complete the course&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- [&lt;sup id=&apos;1-source&apos;&gt;1&lt;/sup&gt;](#1-sink) --&gt;

&lt;p&gt;We didn’t find any differences in these outcomes between the two semesters. This is apparent in the figure below.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;outcomes.png&quot; alt=&quot;Bar chart showing that pass, withdraw, failure rates were similar with and without milestones.&quot; /&gt;
  &lt;figcaption&gt;Milestones seem not to have affected course Pass, Fail, and Withdraw rates.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;, we explored the impact that milestones had on frequencies of final course grades, which were a composite of project performance, exam performance, and performance on mastery-based homework assignments. Differences in these frequencies could indicate the specific groups of students who were helped or not helped by the milestones intervention.&lt;/p&gt;

&lt;p&gt;We examined differences in the frequencies of &lt;em&gt;A&lt;/em&gt;, &lt;em&gt;B&lt;/em&gt;, &lt;em&gt;C&lt;/em&gt;, &lt;em&gt;D&lt;/em&gt;, and &lt;em&gt;F&lt;/em&gt; grades between the two semesters. Results are in the figure below.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;grades.png&quot; alt=&quot;A column chart showing percentages of A, B, C, D, and F grades in the two terms. There were more A grades and fewer B grades in the term with milestones than the term without. No changes in other grade frequencies are apparent.&quot; /&gt;
  &lt;figcaption&gt;Final course grades with and without milestones.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;More students received &lt;em&gt;A&lt;/em&gt; grades in the milestones semester (54%) than in the semester without milestones (34%). In contrast, fewer students received &lt;em&gt;B&lt;/em&gt; grades in the milestones semester (20%) than in the semester without milestones (38%). We found no other differences.&lt;/p&gt;

&lt;p&gt;Taken together, the results above suggest that the positive effects of the milestones were more pronounced for the students “in the middle”: many &lt;em&gt;B&lt;/em&gt;-level students became &lt;em&gt;A&lt;/em&gt;-level students, but unfortunately the &lt;em&gt;C&lt;/em&gt;-, &lt;em&gt;D&lt;/em&gt;-, and &lt;em&gt;F&lt;/em&gt;-level students continued to struggle in the course.&lt;/p&gt;

&lt;p&gt;It seems as though this intervention, while helpful, failed to assist the most vulnerable students in the course. Other supports and instructional changes are needed to help those students.&lt;/p&gt;

&lt;h2 id=&quot;what-did-students-think-of-the-milestones&quot;&gt;What did students think of the milestones?&lt;/h2&gt;
&lt;p&gt;We included this question in an informal end-of-term survey:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How helpful did you find the Milestones in completing your programming projects on time? Please explain why you gave this response.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;75% of students found the milestones to be Helpful or Very helpful. Students mentioned that milestones helped them avoid procrastination, encouraged them along the path to project completion, and helped them decompose the project.&lt;/p&gt;

&lt;p&gt;15% of students were Neutral about the milestones. These students indicated that they were already on track without the milestones.&lt;/p&gt;

&lt;p&gt;10% of students who found milestones to be Not helpful or Not at all helpful, and indicated that milestones were stressful and sometimes interfered with their existing project development plans.&lt;/p&gt;

&lt;p&gt;We interpret the above to mean that perceptions of the milestones were largely positive, though some students found them to be unnecessary or stressful.&lt;/p&gt;

&lt;p&gt;Note that this was just a single question in a survey — this is not a detailed qualitative analysis of students’ attitudes toward assigned project milestones.&lt;/p&gt;

&lt;p&gt;I’ve used milestones when teaching this course over the Summer session, and it may have been a blunder in that context. Summers tend to be intense, squeezing 15 weeks of material into 6 weeks of daily instruction. Month-long projects are 2-week projects. It’s hard to space out milestones appropriately in such a short timeframe (avoiding weekend deadlines, etc.). I had a student mention that they worked a job during the week, and did coursework on weekends. Milestones made this difficult.&lt;/p&gt;

&lt;h2 id=&quot;final-remarks&quot;&gt;Final Remarks&lt;/h2&gt;

&lt;p&gt;A possible criticism of this work is that the ability to decompose and tackle an un-scaffolded programming project is a core competency that students are expected to learn during intermediate programming courses, and they will no longer do so because “we did it for them”.&lt;/p&gt;

&lt;p&gt;Fundamentally, the problem with this is that we don’t really teach these skills at this stage in the curriculum. So we end up putting students through a “trial-by-fire” in these courses, and those who make it can continue on in the major. Ironically, these are the students who reach the later software engineering and capstone courses in which we do teach these skills.&lt;/p&gt;

&lt;p&gt;Milestones are by no means perfect, but we believe they help students (1) by making them practice a successful approach to large programming projects, and (2) by giving them the experience of successfully completing these projects, that they can then draw on in later courses. Effects of explicit milestones going into later courses is an open question.&lt;/p&gt;

&lt;p&gt;I am sure that this is not a unique practice.
But I haven’t seen this at other institutions I’ve been affiliated with, and the literature review didn’t turn up anything in the context of intermediate project development. If your courses use milestones or something similar, how’s it going for you?&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://doi.org/10.1145/2591062.2591159&quot;&gt;Radermacher, 2014&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://doi.apa.org/getdoi.cfm?doi=10.1037/0033-2909.133.1.65&quot;&gt;Steel, 2007&lt;/a&gt; &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://doi.wiley.com/10.1002/j.2168-9830.2001.tb00599.x&quot;&gt;Ponton, 2010&lt;/a&gt; &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:3:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;http://ieeexplore.ieee.org/document/7017768/&quot;&gt;Song, 2014&lt;/a&gt; &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Withdrawing is not always a bad thing; maybe they just didn’t want to learn the subject. But computing faces a retention crisis due a variety of external and internal factors, and a student in a third-year course probably did want to complete the course. So here, we treat it as a Bad Thing™. &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>Assessing Incremental Testing Practices and Their Impact on Project Outcomes</title>
    <link>https://ayaankazerouni.org/blog/assessing-incremental-testing/</link>
    <guid>https://ayaankazerouni.org/blog/assessing-incremental-testing/</guid>
    <pubDate>Tue, 07 Jul 2020</pubDate>
    <description>
      &lt;p&gt;&lt;small&gt;
&lt;em&gt;This article was originally posted on &lt;a href=&quot;https://ayaankazerouni.medium.com&quot;&gt;my Medium blog&lt;/a&gt; on July 7 2020.&lt;/em&gt;
&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a brief overview of the research paper “&lt;strong&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications#sigcse2019paper&quot;&gt;Assessing Incremental Testing Practices and Their Impact on Project Outcomes&lt;/a&gt;&lt;/strong&gt;”, published at SIGCSE 2019. My co-authors were &lt;a href=&quot;https://people.cs.vt.edu/~shaffer&quot;&gt;Cliff Shaffer&lt;/a&gt;, &lt;a href=&quot;https://people.cs.vt.edu/~edwards&quot;&gt;Steve Edwards&lt;/a&gt;, and &lt;a href=&quot;https://people.cs.vt.edu/~fservant&quot;&gt;Francisco Servant&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Software testing is the most common method of ensuring the correctness of software. As students work on relatively long-running software projects, we would like to know if they are engaging with testing consistently through the life-cycle. The long-term goal is to provide students with feedback about their testing habits as they work on projects.&lt;/p&gt;

&lt;p&gt;This post is aimed at computing educators, researchers, and engineers.&lt;/p&gt;

&lt;p&gt;We examined the programming effort applied by students during (unsupervised) programming sessions as they worked on projects, and measured the proportion of that effort that was devoted to writing tests. This measurement is useful because it lets us avoid the “test-first” or “test-last” dichotomy and allowed for varying styles and levels of engagement with testing over time. It can also be easily measured in real-time, facilitating automated and adaptive formative feedback.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;h3 id=&quot;goal&quot;&gt;Goal&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;To assess a student’s software testing, not just their software tests&lt;/li&gt;
  &lt;li&gt;To understand how various levels of engagement with testing relate to project outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;method&quot;&gt;Method&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Collect high-resolution project snapshot histories from consenting students’ IDEs and mine them for insight about their testing habits&lt;/li&gt;
  &lt;li&gt;Test the relationships between students’ testing habits and their eventual project correctness and test suite quality&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;findings&quot;&gt;Findings&lt;/h3&gt;
&lt;p&gt;Unsurprisingly, we found that when more of each session’s programming effort was devoted to testing, students produced solutions with higher correctness and test suites with higher condition coverage. We also found that project correctness was unrelated to whether students did their testing before or after writing the relevant solution code.&lt;/p&gt;

&lt;p&gt;Our findings suggest that the incremental nature of testing was more important than whether the student practiced “test-first” or “test-last” styles of development. The within-subjects nature of our experimental design hints that these relationships may be causal.&lt;/p&gt;

&lt;h2 id=&quot;motivation&quot;&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Students and new software engineering graduates often display poor testing ability and a disinclination to practice regular testing.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It is now common practice to require unit tests to be submitted along with project solutions. But it is unclear if students are writing these tests incrementally as they work toward a solution, or if they are following the less desirable “code a lot, test a little” style of development.&lt;/p&gt;

&lt;p&gt;Learning a skill like incremental testing requires practice, and practice should be accompanied by feedback to maximise skill acquisition. But we cannot produce feedback about practice without observing it. We conducted a study in our third-year Data Structures &amp;amp; Algorithms course to (1) measure students’ adherence to incremental test writing as they worked on large, complex programming projects, and (2) understand the impact that their test writing practices had on project outcomes.&lt;/p&gt;

&lt;p&gt;We focused on addressing two challenges to the pedagogy of software testing:
First, existing testing feedback tends to focus on product rather than process. That is, assessments tend to be driven by “post-mortem” measures like code coverage, all-pairs execution, or (rarely) mutation coverage achieved by students’ submissions. Students’ adherence to test-oriented development processes as they produce those submissions is largely ignored.&lt;/p&gt;

&lt;p&gt;We addressed this by measuring the balance of students’ test writing vs. solution writing activities as they worked on their projects. If we can reliably measure students’ engagement with testing as they work on projects, we can provide formative feedback to help keep them on track in the short term, and help them form incremental testing habits in the long term.&lt;/p&gt;

&lt;p&gt;Second, there is a lack of agreement on what constitutes effective testing process. Numerous researchers have presented (often conflicting&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; &lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;) evidence about the effectiveness of test-driven development (TDD) and incremental test-last (ITL) styles of development. But these findings may not generalise to students learning testing practices, and the conflicting evidence muddies the issue of what exactly we should teach or prescribe.
We addressed this by avoiding the “TDD or not” dichotomy. Students’ (and indeed, professionals’) engagement with testing does not stay consistent over time, either in kind or in volume &lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; &lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. Therefore, we didn’t attempt to classify student work as following TDD or not. Instead, we measured the extent to which they balanced their test writing and solution writing activities for increments of work over the course of their projects. This allowed us to more faithfully represent and study their varying levels of engagement with testing as they worked toward solutions.&lt;/p&gt;

&lt;h2 id=&quot;measuring-incremental-test-writing&quot;&gt;Measuring Incremental Test Writing&lt;/h2&gt;

&lt;h3 id=&quot;context-and-data-collection&quot;&gt;Context and data collection&lt;/h3&gt;
&lt;p&gt;Students in our context are working on software projects that are larger and more complex than what they have encountered in previous courses. Success usually necessitates adherence to disciplined software process, including time management and regular testing. We studied roughly 150 students working on 4 programming assignments over a semester (~3.5 month period).&lt;/p&gt;

&lt;p&gt;We used an &lt;a href=&quot;https://github.com/web-cat/eclipse-plugins-importer-exporter/tree/DevEventTrackerAddition&quot;&gt;Eclipse plugin&lt;/a&gt; to automatically collect frequent snapshots of students’ projects as they worked toward solutions. This snapshot history allowed us to paint a rich picture of a project’s evolution. In particular, it let us look at how the test code and solution code for a project emerged over time.&lt;/p&gt;

&lt;h3 id=&quot;proposed-measurements-of-testing-effort&quot;&gt;Proposed measurements of testing effort&lt;/h3&gt;
&lt;p&gt;Using these data, we measured the balance and sequence of students’ test writing effort with respect to their solution writing effort. I describe these measurements below.&lt;/p&gt;

&lt;p&gt;Consider the following figure, which shows an example sequence of developer activity created from synthetic data. Colours indicate methods in the project; solid and shaded blocks are solution and test code, respectively; and groups of blocks indicate work sessions.&lt;/p&gt;

&lt;figure&gt;
&lt;a href=&quot;./example-dev-activity.png&quot; target=&quot;_blank&quot;&gt;
  &lt;img class=&quot;invert&quot; src=&quot;example-dev-activity.png&quot; alt=&quot;Coloured bars organised into groups, demarcating time spent writing production code and test code, devoted to individual methods.&quot; /&gt;
&lt;/a&gt;
&lt;figcaption&gt;
An example sequence of developer activity (synthetic data).
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We can derive measurements of balance and sequence of testing with this synthetic data in mind.
The measures are summarised in the next figure.&lt;/p&gt;

&lt;p&gt;In terms of &lt;strong&gt;balance&lt;/strong&gt;, we considered testing effort in terms of &lt;em&gt;space&lt;/em&gt; (methods in the project), &lt;em&gt;time&lt;/em&gt; (work sessions), &lt;em&gt;both&lt;/em&gt;, or &lt;em&gt;neither&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Neither&lt;/strong&gt;: how much total testing took place over the course of the project and its lifecycle? (POB in the figure below)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Space only&lt;/strong&gt;: how much testing took place for each method in the project? (MOB)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time only&lt;/strong&gt;: how much testing took place during each work session? (PSB)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Both time and space&lt;/strong&gt;: how much testing took place for each method during each work session? (MSB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each measurement is a proportion, i.e., the proportion of all code — written in a work session or for a method or on the entire project — that was test code. So if a student wrote 100 LoC in a work session, and 20 of them were test code, the proportion for that work session would be 0.2.&lt;/p&gt;

&lt;p&gt;In terms of &lt;strong&gt;sequence&lt;/strong&gt;, we measured the extent to which students tended to write test code before finalising the solution code under test (MOS below).
This was measured as the proportion of test code devoted to a method that was written before the method was finalised (i.e., before it was changed for the last time).&lt;/p&gt;

&lt;p&gt;Note that this is different from measuring adherence to “TDD or not”.
Instead of classifying a student’s work (in a work session, or on a method, etc.) as strictly test-first or test-last, we measure this concept on a continuous scale.
This allows a more nuanced discussion of students’ tendencies to write test code earlier or later with respect to the solution code that is being tested.&lt;/p&gt;

&lt;p&gt;Measurements are depicted in the figure below. All measurements were aggregated as medians for each project.&lt;/p&gt;

&lt;figure&gt;
&lt;img class=&quot;invert&quot; src=&quot;metrics.png&quot; alt=&quot;Coloured bars depicting time spent writing and testing individual methods in a program. They are grouped in four different ways: grouped by time (ignoring the methods being focused on), grouped by method, grouped by method and time, and grouped by sequence.&quot; /&gt;
&lt;figcaption&gt;
Measurements to be derived from a programming activity stream. Each row depicts a different way of aggregating the events from the figure above.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;findings-1&quot;&gt;Findings&lt;/h2&gt;

&lt;p&gt;With these measurements in hand, we are able to examine students’ incremental testing practices and their impacts on project outcomes.&lt;/p&gt;

&lt;h3 id=&quot;to-what-extent-did-students-practice-incremental-testing&quot;&gt;To what extent did students practice incremental testing?&lt;/h3&gt;

&lt;p&gt;Using the measurements we described, we can make observations about how students distributed their testing effort as they worked on projects.&lt;/p&gt;

&lt;p&gt;The measurements are summarised in the figure below. The first four box-plots (in blue) represent measures of the balance of test writing effort. The fifth box-plot (in orange) represents proportion of test writing effort devoted before the relevant solution code was finalised.&lt;/p&gt;

&lt;figure&gt;
&lt;img class=&quot;invert&quot; src=&quot;boxplots-balance-sequence.png&quot; alt=&quot;Distributions of testing effort measurements.&quot; /&gt;
&lt;figcaption&gt;
Distributions of testing effort measurements described above.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Our findings were as follows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Balance of testing effort&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Students tended to devote about 25% of their total code writing effort to writing test code &lt;em&gt;(POB)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;Within individual work sessions, a majority of students devoted less than 20% of their coding effort to writing tests &lt;em&gt;(PSB)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;The median method seemed to received a considerable amount of testing effort (&lt;em&gt;MOB&lt;/em&gt;, &lt;em&gt;MSB&lt;/em&gt;), possibly attributable to the way we tied solution methods and test methods together &lt;sup id=&quot;fnref:6&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lower proportions of testing effort observed per work session, relative to the total project testing effort, suggests that some sessions tend to see more testing effort than others. Prior work suggests that this increased testing tends to take place toward the end of the project life-cycle, to satisfy condition coverage requirements imposed on students as part of the programming assignments.&lt;/p&gt;

&lt;p&gt;The lower proportions of testing effort observed per work session, relative to the total project testing effort, suggests that some sessions tend to see more testing effort than others. &lt;a href=&quot;https://ayaankazerouni.github.io/assets/publications/quantifying-incremental-development-procrastination.pdf&quot;&gt;Prior work&lt;/a&gt; suggests that this increased testing tends to take place toward the end of the project life-cycle, to satisfy condition coverage requirements imposed on students as part of the programming assignments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sequence of testing effort&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;In an overwhelming majority of submissions (85%), students tended to do their testing after the relevant solution methods were finalised (&lt;em&gt;MOS&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;how-did-project-outcomes-relate-to-the-balance-and-sequence-of-test-writing-activities&quot;&gt;How did project outcomes relate to the balance and sequence of test writing activities?&lt;/h3&gt;

&lt;p&gt;We measured the relationship between the measurements described above and two outcomes of interest:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Correctness&lt;/em&gt;, measured by an instructor-written oracle of reference tests&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Code coverage&lt;/em&gt;, measured as the condition coverage achieved by the student’s own test suite&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We used linear mixed-effects models, with the outcome of interest as a dependent variable and the testing measurements as the independent variables.
This allowed us to tease out the variance in project outcomes that was explained by traits inherent to individual students.&lt;/p&gt;

&lt;p&gt;We found that:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Students produced higher quality solutions and tests when they devoted a higher proportion of their programming effort in each session to writing tests&lt;/li&gt;
  &lt;li&gt;Whether this testing occurred before or after the relevant solution code was written was irrelevant to project correctness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also found a &lt;em&gt;negative&lt;/em&gt; relationship between doing more testing before finalising solution code and condition coverage scores.
We do not think this means that &lt;em&gt;testing first is bad&lt;/em&gt;—more likely this is an effect of students adding tests to nearly complete projects to drive up condition coverage, which made up part of their grade.
Incentives beget behaviours!&lt;/p&gt;

&lt;p&gt;Note that, after teasing out the variance explained by inherent variability in the students (conditional \(R^2\) in the paper), our measurements explained an ultimately small percentage of variance in project correctness and condition coverage (marginal \(R^2\) in the paper).
More variance in outcomes can possibly be explained by any number of unaccounted-for factors.
It is also possible that projects in the Data Structures course we studied didn’t “hit the right switches” in terms of depending on regular testing for success.&lt;/p&gt;

&lt;h2 id=&quot;conclusions&quot;&gt;Conclusions&lt;/h2&gt;

&lt;p&gt;Our findings largely support the conventional wisdom about the virtues of regular software testing.
We did not find support for the notion that writing tests first leads to better project outcomes.&lt;/p&gt;

&lt;p&gt;Traits or situations inherent to individual students are unlikely to have affected our results.
Students’ differing behaviours &lt;em&gt;and&lt;/em&gt; outcomes could both be symptoms of some other unknown factors (e.g., prior programming experience, differing demands on time).
Therefore, we used &lt;em&gt;within-subjects&lt;/em&gt; comparisons—i.e., assignments served as repeated measures for each student.
Each student’s work on a given project was compared to their own work on other projects, and differences in testing practices and project outcomes were observed.&lt;/p&gt;

&lt;p&gt;The primary contribution of this work is that we are able to measure a student’s adherence to these practices with some lead time before final project deadlines.
The short-term benefit of this is that we can provide feedback to students “before the damage is done”, i.e., before they face the consequences of poor testing practices that we have measured and observed.&lt;/p&gt;

&lt;p&gt;In the long-term, we think that formative feedback about testing, delivered as students work on projects, can help them to form disciplined test-oriented development habits.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/2445196.2445351&quot;&gt;Radermacher, 2013&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/7592412?casa_token=EairhmqPPOgAAAAA:ag2Z44va8LgKn-K5NhAhDLFyn-nmTRksrVGQTMvB2qftTlfS94O1FZZyClPDUvT8qM011tfC_ls&quot;&gt;Fucci, 2017&lt;/a&gt; &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/1159733.1159787&quot;&gt;Bhat, 2006&lt;/a&gt; &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://inventitech.com/assets/publications/2017_beller_gousios_panichella_amann_proksch_zaidman_developer_testing_in_the_ide_patterns_beliefs_and_behavior.pdf&quot;&gt;Beller, 2015&lt;/a&gt; &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;&lt;a href=&quot;https://inventitech.com/assets/publications/2017_beller_gousios_panichella_amann_proksch_zaidman_developer_testing_in_the_ide_patterns_beliefs_and_behavior.pdf&quot;&gt;Beller, 2015a&lt;/a&gt; &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Solution methods were tied to test methods if they were directly invoked in the test method. So whether or not an invoked method was the “focal method” of the test, it was treated as “being tested”. This could have inflated results for methods that were commonly used to set up test cases. &lt;a href=&quot;#fnref:6&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

    </description>
  </item>
  
  
  
  <item>
    <title>Developing Procrastination Feedback for Student Software Developers</title>
    <link>https://ayaankazerouni.org/blog/procrastination-feedback/</link>
    <guid>https://ayaankazerouni.org/blog/procrastination-feedback/</guid>
    <pubDate>Fri, 17 Apr 2020</pubDate>
    <description>
      &lt;p&gt;&lt;small&gt;
&lt;em&gt;This article originally appeared on &lt;a href=&quot;https://ayaankazerouni.medium.com&quot;&gt;my Medium blog&lt;/a&gt; on April 17, 2020.&lt;/em&gt;
&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a brief overview of the following research papers by myself, &lt;a href=&quot;https://people.cs.vt.edu/~edwards/&quot;&gt;Steve Edwards&lt;/a&gt;, and &lt;a href=&quot;https://people.cs.vt.edu/~shaffer/&quot;&gt;Cliff Shaffer&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications/iticse2017paper&quot;&gt;DevEventTracker: Tracking Development Events to Assess Incremental Development and Procrastination&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt; (with T. Simin Hall), published at ITiCSE 2017, and&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://ayaankazerouni.org/publications/icer2017paper&quot;&gt;Quantifying Incremental Development Practices and Their Relationship to Procrastination&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;, published at ICER 2017&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am summarising these papers together because they are closely related.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;We would like to determine the effectiveness of the time management practices displayed by students as they work on large and complex programming projects for the first time. We used qualitative data (obtained from interviews with students) and quantitative data (obtained using IDE logging infrastructure) to characterise their software development habits, and we analysed their relationships with project outcomes like correctness, total time taken, and the project’s early or late status.&lt;/p&gt;

&lt;p&gt;When students worked earlier and more often, they produced projects that:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;were more correct,&lt;/li&gt;
  &lt;li&gt;were completed earlier,&lt;/li&gt;
  &lt;li&gt;took no more or less time to complete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So working earlier and more often doesn’t seem to be giving the student more time to complete projects, just more &lt;em&gt;constructive&lt;/em&gt; time.&lt;/p&gt;

&lt;h2 id=&quot;motivation&quot;&gt;Motivation&lt;/h2&gt;

&lt;p&gt;Software development is a skill. Like any skill, it requires practice and feedback in order to develop. Ideally, this feedback should formative — delivered as students work on projects. However, in education contexts, assessments of software projects are driven by “after-the-fact” qualities like correctness, code coverage, code style, etc. In the papers listed above, my co-authors and I present methods to characterise students’ time management habits as they work on large and complex projects. The goal is to use this information to formulate formative feedback about their development practices.&lt;/p&gt;

&lt;h2 id=&quot;observing-the-development-process&quot;&gt;Observing the development process&lt;/h2&gt;

&lt;p&gt;To properly assess a ~30-hour programming process, we need to be able to observe it. We developed an Eclipse plugin that emits events for various in-IDE actions, including:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;executions&lt;/li&gt;
  &lt;li&gt;compilations&lt;/li&gt;
  &lt;li&gt;file saves&lt;/li&gt;
  &lt;li&gt;line-level edits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use these data to capture, characterise, and determine the effectiveness of the software development process undertaken by students. This process involved ingesting a large (ish) volume of data and turning it into an objective measurement of some aspect of the programming process (in this case, procrastination).&lt;/p&gt;

&lt;h2 id=&quot;when-do-students-work-on-software-projects&quot;&gt;When do students work on software projects?&lt;/h2&gt;

&lt;p&gt;We set out to quantitatively measure the extent to which &lt;strong&gt;procrastination&lt;/strong&gt; manifests as students work on software projects. We look at the work done by students as a distribution of work days, from the first day the student worked on the project until the last day, typically the day of the project deadline. The value for each work day is the amount of observable “work” that was put in on the project — the number of character code edits. The mean of this distribution gives us the “average day” on which students tended to work on the project. If we measure this in terms of &lt;em&gt;days until the deadline&lt;/em&gt;, then a higher number indicates that more work was done earlier, and a lower number indicates that more work was done closer to the deadline.&lt;/p&gt;

&lt;p&gt;As an example, consider the figure below, which shows how a real student distributed their work across the days on which they worked on a project.&lt;/p&gt;

&lt;figure&gt;
&lt;img class=&quot;invert&quot; src=&quot;tm-early-often.png&quot; width=&quot;700&quot; alt=&quot;Bars showing edit counts on each day leading up to a project deadline.&quot; /&gt;
&lt;figcaption&gt;
  The mean edit time for a student, drawn from real data.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;!-- A bar chart showing the amount of work put in by a student on each day from August 28 to September 14. --&gt;
&lt;p&gt;The red line on September 14 indicates the project deadline, and the black line on September 8 indicates the student’s “mean edit time”, which is 6 days before the deadline. A sizeable portion of work was done within the period of September 1 to September 8, and daily work was much higher during the last three days of the project lifecycle. This leads the mean edit time to be roughly in the middle of those time periods. The student’s score is therefore sensitive to not only the days on which was done, but also to the amount of work that was done on those days. Since this is simply a mean edit time, we can measure this with solution code, test code, or both.&lt;/p&gt;

&lt;p&gt;We might also have measured the median edit time (i.e., on what day was half the work done on a project?). However, we opted for the mean since it is more sensitive to outliers, which are important when measuring procrastination (e.g., large amounts of code being written toward the end of a project timeline).&lt;/p&gt;

&lt;p&gt;The figure below indicates distributions of the mean edit time for solution code and for test code, across all project implementations.&lt;/p&gt;

&lt;figure&gt;
&lt;img class=&quot;invert&quot; src=&quot;solution-test-early-often-dists.png&quot; alt=&quot;Two box-and-whisker plots which show the mean edit times for solution code and test code.&quot; /&gt;
&lt;figcaption&gt;
On average, students tended to write code fewer than 10 days before the project deadline.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;!-- On average, students tended to write code fewer than 10 days before the project deadline. --&gt;
&lt;p&gt;This figure tells us that students tended to work rather close to the deadline, even though they were given about 30 days to work on projects. Similar distributions of mean times were observed for solution code (\(\mu=8.48, \sigma=6.44\)), test code (\(\mu=7.78, \sigma=7.04\)), program executions (\(\mu=8.86, \sigma=8.82\)), and test executions (\(\mu=7.09, \sigma=7.10\)). Test editing and launching tends to occur slightly closer to the project deadline, but this difference appears to be negligible.&lt;/p&gt;

&lt;h2 id=&quot;how-valid-is-our-measurement&quot;&gt;How valid is our measurement?&lt;/h2&gt;

&lt;p&gt;The measurement described above is simple enough: it’s just a mean. Still, it is worth investigating whether it measures what we think it measures, i.e., the extent to which procrastination manifests on a software project. There is no readily-available “ground truth” against which one can test such a measurement. Therefore, we interviewed students in depth about their development experiences on two such assignments, and compared their responses with our measurements. Interviewees were given our measurements at the end of the interview, and we determined if they matched students’ expectations.&lt;/p&gt;

&lt;p&gt;In general, students felt that our measurements were accurate. Additionally, students believed that feedback driven by a measure such as this could help them stay on track on future programming projects. They stated unconditionally that they would make more of an effort to improve their programming practice if they were given feedback about their process between assignments.&lt;/p&gt;

&lt;h2 id=&quot;can-this-measurement-explain-differences-in-project-outcomes&quot;&gt;Can this measurement explain differences in project outcomes?&lt;/h2&gt;

&lt;p&gt;A primary thesis of these papers was that different software development habits can explain differences in software project outcomes for intermediate-to-advanced student software developers. With our measures and their qualitative evaluations in hand, we set out to quantitatively examine their relationships with the following project outcomes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Project correctness&lt;/strong&gt;, measured as the percentage of instructor-written reference tests passed,&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time of completion&lt;/strong&gt;, measured as the number of hours before the deadline the project was completed, and&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Total time spent&lt;/strong&gt;, measured by adding up the lengths of all work sessions spent on the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We used within-subjects comparisons to make inferences, allowing us to control for traits unique to individual students. Different students’ behaviours &lt;em&gt;and&lt;/em&gt; outcomes could be symptoms of some other unknown factor (e.g., differing course loads or prior experience), making such inferences weaker. To test for relationships with the outcome variables, we used an ANCOVA with repeated measures for each student. Students were subjects, and assignments served as repeated measures (with unequal variances), allowing within-subjects comparisons. In other words, each student’s software development habits were measured repeatedly (assignments), and differences in outcomes for the same student were analysed.&lt;/p&gt;

&lt;p&gt;Results are summarised below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When students worked earlier and more often, they tended to produce programs with higher correctness.&lt;/strong&gt; To illustrate this, we split the dataset roughly into half: those projects that had “solved” the assigned problem (53%), and those that had not (47%). The figure below shows the difference in edit mean times between these populations.&lt;/p&gt;

&lt;figure&gt;
&lt;img class=&quot;invert&quot; src=&quot;solution-early-often-by-solved.png&quot; alt=&quot;Two box-and-whisker plots showing the mean edit time for solved and unsolved projects.&quot; /&gt;
&lt;figcaption&gt;
  Comparison of solution edit times between projects that correctly solved an assignment, and those that did not.
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;When students worked earlier and more often, they tended to finish their projects earlier.&lt;/strong&gt; This is so intuitive, it’s almost tautological. It is encouraging that the measurement is able to discriminate between early and late project submissions.&lt;/p&gt;

&lt;figure&gt;
  &lt;img class=&quot;invert&quot; src=&quot;solution-early-often-by-on-time-status.png&quot; alt=&quot;Two box-and-whisker plots showing the mean edit time for late and on-time submissions.&quot; /&gt;
  &lt;figcaption&gt;
  Comparison of solution edit times between on-time and late submissions.
  &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Finally, &lt;strong&gt;there was no relationship between total amount of time spent on the project and the solution edit mean time.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;final-remarks&quot;&gt;Final Remarks&lt;/h2&gt;

&lt;p&gt;The important takeaway from these papers is not the revelation that &lt;em&gt;procrastination = bad&lt;/em&gt;. It is that we can reliably identify when procrastination is taking place on software projects. If we can do this during a project timeline, i.e., while the student is working on it, we may be able to intervene and help them adjust their programming behaviours before they face the consequences of procrastination.&lt;/p&gt;

&lt;hr /&gt;

    </description>
  </item>
  
  
</channel>
</rss>
