The Challenge: 

In one week, build a tool of your choice in Python, using what you’ve learned this semester in CS112.


My Solution:

I created “The Groupinator,” a tool for classroom teachers, who want to easily and flexibly create student groups.  Note: I have not yet put this project on GitHub, please let me know if you’d like the code.




I believe that there are many ‘small and simple tasks’ that teachers must deal with frequently, which can be automated away.  This project targeted the task of making student groups.  As a former teacher, I used my experience to make a tool that I would have wanted.



The program has the following features:

  • Random groupings – students often complain when they have to work with someone they don’t like, and being random is a good way to avoid that argument.
  • Avoid conflicts – sometimes certain students just shouldn’t be together.  The tool makes it so teachers can input those interpersonal conflicts, to avoid the possibility that those students are grouped together.
  • Flexible ability-grouping – teachers like to make mixed-ability groups and like-ability groups.  In mixed-ability groups, students have the potential to teach and learn from each other.  Making mixed-ability groups is often best when the teacher is circling between groups.  In like-ability groups, students are on the same page, or alternatively, have a similar need.  Making like-ability groups is often best when the teacher can devote his or her time to that group, to teach them something they all need.  In the program, this is achieved by calculating the standard deviation (SD) of a statistic like ‘math score’ for a group, removing the last student if the SD is too low, and adding the next student in the list.
  • Specify # students in a group – in this implementation, teachers can choose between having 2, 3 or 4 students per group.



This program uses the following:

  • modular programming and commenting
  • coding paradigms: imperative and object-oriented programming
  • backtracking algorithm
  • test cases



Whenever I can, I would like to pursue this project further by:

a) try more test cases

b) code a sliding scale that teachers can use to specify their desired level of  mixed-abilities group-ness

c) user test with teachers, and iterate

d) make the program publicly available, and promote it

e) seek out other ‘small and simple tasks’ that can be automated with programming


Time: 1 week

Role: Programming

Tools: Python