I saw a question about how to deal with high performing students, and although I think it is very important, the problem that we are facing in my school is the exact opposite.

We have a high number of ghost students (approx. 25%) and also a large number of students dropping or failing in a second year OOP Java class (approx. 50%).

Most of the dropping/failing students have passed CS1 (intro to programming with C) and CS2 (data structures with C). The problem is that they passed with a low grade (10 or 11 in a 0-20 scale) and in some cases, they are enrolling in the OOP class for the 5th or 6th time and have had CS1 and CS2 a long time ago. The main issue is that they've forgotten the most basic programming concepts, and each year it is getting worse.

What should the teacher do?

  1. assume that the students know the basis and just keep on moving forward. (knowing in advance that most will fail)
  2. reserve the first weeks to recap the “forgotten concepts”.
  3. Advise the students to enroll in CS1/CS2 again.

Anyone else has this problem? What have you done? Did it work?

  • $\begingroup$ Great question! I edited out introductory-programming because we are working to replace it with a more accurate tag. See meta for a full discussion of the effort. $\endgroup$ – Peter Jun 21 '17 at 22:03
  • 2
    $\begingroup$ What are "ghost students"? I could recommend an exorcist. :) $\endgroup$ – Ben I. Jun 21 '17 at 22:56
  • 1
    $\begingroup$ "Ghost students", are those that you know that exist, but have never actually seen them on classes... :) $\endgroup$ – Nuno Gil Fonseca Jun 22 '17 at 13:26
  • $\begingroup$ +1 for the question. Finding this eliminated the need to post the exact same question myself (at a large U.S. community college). $\endgroup$ – Daniel R. Collins Dec 23 '19 at 4:46
  • $\begingroup$ Does credit not expire in your setting? Where I'm from, any passing grade from a class is set to expire after 3 years (unless you pass a re-test), which mostly prevents these issues. $\endgroup$ – Flater Dec 30 '19 at 10:42

One elegant way to deal with this sort of problem (though it does take a lot of work) is to create a self-explanatory review packet (including a practice quiz!), give it out on day one, and promise that there will be a quiz on its contents during the second week of class.

You then don't need to spend another minute on the material in class, at least for that first week. (Especially for that first week. They should not feel hand-held at first! See below...) You might want to make help available during office hours, however.

This has a second benefit, which is that you can set a recommendation for withdrawal from the class. I would give this a soft sell: "if you can't achieve an 80% on this quiz, then the kindest thing I can do is to recommend that you drop the class. It's not to be mean, but you WILL NOT have a good time here if you haven't reasonably mastered these concepts."

By putting the onus of weeding poorly performing students back on the students themselves, you will (hopefully!) find that you get very little resistance. And folks who choose to stay on anyway will be making an active choice to work very hard going forward (or suffer the consequences).

The big brunt of the work need only be done one time; the review packet and the practice quiz can be the same every semester. It is only the quiz itself that need be changed.

While this should weed out some of the lowest performers (and give many others a much-needed review), if the students are as low-performing as you say, it might not hurt to touch on some of the harder concepts that people get stuck on when you come to them again in the class.

