{"id":1136,"date":"2010-03-29T17:04:40","date_gmt":"2010-03-29T22:04:40","guid":{"rendered":"http:\/\/mikeconley.ca\/blog\/?p=1136"},"modified":"2023-12-20T16:25:17","modified_gmt":"2023-12-20T21:25:17","slug":"teaching-peer-code-review-by-consensus","status":"publish","type":"post","link":"https:\/\/mikeconley.ca\/blog\/2010\/03\/29\/teaching-peer-code-review-by-consensus\/","title":{"rendered":"Teaching Peer Code Review By Consensus"},"content":{"rendered":"<p>I was really happy to see all of the response to <a href=\"http:\/\/mikeconley.ca\/blog\/2010\/03\/14\/lessons-from-peerscholar-an-approach-to-teaching-code-review\/\">my last blog post.<\/a> Lots of great ideas and suggestions.\u00a0 Thanks all!<\/p>\n<p>One of the problems that was brought up with my original idea for teaching code review was that it punishes students <em>twice<\/em> if they didn&#8217;t understand a programming concept.<\/p>\n<p>For example, if a student does not understand what <a href=\"http:\/\/en.wikipedia.org\/wiki\/Pipeline_(Unix)\">pipes<\/a> are for and how they work, they&#8217;re probably going to do pretty poorly on their pipes assignment in <a href=\"http:\/\/www.cdf.toronto.edu\/~csc209h\/winter\/\">a systems intro course<\/a>.\u00a0 So there&#8217;s one slam for the student.<\/p>\n<p>The second time is when they review their peer&#8217;s code.\u00a0 If they still don&#8217;t understand how pipes work, their reviews are going to be pretty trashy.\u00a0 And they&#8217;ll get a poor mark for that.\u00a0 And that&#8217;s the second slam.<\/p>\n<p>The problem here is that the students don&#8217;t get any feedback before they go into the peer review process.\u00a0 For the &#8220;weaker&#8221; students, this essentially means bringing a knife to a tank fight.<\/p>\n<p>So here&#8217;s an idea:<\/p>\n<ol>\n<li>After an assignment due date passes, and the students have submitted their code, the students are randomly placed into groups of 3 or 4.<\/li>\n<li>Each group is assigned a single random submission from the ones collected from the students<\/li>\n<li>Each student in their group individually, and privately, performs a review on their assigned submission.\u00a0 They fill out a rubric, make comments, etc.\u00a0 They are not allowed to interact with the other members of their group.<\/li>\n<li>After the students have finished their review, they can converse with their other group members.\u00a0 The group must produce another review &#8211; <em>but this one is by consensus<\/em>.\u00a0 They must work together to find the most appropriate mark.<\/li>\n<li>Finally, after the consensus reviews are in, the groups are disbanded.\u00a0 Students are then shown <em>their own code submissions<\/em>.\u00a0 They must do a final review on their own code by filling in the marking rubric.<\/li>\n<li>Student&#8217;s marks will be based on:\n<ol>\n<li>The mark that the TA gave them<\/li>\n<li>How closely their individual review of the group submission agrees with the TAs assessment<\/li>\n<li>How close the consensus review of the group submission agrees with the TAs assessment<\/li>\n<li>How close the review of their own code agrees with the TAs assessment<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>From my viewpoint, this model has several obvious strengths and weaknesses.<\/p>\n<p>One major strength is that, even if students do poorly in the coding portion of their assignment, they might still have an opportunity to make it up by learning from their peers during the group consensus review.\u00a0 They&#8217;ll also have an opportunity to demonstrate their new-found understanding by reviewing their own code, and admitting the shortcomings.<\/p>\n<p>A major weakness of the idea is the sheer organizational complexity.\u00a0 Did you see how many steps there are?\u00a0 That&#8217;s a lot of work.<\/p>\n<p>Plus, the model makes some pretty wild assumptions.\u00a0 A few off the top of my head:<\/p>\n<ul>\n<li>It assumes students can actually learn by performing peer review together, independent of what piece of code they&#8217;re reviewing<\/li>\n<li>It assumes students will actually reach a final consensus during the group review.\u00a0 What about bullies?\u00a0 What about timid folks?<\/li>\n<\/ul>\n<p>There are probably more that I&#8217;m not seeing yet.<\/p>\n<p>Anyhow, this was an idea I had a few days ago, and I just wanted to write it down.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was really happy to see all of the response to my last blog post. Lots of great ideas and suggestions.\u00a0 Thanks all! One of the problems that was brought up with my original idea for teaching code review was that it punishes students twice if they didn&#8217;t understand a programming concept. For example, if [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[454,626],"tags":[501,646,645],"class_list":["post-1136","post","type-post","status-publish","format-standard","hentry","category-code-reviews","category-research-computer-science-technology","tag-code-review","tag-consensus","tag-teaching"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/prmTy-ik","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/comments?post=1136"}],"version-history":[{"count":4,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1136\/revisions"}],"predecessor-version":[{"id":1140,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1136\/revisions\/1140"}],"wp:attachment":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/media?parent=1136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/categories?post=1136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/tags?post=1136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}