Answers.Body: <p>Personally if I was including a Parsons problem in an assessment I think I would grade it on the number of lines the student got in the correct place. For example, if you had a program in which 6 lines of code made up the correct solution you could award a mark for getting the first 2 lines in the correct place, then another for the next 2 and finally a mark for the last 2 for a total of 3 marks. Alternatively, if you wanted to make it easier for students to access some marks you could give a mark for each line for a total of 6. The route you take will depend on your students.</p>
  <p>For students that make errors, you just look to see if they put any lines in the right place and award marks as appropriate.</p>
  <p>Here is a practical example I did with my students earlier this year:</p>
  <pre><code>pw = &quot;1234&quot;
  correct = False
  attempts = 0
  while not correct and attempts &lt; 3:
      password = input(&quot;Enter your password&quot;)
      if password == pw:
          print(&quot;Password accepted&quot;)
          correct = True
      else:
          print(&quot;Incorrect password&quot;)
          attempts += 1
  </code></pre>
  <p>A possible mark scheme for this problem could be:</p>
  <ul>
  <li>Initialise variables in the correct place = 1 point</li>
  <li>Variable initialisation is followed by the while loop = 1 point</li>
  <li>Input is taken from the user within the while loop before the if/else structure = 1 point</li>
  <li>If/else structure is correct and follows the user input within
  the while loop = 1 point</li>
  </ul>
  <p>You could increase the number of points for the question if you wanted by, for example, giving one for each variable initialisation or one for the if part of the if/else and one for the else part.</p>
  <p>In this problem I didn't include any distractor lines because of the difficulty of problem I wanted to create for my students who were new to iteration. But you could do the same thing whilst including distractor lines.</p>
  <p>I hope this is useful.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-07-29T14:20:21.423Z
Answers.LastActivityDate: 2021-07-29T14:20:21.423Z
Answers.UserDisplayName: Robert Nixon
Body: <p>I am creating an exam, and I would like to try to incorporate a few <a href="https://cseducators.stackexchange.com/questions/302/effectiveness-of-parsons-problems">Parsons Problems</a>.  I am beginning to wonder if this is reasonably possible.</p>
  <p>The advantages are (1) it allows struggling students to demonstrate some of their understanding, (2) it is potentially easy to grade.</p>
  <p>My question is with regards to that second item.  How could one grade a question like this:</p>
  <blockquote>
  <p>What ordering of these lines would create a program that swaps the first number and last number in array <code>fst</code>?  Not every line given will necessarily need to be used.</p>
  <pre><code>a. fst[fst.length-1] = temp;
  b. int temp = fst[0];
  c. int temp2 = fst[fst.length];
  d. fst[0] = fst[fst.length-1];
  e. fst[fst.length] = fst[0];
  f. fst[0] = temp2; 
  </code></pre>
  </blockquote>
  <p>There are a number of possible errors that students could make, and only two completely correct responses.</p>
  <p>They could:</p>
  <ol>
  <li>Misorder lines</li>
  <li>Include distractor lines</li>
  <li>Not include needed lines</li>
  </ol>
  <p>So, how would one award a score to such a problem?  I want to devise something at least somewhat fair, and I am having trouble seeing how to award credit when there are various errors.</p>
  <p><sub>(NOTE: I am aware that there are richer, more meaningful ways to deeply assess student understanding.  I would love to grade everything by code reviews and write-ups, but the reality of my current work situation would make this absolutely impossible. I need ways to assess, even imperfectly, some amount of student understanding in a time-efficient way.  I must pick and choose what I assess deeply.  I am aware that any grading rubric will be imperfect.  What I wish to do is <em>the best I reasonably can.</em>)</sub></p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-02-17T17:04:13.007Z
