Not that kind of cheating.

Cheating on homework assignments is a fact of life among UCLA CS undergraduates. Many students make the unethical but understandable decision to cheat — after all, each of our future careers is at stake.

Google Search suggestions for “ucla github”. Old assignments for project-based classes are readily available.

This rampant cheating has detrimental side effects. Grades lose their function as a meaningful signal of ability and effort, and function instead as indicators of willingness to cheat. Furthermore, homework is often the most practically educational part of UCLA’s CS curriculum, and when students cheat on it, we miss out on opportunities to develop programming skills.

As a result, the UCLA administration should take action to reduce the prevalence of cheating. While they have attempted to do so in the past, their actions are based on a misguided model of why students cheat.

I: Everything Is Horribly Broken

To understand the cheating problem, you first have to understand that UCLA CS undergrads face a broken incentive structure which practically ensures that cheating will occur. Unfortunately, UCLA CS administrators do not understand the problem, so their attempts to solve it have been useless at best.

Why Administrators Think Students Cheat:

Based on the communications I’ve received from administrators, I think they hold an extremely simplified and totally incorrect model of why students cheat. Something like:

Students cheat because they don’t want to put in the hard work required to actually learn the material. They want a grade that doesn’t reflect the fact that they are less hardworking and intelligent then their classmates.

That model may accurately describe some students. If cheating students are selfish manipulators of a working system, then harsh punishments are merited to deter future bad actions. However, in my experience, most cheating students experience something more like the following:

Students cheat because their classmates cheat, and they want their grades to accurately reflect their competence relative to their cheating classmates.

If cheating students are fairness-seeking participants in a broken system, then the UCLA CS department owes it to us to fix the system, so that us students can go back to learning instead of cheating!

Why Students Really Cheat:

Imagine a class with 100 students. 35 of them are A students, meaning they have the combination of intelligence and conscientiousness required to get an A on a level playing field. 40 of them are B students, 20 of them are C students, and 5 are D students or below. (Grade inflation is real.)

A 100% accurate depiction of the engineering school’s grading system.

It’s almost inevitable that some of the C and D students will cheat. If anything goes wrong during the quarter — if they do unexpectedly poorly on a midterm, or end up taking care of a depressed or sick friend instead of submitting a homework assignment — they’re suddenly at risk of failing the course and having to retake it. While most students value their integrity (at least before they hit CS35L — more on that later), they won’t be willing to fail a class which they think they deserved to pass just in order to feel like a good person.

To ensure that they pass their courses, these students cheat on their homeworks, which are usually worth 20–40% of the final grade. This tends to raise their grades to the B level. This means that some honest students, who were working hard and learning and who should be getting Bs, now fall lower on the dreaded curve than the cheaters.

These students are working as hard as they can. They’re often juggling classes with jobs and other commitments, but they still make a serious effort to learn the material, complete the assignments, and do well on the exams. And they know that they make that effort, and that they deserve at least a B! And they see their grades sliding downwards as the quarter goes on, to B-s and C+s and even Cs, and they know that many of the students who are scoring higher than them (and taking the “B” spots in the curve) are only there because they’re cheating! So the only way for those students to get the grade that they actually deserve is to cheat.

The problem is, cheating doesn’t just bring these students back to a “B” grade. Like the cheating C students, they get near-perfect scores on the homeworks, but they also do better than the C students on the exams. This puts them solidly in A territory, leaving A students with no choice but to cheat — and the cycle continues…

(Game theory should be a prerequisite for university administration jobs.)

If administrators correctly understood this model of cheating, they would be able to address it more effectively. Instead of thinking of cheating students as bad actors who deserve to be punished, administrators should think of cheating students as participants in a broken system, which should be fixed for the benefit of all students (including the ones who currently cheat!).

II: How Things Could Be Less Broken

Think of each student as a rational agent following their incentives. Right now, there’s an almost irresistible incentive for almost every student to cheat on homework assignments, as explained above. To reduce the prevalence of cheating, administrators need to reduce the benefits and increase the costs of cheating, so that students are incentivized to actually learn and do homework instead!