Hopefully you'll have much better performance in the course going forward. Best of luck!

  • 3
    $\begingroup$ Ben, I understand what you have said. The main problem is that this specific class is not optional. To graduate they will have to pass one day. A few minutes ago I had a code review with one of those students (in a server-side dev class using PHP). The student is entirely unable to understand even the smaller concepts. He has just made a couple of Inserts on a few tables, but even that code was provided by me in the classes a few years ago. My question is: should you tell a student that s/he is not fitted for this and s/he is just spending money? :( $\endgroup$ – Nuno Gil Fonseca Jun 22 '17 at 13:34
  • $\begingroup$ I don't believe there are people who can't get the first couple of CS courses. That being said, some people take longer to get it and some require different ways of having things explained to them. $\endgroup$ – Alfred Thompson Jun 22 '17 at 15:48
  • 1
    $\begingroup$ @NunoGilFonseca I agree with Alfred Thompson. If the course is required, then it falls onto the instructor to create a path that the student can follow in order to be successful. That path does not have to involve relaxing the standards they have to meet, and it can be difficult, but it must exist. Give them a reasonable list of resources and hoops (ie. not "read these 3 books"), and just make the standards and your recommendations for how to meet them know. It is our job to help the students get to where they need to be from where they are, not from where we wish they were. $\endgroup$ – Ben I. Jun 22 '17 at 15:54
  • 3
    $\begingroup$ @NunoGilFonseca no class is actually mandatory, because your major isn't mandatory. I have tutored people, even smart people, that were not able to conceptualize comp sci principles and, for all they could squeeze by with barely passing grades in early classes, were simply not suited as programmers. If someone is graduating a course with so little retention it's possible that they fit in that category of students that will never feel natural in CS no matter how hard they try. It is better to recognize that now when there is still time to pursue another major then 2 years later. $\endgroup$ – dsollen Jun 26 '17 at 18:04
  • $\begingroup$ I found this because I was about to post a basically identical question myself. I'm in the same situation as the OP (including basically same percentage stats I was going to post), at a U.S. community college. Unfortunately: All of the suggestions given here are things I've tried (for years!) and none of them make any difference at all. Students simply ignore the first-day review, packets, labs, quizzes, requests for one-on-one meetings, recommended cutoffs to withdraw, etc. They just keep coming with defeated looks on their faces, silently, day after day, semester after semester. $\endgroup$ – Daniel R. Collins Dec 23 '19 at 4:43

I face the same issue every year. In France where I teach, University is basically free and, in some bachelor curricula you can repeat the year and re-enrol in courses you have not validated as much as you like (almost). At some point, there is little that the teacher can do.

  • Allocating say the first lecture and first lab to rehash the basics works for some students (those who are willing to get better). Actually grading this first lab might be an incentive to have the student work on it.
  • Asking them to re-enrol in a prerequisite course does not work so well since it means that it increases the workload and they only touch the interesting concepts at the end of the semester, and mean while they continue to fail in your course.
  • In some cases, I have seen students genuinely becoming better when they are paired with a good student and that the latter actually takes the time to explain what's going on, like a private tutor. But that is more a result of the guidance of the good student than something the teacher does, and I think a teacher should not expect a good student to act as a tutor. But favouring this kind of pairing (by making it explicit in the grading that a student "helping" another one may get a bonus) could work. Such grading say for a project needs to be devised carefully though.

Ultimately, this is something that needs to be addressed at the level of the degree itself, for all courses. For any course, 10/20 (or whatever passing grade) should only mean, this student actually knows the bare minimum to enrol in next years courses. This needs to be a curriculum-wide decision. But it can be hard in some countries since often courses are aggregated in "blocks" and you can pass as long as the average on a block is a passing grade (while you may very well have failed a course in the block). At his/her level, the only thing a teacher can do is to be stricter and rather fail borderline students than pass them (so as to not send these "sure to fail" students to more advanced courses yet).


I noticed that most of the answers focus on the things (topics, lectures, etc.) I have found that it is helpful to focus on the students. I normally ask them for a one-on-one chat and ask them why are they here? What do they like / not like about CS? This normally opens an opportunity for making their experience more engaging for them. It also identifies those that really want to succeed, and those that don't. In my experience the students that end up dropping out are the ones that actually want to (or don't really care). It's worth knowing who really does want to succeed, and who doesn't.


I do tend to review some basic topics at the start of a semester to get a handle on what students have forgotten or never learned completely. After that I don't use class time as I expect students to make some efforts on their own. I teach high school so I may handhold a bit more than a university professor. In my case that means I schedule time for helping students during their free periods or before or after school.

Additional resources, especially for review topics, are often helpful. I don't think that written resources work for everyone. I record a lot of the presentations I give for early topics and make them available for students. Lately I am trying to find videos by other people who, I hope, explain things differently than I do in hopes of reaching different students.

An other option is to use peer tutors to help struggling students. Often peers who already understand a topic can make it understandable in ways that would not occur to me.


You can provide some sort of anonymous public feedback channel with which students can communicate with you and their classmates. A wiki works well for this. You can get information that a student may not be willing to share face to face. You can ask questions yourself on this channel to prompt useful responses.

While this sounds risky, it really isn't. If a student vents, his/her classmates will probably correct the record. But a shy/underperforming student may feel empowered by having such an option.

It needs to be both public and anonymous, however. If it isn't public you might get only the venting and not a more complete picture. If it isn't anonymous you won't learn some important things, though it is also useful for students asking for clarification of points made in class.

I used this successfully over several years.

  • 1
    $\begingroup$ Your mileage with this technique may vary depending on your student population. I recall a blog post by a professor who had switched universities, and lamented that his ratemyprofessor comments completely changed in nature. He ran some language analytics across the entirety of both universities on that site, eventually coming to the conclusion that the feedback given at an institution says as much about the students themselves as it does about the teachers. $\endgroup$ – Ben I. Jun 24 '17 at 21:37

I know that this might not be the answer that you're looking for but I have been a software engineer for over 20 years and I feel that coding and software engineering is just simply not for everyone. I believe that it takes a certain mindset and interest to grasp and pursue coding and software, and this is more true the more sophisticated the topic.

This is not to say that software engineers individually or as a group are smarter than other people, which I don't think is true either. My wife has a master's degree in a non-technical field (I myself have only a BS in CS), and when I try to describe what I do at work her eyes just glaze over. She will sometimes watch over my shoulders as I'm working and all she says is, "wow your job is really tedious!". This is just how it seems to her.

I know countless people in the industry who started out as developers and did it for a year or two even though they did not like it, and later moved on into other related positions such as project manager, trainer, technical writer, etc. Doing hard core problem solving 5-10 hours a day dealing with things that are only in your mind and don't exist in the real world isn't something that everyone can relate to.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.