Tuesday, May 30, 2017

Cheating In Computer Science Class

An article about cheating in CS classes from the New York Times (As Computer Coding Classes Swell, So Does Cheating) has been all over my social networking feed this last weekend. Harvard’s famous CS50 is the big name example in the article. I wonder if this points to a problem we may be crating inadvertently. Are we creating an environment where taking a CS course is seen as the end product rather than actually learning computer science?

Has taking a CS course become the cool thing to the point where students without real interest in the subject take the course (or courses) more as a resume builder than as a real attempt at learning something valuable for the sake of using it?

The article points out that a CS class can involve a lot of work. This often leads to cheating in many subjects. After all the end goal of taking a class for many students is to get a good grade. Oh sure there are courses where a student may really be interested in the topic and wants to learn as much as possible. But there is only so much time in the day so if a few corners are cut for the sake of a good grade outside the student's real interests what’s the harm? (Or so the rationalization goes.)

My experience is that other students get very upset when their peers take shortcuts. It’s unfair if someone gets grades they don’t deserve. It makes me wonder if grades hurt more than they help. The same motivation seems to lead to cheating as often as it does hard work.

It’s actually somewhat more complicated in computer science though. There is a fine line between collaboration and helping ones peers and actually cheating. Where is the line to be drawn? Once in industry the motto I heard often was “steal from the best” and code reuse was touted as a very good thing. Of course one was always expected to really understand the code they reused. And one usually learned from it. A course is a shorter term thing though and one can sometimes borrow code without understanding it.

What is the answer to cheating? For some it is better detection of cheating and swift, firm, and noticeable punishment. An other option is projects that are more tuned to student interests. It can help if the student becomes more interested in completing the project and learning what they need to know to do so. But it is hard to come up with projects that motivate every student. Especially in a huge auditorium course like CS 50. High school teachers may have it easier there. BY degree at least.
Maybe part of the answer is less focus on grades. That’s hard though. High school students are told over and over again that good grades get them into a good university which will get them a good career. Not good learning – good grades. The words we use matter.

Clearly I don’t have a final answer. No teacher does and we have been dealing with this issue probably as long as we have had grades that matter. For now I find that semester projects of a student’s choice work best. They don’t eliminate cheating. But I think they reduce it. And that at least is a step in the right direction.

FWIW here is a contrasting view - https://thenextweb.com/dd/2017/05/30/lets-teach-computer-science-students-to-cheat/#.tnw_oaJUHJAM I reply to it at http://blog.acthompson.net/2017/05/news-flash-school-and-industry-are-not.html


Garth said...

And cheating in programming is so easy. The assignments are usually projects that are worked on out of class. There are usually a limited number of "good" solutions so copy someone elses code, change or insert some remarks and turn it in. Very hard to fight. In my small classes I can see where everyone is and what they are doing. Programming classes are such an artificial environment. I the programming world it is all collaborative and "stealing" code is the norm. "Don't reinvent the wheel, just modify it to fit." In large class I do not see any way to eliminate cheating except through the moral approach. And when it is an "A" vs a "C" morals have a tendency to lose out.

Mike Zamansky said...

While I do try to limit student cheating, I don't stress about it too much. In the long run, things generally come clean.

First, let's look at pure cheating (copying tests / projects).

If all CS classes are electives there, in theory, should be less cheating because the kids want to be there. If there are multiple levels of CS, if a kid cheats through an early level they probably won't take the more advanced ones since they won't know what they're doing (not always the case but probably frequently the case).

If there's a required class followed by electives, again, the cheater in the required class probably won't go on.

The kid might get a higher grade in that one class but over 4 years of high school a single grade doesn't make that much of an impact on the overall GPA.

More common in my experience is the "riding on the coattails of the other kids" cheating for project based work. If you're using a versioning system you can get some idea of who's contributing and when and that helps but sometimes, again, a kid slips through.

If you have a 3 person project and only 2 are working, either they have to shoulder the extra burden to produce a product worthy of 3 people or everyone gets a lower grade. Not infrequently this ends up in the workers turning in the slacker.

Doug said...

I suspect that the problem is worse at university/college with the larger classes and the lack of the professor knowing her/his students.

In secondary school, you tend to know students better and know that they'll develop their own "style". When all of a sudden, the results are written differently, you'll know.

In the classroom, you know more about the actual working habits of the students and you probably encourage collaboration so that the sharing of skills and knowledge is part of doing business.

In my classes, students didn't just hand in a final project. They had to run it on the computer in front of me and I would see their ability to do various things. I would have them use my own special data sets and often would ask them to modify the program in front of me. Both were good ways to determine whether they knew how the program actually worked. It still doesn't preclude the ol' copy/paste but if they understood how the program worked, that's the biggest takeaway.

Of course, all this goes away when you're teaching/learning online instead of the intimate classroom or if the class is so big that the instructor doesn't get to know the student writing footprint. I know that it breaks down to smaller numbers when you throw in TAs, but there still can be a disconnect.

I suppose that different problems/projects to cover the same concept divides the class into smaller groups and makes cheating more difficult.

Perhaps the ultimate answer would be a renewed look at pedagogy and assessment as it applies to Computer Science. Maybe this is a new task force for CSTA?

Jim Huggins said...

Oh, my goodness, so many possible directions to take this ... where to begin?

Is it a problem that we recruit students to "take a CS class" if they're not interested in CS? Phrased that way, perhaps, but then how do students really know if they're interested in CS? Popular images of CS (what few there are) don't necessarily capture the grandeur of the discipline; worse, they may project an image that certain types of people "don't belong". Creating a single exciting course may give the discipline a chance to reach out to those folks who might not be interested in CS today, but would be if given a proper chance.

What's the answer to cheating? Well, I don't think there's a single answer. All the things that have been discussed have a role. Better searching for academic dishonesty and punishment helps to make sure the playing field is level, at the cost of extra effort. De-emphasizing grades, to whatever extent that's even possible, reduces some of the stress that pushes students towards the decision to cheat ... but ultimately, every course has to have a grade. Better assignments reduce the opportunities for cheating, but at a severe cost of time and effort on the part of the instructor. Teaching students about ethical behavior and appealing to the "better angels" of their nature is the noblest approach, but may only work on some students.

And, ultimately, I think we all rely on the fact that cheating is often its own punishment. Students who cheat and don't get caught in my data structures class will pass, only to move on and get crushed in the next course which relies on the information. The true penalty for cheating is forfeiting the opportunity to learn the material.

Alfred Thompson said...

"The true penalty for cheating is forfeiting the opportunity to learn the material. " so much YES in this statement. We like to say that in the end students are really cheating themselves. They may not understand that at first but eventually, one hopes, they will.