Limit the rewards of cheating:

For humane reasons, I think an anti-cheating policy should focus on reducing rewards of cheating rather than increasing costs. Here are a few suggestions on how to do that, ordered roughly from least to most drastic.

Limit homework’s impact on final grades:

In most CS classes right now, homework is worth 20–50% of the final grade. A simple hack would be to cap the percentage of final score based on homework at 10%, reducing the magnitude of the effect that cheating on homework could have. Of course, cheating on exams is much more difficult and risky than cheating on homework, and students are less likely to attempt it.

Stop reusing homeworks:

Most professors currently reuse their homework questions year after year, resulting in years of accumulated solutions posted on GitHub for the world to see (Google “GitHub UCLA CS35L if you don’t believe me). I know professors are world-class researchers whose time shouldn’t be wasted on undergraduate homework assignments, but isn’t that what TAs are for?

9 out of 10 CS35l projects are the same as they were five years ago.

Indirectly reward students who figure it out on their own:

Another option is to make homework actually relevant to exam material, so that students who do their homework without cheating tend to do better on their exams.

A few professors, like Professor Eggert, attempt this, but I have yet to encounter one who actually succeeds. Most seem to get confused and attempt to test “Understanding” instead of “Knowledge”, which means that their exams reward North-Campus-style bullshitting instead of actual knowledge of computer science. As a former humanities major myself, I have scored 1–2 standard deviations above the median on Eggert’s tests with minimal studying just by writing things that sound plausible in my head.

His exams may be easily hackable, but The Egg Man is a genius and I sincerely consider him my personal hero.

Fix CS35l:

Very few students cheat in CS31 and CS32. They’re excited, they just got to a new school, and they want to learn everything about programming! Then CS35l crushes their poor, idealistic souls.

A typically inscrutable block of text from a 35l assignment. Wouldn’t reading this make you feel like cheating?

In 35l, boring but technically difficult material is taught poorly by disinterested TAs, and then students are expected to fill in the gaps on their own, with minimal guidance, in order to complete similarly boring but technical assignments. I frequently felt lost when looking at assignment specs and tended to earn low scores. The 35l syllabus allocates an insanely high 50% of total points to homework scores, so scoring poorly on the homeworks is a death sentence for your grade in the class.

As a result, I was effectively outcompeted for the limited supply of As by students who were on Reddit in the back of the classroom (or didn’t show up at all) and laughed about “GitHubbing” their homeworks.

Before 35l, most students are extremely reluctant to cheat, since they both value their integrity and fear repercussions. After experiencing 35l, cheating becomes normalized, the natural response to a difficult assignment.

Make cheating more costly:

These solutions attempt to directly or indirectly punish cheaters to reduce the likelihood of cheating in the future.

To be clear, I empathize with people who currently cheat and I think reducing the incentive to cheat in the future would be a better solution for everyone than punishing past cheaters. Currently, punishments for cheating tend to be unevenly-applied and somewhat draconian, kind of like how the US government will occasionally throw someone a 20-year prison sentence for violating internet piracy laws which everyone I know totally ignores. However, there might be a way to apply smaller punishments more consistently as part of a comprehensive solution that also reduces the incentive to cheat.

Chinese prison is probably more humane than the way UCLA currently treats caught cheaters.

These possible solutions, which aim to increase the cost or risk of cheating, are listed in order from relatively humane to totally evil.

Make small but significant changes to project specs each year:

Even small changes to the spec could require cheating students to make large changes to the old implementations that they steal. Furthermore, since they’re working based on old implementations which already appear to work, they might not notice some of the changes in the spec and lose points as a result.

Actually catch cheaters using honeypots:

Currently, GitHub is full of beautiful, fully working implementations of UCLA CS projects. What if CS professors added their own, which appeared to work but failed in some strange edge case, limiting the score that cheaters could ‘earn’? Or what if the CS department tried to catch copy/pasters by inserting invisible special characters into the GitHub repos and seeing if they turned up in students’ assignments? I’m sure there are other solutions on this front as well.