# How to teach something when your students have a high discrepancy of knowledge?

I'm going to do a course for my entire University, this means students that are in the last year and also in the first year. What can I do so what I teach isn't too hard to understand for the first year students and also isn't too basic for the last year students?

What I'm teaching is a complete web app stack

git => html/css/javascript => react


For some students (last year) html is basic and easy, but in the first year, many haven't learn it yet.

Is there some strategy or things I can do to make it more balanced for all students?

• see alse cseducators.stackexchange.com/q/2897/204 (you may be able to answer, or if not reconsider what you will be teaching). – ctrl-alt-delor Dec 14 '19 at 11:06
• Are there no practical prerequisites for the course (e.g., Intro to Web Development, or the like)? Just open to anyone whatsoever? – Daniel R. Collins Dec 17 '19 at 5:26

I don't know what options are open to you, so I'll hope you have a free hand. I certainly did as I got farther along in my career, but a newcomer might think this is risky. In fact it is well proven:

I'd suggest that you base much of the grading on the work of groups rather than individuals and I would flip the classroom. This gives you the advantage of observing the groups in almost all of their activities. The "material" and "content" of the course is obtained through readings and video, not through lectures. What happens when the students are face to face is that they work in groups to produce something, perhaps ultimately a web site in such a course as you have.

But this might not work if you scale is huge.

I think you should also create the teams yourself and assure a variety of levels and types of experience in each team. A simple questionnaire for each student on the first day can help you decide how to divide up the teams. The teams should be small, to enable simple communication, but probably at least four per team.

In such a course you also need to have the students do "peer evaluations", perhaps periodically. If you manage this well you can also achieve a fairly high degree of the better, more experienced students aiding the others. But to do peer evaluations successfully, it has to feel safe. It should be entirely positive based. In a group of five, I would ask students "Who were the two most helpful members of your group? Why? What was their contribution?"

You can modify the above to suit your course, and you can also tell the students that being seen by team mates as helpful will give a grading bonus. Don't ask students to evaluate everyone, but just to give positive comments when appropriate.

But you also need to employ "self evaluation" in any such scheme. "What was your own chief contribution to the team's work?"

The goal is to get a spirit of cooperation going, rather than competition. This means, of course, that you need to make it possible for everyone to get full marks. Therefore "grading on the curve" will ruin it, since it is a fundamentally competitive zero-sum situation.

In team based work, I also required teams to present their work to the class at the end of the course. I also required each teammate to participate in some way in the presentation. This was a bit hard on introverts, but it was a skill that they need to develop in any case if they are to have a career. Even if the career is outside CS.

Note that Peer Assessment is a wider topic than what I suggest here. I don't necessarily suggest all of that, but do suggest that peers focus on positive aspects only. This makes it "safer" and, I think, more honest. I once had to upgrade a student who I thought was slacking based on the fact that his teammates (who I knew were working hard) praised his contributions.

In other cases I would just simply advise against offering a course open to people with widely varied skill levels, because it forces you to basically scale it down to the lowest acceptable level. Normally, you would like to say "sign up for the course on Y only if you already know how to do X".

But in this case, knowledge of HTML(+++) is something that is just very unevenly distributed among students. It's fairly common for students to have picked it up on the side, or even before they went to university in the first place, but also entirely possible that they didn't, because academically it's not seen as all that "deep".

So I would say, make a modular course (Git, basic HTML, basic CSS, basic JS, some more advanced Git/HTML/CSS/JS, and finally getting to the main meal, React). For each module, you prepare content to teach it to people who haven't mastered that yet. But everyone can try to "test out" of a module at the start: if they can pass a small exam showing they already know that skill.

• If everyone passes, apparently you don't have to spend much time on that module, leaving you more time for advanced topics at the end of the course.
• If almost everyone passes, then you can focus on some remedial teaching for the few who didn't and get them up to speed with the rest. Since they're going to have to do this outside main hours, this works best if it's only a small group in absolute terms.
• If it's half-half, or only a few people passes the test, then you can allow the people passed to skip this module of the course, but perhaps do an alternative enrichment exercise.

Emphasize that it's completely non-judgmental; passing a test-out test or not has no impact on final grade. If you pass, you get an enrichment activity that's worth a modest amount of points. If you don't pass, you get the core training to help you pick up this necessary skill, which is worth the same modest amount of points.

The meat of the points for the course will be located in the last modules. After all, that's what the course is all about. The earlier modules are just to ensure everyone has the groundwork to be able to handle it.

To contrast my answer with that of Buffy and Ben I; mine would aim to reduce the difference in level between the best and worst, because you're focusing on a specific finishing point you want to reach. Theirs are more about making sure everyone learns as much as possible during the course, in the same general topic area.

Another option, in addition to Buffy's, is to create tiered assignments. Then students can either opt in to the level that they choose, or you can specify fully ("freshman must take option 1), or you can set certain parameters ("seniors must choose at least level 3 of this assignment for full credit.")

Grading should not be substantially more difficult as long as the tiers are closely related.

Also, as a word of warning: although it might feel intuitive to do so, do not fall into the trap of not offering full credit for lower tiers. What you will wind up with is students who are genuinely beginners attempting inappropriately hard work in order to try to obtain full credit, and possibly messing up to a considerable degree. Make your lowest tier according to what you feel like the lowest students should be doing, and then give them full credit for full work.