# Splitting the students by abilities

Disclaimer: This question will use as an example a computer-science university program, because it is much easier for me to describe and give some statistics, but it applies to math as well. The reason I posted it here is that talent (i.e. mathematical gift) plays a much greater role in thinking-heavy areas than in, for example, biology or history.

Context:

The university welcomes all kinds of students with varying degree of mathematical/programming ability. They are split into groups of 15 (approximately), however, to teach the beginners programming and to keep the experienced engaged, each such group might be "imperative" (beginners learn some standard programming language) or "functional" (those who could code before learn some functional language). There is a test of their programming skill and then students are assigned accordingly to the results (if student wishes and there are no obstacles, he may apply for a change; in the past there was no test and the students could pick the group type as they wished).

Summarizing: there are several "imperative" groups which contain mostly beginners and a few "functional" groups which include students that could code before. It is worth noting that the majority of the gifted students would usually participate in programming contests in high school, while the average and below-average students almost always can't code (even if they know the syntax, the test is too hard for them).

This works quite well: with such a split the beginners learn the basics, while students from "functional" groups are engaged because of the more advanced topics.

This works quite well, until the exams. The groups motivate/demotivate themselves internally and in result mediocre students from the "functional" groups have learned a way more than the good from the "imperative" groups. It wouldn't be a big problem, because the results between "functional" and "imperative" groups are incomparable - the tests are of incomparable difficulty, hence are graded separately.

However, as the schedules are inter-dependent, the groups formed there are kept also for other courses, i.e. these which didn't plan for a split at all. Again, groups motivate themselves internally (and also teachers are more engaged with brighter students), but this time all the students are graded according to the same key. The gap in performance is disastrous: the average score for the first group might be easily over $80\%$, while the average for the rest can be as low as $25\%$. Such results have impact on their learning, motivation and many other things, but most importantly, a big part that would attend the "imperative" would fail their exams and sometimes even drop out.

One could think that splitting the students by abilities is just a bad solution. On the other hand, their knowledge and experience varies so much that it would be impossible to keep all the parties interested. For example, this happens for electable courses, where the groups mix together, and pose a serious challenge for the teachers. It is so inconvenient that professors happen to make their optional classes intentionally very hard or very easy (the funny part is that it even feels natural, because those courses are in majority theoretical and practical respectively).

I'm sure that it's not a healthy state of affairs, but this is a hard problem and might lack a general solution. Also, there is the whole topic of sliding scale between teaching all something and teaching some everything, but that's out of scope of this question.

Question: Is there a way to avoid the negative effects of the split, in particular effects of good students from "imperative" groups averaging down and poor students from "functional" groups averaging up?

• What are the other courses that the students are grouped together in? Are they data structures courses? Discrete math? I think the answer varies based on the course. – adamblan Mar 15 '14 at 16:15
• @adamblan Generally it's discrete math and set theory. About a third or fourth part of the "functional" groups people pursue double degree, so the have analysis and linear algebra with math year (and so these groups are mixed). – dtldarek Mar 15 '14 at 16:24
• Awesome. Then, I'll take a shot at answering your question---I just tried to deal with this problem at CMU. I don't claim to have a full answer, but I can tell you what I tried and how well it worked out! – adamblan Mar 15 '14 at 16:26
• Done. It turned out a little more generic than I thought it would, but these are all things I've tried. I'd say group work was the most successful, and the extra credit was the most unpredictable. – adamblan Mar 15 '14 at 16:42

As per the comments above, I'm going to tackle this explicitly for discrete math and set theory being a shared course. What follows is some strategies I've tried and how well they worked (or didn't work!).

Group Work. Asking the students to do group work (either in class or on the homework), and assigning groups can really help this issue. Imagine that you ensure the groups are mixed between the less experienced and more experienced groups; so, you force the students to get to know others. A couple things happen when you do this. The first is that they realize even if they're different skill levels at programming, they share other interests, and you can often foster friendships between the groups which helps a lot. The second is that if you explicitly reward the experienced students who guide and help the unexperienced ones, and reward the unexperienced students who ask questions, you really do close the gap somewhat.

Varied Difficulty on the Homework. You can write homeworks where the students don't have to complete every question. Instead, they can complete several more rudimentary questions or one difficult one. This helps the weaker students get better at the basics, and it keeps the stronger ones from getting bored. If you were really brave, you could try doing something like this on the exams, but I'd suspect you'd end up with most students doing the easy questions to maximize their score.

Extra Credit. Extra credit is another way of keeping the interest of the stronger students without helping the weaker ones. I have often give difficult problems (with no credit whatsoever) and the interested students would come to me to talk about them. One way I implemented this that I think worked really well was that the "participation" part of your grade could be achieved by coming to office hours to talk about slightly more advanced topics. I found a mix of very weak and very strong students were all interested. Either way, you keep everyone's interest (and it gives you a chance to help the weaker students who normally wouldn't come to office hours!)

Language Agnostic Teaching. I'm not sure if you do any programming (or use any programming analogies) in your course, but I've found using a sort of pseudocode that is similar (but not identical!) to what the weaker students are learning to be very useful. They still need to integrate the concepts from the discrete math/set theory course(s), but it's at least somewhat familiar to them. I avoid explicitly using a language that one group knows, so that from their perspective, it looks like an even playing field.

Ultimately, if it's clear to the students that there's the "advanced" group and the "not-so-advanced" group, it makes it really difficult; so, I do my best to not call explicit attention to the discrepancy as much as humanly possible.

If you are not going to formally split the classes (with different exams, class names, etc.), I would advise just teaching to the basic level. [But I like Adam's idea to add ungraded extra hard problems for the students who just elect to do that for edification and enjoyment.] There is also nothing wrong with just letting the advanced kids know that this will be a bit easier for them, don't goof off and let down though as there is new content later, and maybe put some of the time they are saving from course X being easy into their other classes that need help more. If the students are really advanced advise them to take a final exam to validate the class and move on.