Comments.Text: (a) looks like a syntax error/typo, and without a proper (a) the problem is not a solvable.
Comments.UserDisplayName: Erik Eidt
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-02-17T23:56:51.803Z
Comments.Text: @ErikEidt Thank you for catching that!
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-02-18T20:09:58.250Z
Comments.Text: I'm worried that anyone with any form of dyslexia will be disadvantaged by such problems. Should I be?
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-02-18T22:10:36.727Z
Comments.Text: @Buffy They are meant to decrease cognitive load, and there is certainly research to that effect.  It could be that dyslexic individuals would have comparatively *less* advantage, but I would be quite surprised if the activity is purely harder than "code this method" for anyone.
Comments.UserDisplayName: Ben I.
Tags: <grading>
Title: How should Parsons Problems be graded?
ThreadText: # How should Parsons Problems be graded?
  
  (Asked by: username_0 on 2021-02-17)
  
  I am creating an exam, and I would like to try to incorporate a few [Parsons Problems](https://cseducators.stackexchange.com/questions/302/effectiveness-of-parsons-problems). I am beginning to wonder if this is reasonably possible.
  
  The advantages are (1) it allows struggling students to demonstrate some of their understanding, (2) it is potentially easy to grade.
  
  My question is with regards to that second item. How could one grade a question like this:
  
  > What ordering of these lines would create a program that swaps the first number and last number in array `fst`? Not every line given will necessarily need to be used.
  >
  > ```
  > a. fst[fst.length-1] = temp;
  > b. int temp = fst[0];
  > c. int temp2 = fst[fst.length];
  > d. fst[0] = fst[fst.length-1];
  > e. fst[fst.length] = fst[0];
  > f. fst[0] = temp2; 
  >
  > ```
  
  There are a number of possible errors that students could make, and only two completely correct responses.
  
  They could:
  
  1. Misorder lines
  2. Include distractor lines
  3. Not include needed lines
  
  So, how would one award a score to such a problem? I want to devise something at least somewhat fair, and I am having trouble seeing how to award credit when there are various errors.
  
  (NOTE: I am aware that there are richer, more meaningful ways to deeply assess student understanding. I would love to grade everything by code reviews and write-ups, but the reality of my current work situation would make this absolutely impossible. I need ways to assess, even imperfectly, some amount of student understanding in a time-efficient way. I must pick and choose what I assess deeply. I am aware that any grading rubric will be imperfect. What I wish to do is *the best I reasonably can.*)
  
  **Tags:** grading
  
  > **Comments:**
  > **username_1**: (a) looks like a syntax error/typo, and without a proper (a) the problem is not a solvable.  
  > **username_0**: @username_1 Thank you for catching that!  
  > **username_2**: I'm worried that anyone with any form of dyslexia will be disadvantaged by such problems. Should I be?  
  > **username_0**: @username_2 They are meant to decrease cognitive load, and there is certainly research to that effect.  It could be that dyslexic individuals would have comparatively *less* advantage, but I would be quite surprised if the activity is purely harder than "code this method" for anyone.  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_3 on 2021-07-29. Score: 1
  
  Personally if I was including a Parsons problem in an assessment I think I would grade it on the number of lines the student got in the correct place. For example, if you had a program in which 6 lines of code made up the correct solution you could award a mark for getting the first 2 lines in the correct place, then another for the next 2 and finally a mark for the last 2 for a total of 3 marks. Alternatively, if you wanted to make it easier for students to access some marks you could give a mark for each line for a total of 6. The route you take will depend on your students.
  
  For students that make errors, you just look to see if they put any lines in the right place and award marks as appropriate.
  
  Here is a practical example I did with my students earlier this year:
  
  ```
  pw = "1234"
  correct = False
  attempts = 0
  while not correct and attempts < 3:
      password = input("Enter your password")
      if password == pw:
          print("Password accepted")
          correct = True
      else:
          print("Incorrect password")
          attempts += 1
  
  ```
  
  A possible mark scheme for this problem could be:
  
  * Initialise variables in the correct place = 1 point
  * Variable initialisation is followed by the while loop = 1 point
  * Input is taken from the user within the while loop before the if/else structure = 1 point
  * If/else structure is correct and follows the user input within
    the while loop = 1 point
  
  You could increase the number of points for the question if you wanted by, for example, giving one for each variable initialisation or one for the if part of the if/else and one for the else part.
  
  In this problem I didn't include any distractor lines because of the difficulty of problem I wanted to create for my students who were new to iteration. But you could do the same thing whilst including distractor lines.
  
  I hope this is useful.
  
  
  ---
  
  