Lessons learned from group programming assignments

Lessons learned from group programming assignments

Posted on 2023-07-11


This semester (Summer 2023) I have been "piloting" using various resources with Replit and Canvas to enable group programming projects in my CS 134: Programming Fundamentals and CS 200: Concepts of Programming with C++, both with an asynchronous online modality.

The focus of having group work for exercises (basically, the smaller programming labs, I like to call them exercises to emphasize their practicing), was to mostly ensure they had peers to ask questions to and explore the topics with, as well as to see the code that others write, rather than learning all their programming in a vacuum.

Adjustments to exercise assignments

For these classes, I've expanded my previous exercises from a format of "program1, program2, program3, etc." to having 3 versions of each program - one for a "studentA", "studentB", and "studentC", where "program1" is the easiest program of the exercise, and each program gets a bit more challenging. Each student tackles the same problems, but in slightly different scenarios.

With these programming assignments, since each student has separate programs, they're scored only on their own work. Therefore, if their group is just a group of 2, or one student doesn't turn in their portion, they are not penalized for the "missing" part.


Program 1:
if statements
A)  Write a program that takes in two floats, points earned and total points, and calculates their % score. If their score is equal to 100%, then display "PERFECT" along with their score.
B)  Write a program that takes in two floats, a bank balance and a withdraw amount. Subtract the withdraw amount from the balance and display the resulting balance. If the balance is less than 0, then also display "OVERDRAWN".
C)  Write a program that takes in two floats, the amount of gas remaining and the total capacity of their tank. Calculate the remaining gas % and display it to the screen. If the remaining % is less than or equal to 10, then display "LOW FUEL".
Program 2:
if/else statements
A)  Have the user enter a number. If the number is greater than 0, display "POSITIVE". Else, display "NEGATIVE OR ZERO".
B)  Have the user enter a number. If the number is less than 0, display "NEGATIVE". Else, display "POSITIVE OR ZERO".
C)  Have the user enter a number. If the number is greater than or equal to 0, display "POSITIVE OR ZERO". Else, display "NEGATIVE".
Program 3:
if/else if/else statements
A)  Have the student enter their grade %. Use an if/else if/else statement to figure out if their grade is an A, B, C, D, or F and display the resulting grade to the screen.
B)  Have the user enter their battery %. Use an if/else if/else statement to draw a battery image ([****], [***_], [**__], etc.) based on the charge.
C)  Have the user enter their age. Use an if/else if/else statement to figure their ticket price. (A table is provided with ticket prices for age ranges.)
Program 4:
Logic operators
A)  Ask the user if they have a cat. Ask the user if they have a dog. If they have a cat AND they have a dog, display "You are very lucky!". Else if they have a cat OR have a dog, display "You have at least one pet!". Else, display "Oh, maybe a goldfish instead?"
B)  Ask the user if they have cake. Ask the user if they have candy. If they have cake AND candy, display "Double dessert night!". Else if they have a cake OR candy, display "Normal dessert tonight!". Else, display "Dessert is canceled."
C)  Ask the user if they speak Spanish. Ask the user if they speak Arabic. If they speak Spanish AND Arabic, display "You must speak a lot of languages!". Else if they speak Spanish or they speak Arabic, display "Wow! Bilingual?". Else, display "It's OK, maybe you can learn Esperanto!"

Using Canvas' grouping tools

This semester was my first semester using Canvas' grouping tools, and it will probably be my last semester using these tools. Instead in the Fall I will keep students out of a Canvas-defined "group" and manually account for groups. Here's what I've learned from using them this Summer:

  • Canvas does, indeed, have the ability to put students in groups, under the "People" section.
  • Canvas allows self sign-up to groups.
  • Canvas allows people to be added to groups with either "Split students by number of groups" or "Split number of students per group".
  • You can set assignments to be "group assignments", and either set grading to be 1 grade for the entire group, or "Assign Grades to Each Student Individually".
  • You can create a discussion board thread that becomes cloned for each student group.
  • Once a group set is created and students have turned in an assignment under that groupset, you can no longer change who is in what group.
  • If you want to modify who is in what group part-way through the semester, you need to create a new group set and reassign each student to a group. Then, you have to make sure your assignments use the new group set and not the old one.
  • If you have different groups set up (such as, for different exercises), you will have to create separate discussion boards for each assignment.

Using Replit's grouping tools

Similarly, this is also the first semester I've used Replit's grouping for assignments, whcih has also created some pain points.

  • Replit Teams allows you to create an assignment as a Group Project.
  • You can set up groups to be a certain max size.
  • You can automatically randomly assign students to groups.
  • You can allow self sign-up to groups.
  • You can view the history of each file to see who worked on what.
  • Once a Replit Teams assignment is created as either a Solo Project or a Group Project, you cannot change this. If you made a mistake, you'll have to delete the assignment and remake it as the other type.
  • As far as I can tell, there's no way to save premade groups for use across every assignment. I've had to manually set groups for every assignment, unless I allow self sign-up.
  • If you move a student from a group after work has begun it will delete that student's work; it won't keep their old version in the previous group.
  • If a student deletes a source file, Replit doesn't save a copy of that deleted file's history (as far as I can tell) - it only saves history for files that still exist.
  • There is no way to restore lost work.

My experience with groups this Summer

Overall, using these grouping tools for the first time has caused me so many headaches. I've had issues with:

  • A student doesn't read the assignment instructions and completes the "Student A", "Student B", and "Student C" parts, leaving their teammates with nothing to work on.
  • A student thinks the replit project is just theirs, so they delete the "Student B" and "Student C" code, either deleting their teammates' existing code, or leaving their teammates with no files to work on (and being confused).
  • Even given discussion boards and encouraging students to create an email chain, sometimes students wouldn't even discuss who is "A", "B", or "C" before getting to work on assignments.
  • Students often wouldn't mark which files they worked on in the comments, though specified in documentation. In Replit, I can view the history to see who worked on what, but it slowed down the grading process somewhat.
  • I had been hoping to have 6ish groups and hot-swap students out if they're inactive or in if their group is reduced to just 1 person, but given the way you have to create separate groups and separate discussion boards each time, Canvas did not allow me to structure things as such.

What I will change for Fall 2023

Now that I'm aware of these issues, if I use these grouping tools in the future, I make the following changes to my courses:

  • CANVAS: If I still use Canvas groups, I will create group sets for EACH EXERCISE, and have student self-select into these groups.
    Hopefully this will help with not having "MIA" students in groups not contributing anything.
  • REPLIT: If I still use Replit group assignments, I will encourage students to back up their work LOCALLY and not rely totally on Replit.
    Hopefully this will help students make sure their classmates (or confused teacher) don't inadvertantly delete their work.
  • REPLIT: Instead of having assignments be "group assignments" on Replit, I might have them be separate, then have students sync their files into one zip for turn-in.
    This way, they are encouraged to practice the work solo (and they can do the other Student parts if they want to), but are still talking to each other to figure things out and put their submission together.

Future lessons in grouping work...

As I continue using group exercises, I will continue updating this blog with additional findings.