
Cheating in Computer Science - r11t
http://ubiquity.acm.org/article.cfm?id=1865908
======
hristov
Sorry, but this kind of thinking is bullshit. Treating cheating as being
efficient and promoting code reuse is just ridiculous.

To actually be a good programmer one should learn how to write code by
themselves, and then start thinking about reusing it. If you start with
reusing code, you will never be able to code anything new but will always rely
on copying other people. You will also always copy other people's mistakes
without noticing.

I finished school long time ago and cheating was rampant, and it really pissed
me off. All it did was prevent the truly exceptional from standing out from
the crowd. Also it gave the faculty a really false sense of their
effectiveness as teachers.

~~~
alanfalcon
The point of the article has been missed entirely in this comment.

The author of the orignal article uses the examples of code re-use and
efficiency as just that: mere examples of real world considerations that his
students should use in class as they would in real life. One lesson has the
author providing students with an executable and asking them to reverse-
engineer the code: this has nothing to do with re-using code or copying
mistakes or cheating. The author creates interesting, useful problems for his
students to solve. In this way, the students are self-motivated to learn and
grow and problem solve for themselves, rather than simply try to achieve the
highest grade by whatever means necessary. The author does not encourage
cheating, he encourages engaging students meaningfully.

I, for one, would have loved such a teacher in my CS classes. It might have
prevented me from dropping out of the CS program. To add context, I was
regularly in the top 5% of my CS classes. I would rush to complete all
assignments on my own so that I could spend the rest of my lab time creating
my own interesting problems to solve (wherein I would start to truly learn
things that would be useful to me even if I was never tested on them
directly.) I ended up pursuing (and obtaining) my degree in entrepreneurial
management where cheating was also the norm among my classmates, but where I
at least felt like I was being taught new things that I would be able to apply
in my later life. While cheating was rampant, I never let it piss me off... I
simply went on being exceptional and always found myself standing out from the
crowd.

~~~
tom_b
hristov is _dismissing_ the point of the article rather than missing it.

CS higher education is faced with deep challenges (not least of which is the
continuing argument of how much CS should be software-engineering oriented).

Ignoring those challenges entirely though, we should not conflate plagiarism
of programs with code re-use. Code re-use is an important part of the "real
world." But not in the practice of programming for learning purposes.
Exploratory programming and code hacking, as you point out, is a wonderful
learning mechanism.

I'm scared when the original article makes statements like "I no longer teach
programming by teaching the features of the language and asking the students
for original compositions in the language." And you should be too.

I don't worry so much about cheating, but rather more about the end result in
the marketplace. Why do organizations shy away from developing their own tools
and software internally? High cost with a low likelihood of success? I think
that poor software developers negatively influence the _opportunity_ for
software development.

There are times when custom software development has significant advantages
over the purchase of software solutions. While it is important to actually
consider the benefits and costs of custom vs buy, I always feel a little
bewildered explaining that we can create and support custom software in-house.
I also cringe at in-house software dev shops that primarily are configuration
experts and administrators for purchased solutions.

Of course, that same reluctance to do in-house dev is probably a major
opportunity for entrepreneurial hackers.

------
poet
Finishing up my undergrad at UIUC. A notable fraction of students in each
course do cheat. I see two courses of action: (1) we could take the hard road
and seek to catch all dishonest students and punish them or (2) we could make
cheating extremely difficult with some simple changes.

I think (2) is the prudent course of action. The majority of cheating that I
am aware of is only possible because professors reuse assignments and
homework/exam questions from previous years. Solutions are simply passed down
each year. One notable exception is in our theory classes, where the faculty
make the effort to produce unique homework and exam questions every semester.
I believe cheating in the theory classes is far lower as a result and I am
extremely thankful that the faculty put forth this effort.

I am cognizant of the work required to generate unique assignments each
semester. However, as demonstrated by how departments typically handle quals,
it is doable if the workload is distributed. It is my sincere hope that this
becomes standard practice. It is the easiest and most fair way to handle the
cheating problem. The reason why such a system usually doesn't get implemented
in practice is because it requires the entire department to commit to
undergraduate education, which is quite difficult to achieve at research
universities.^

Some other minor additions to the above system that have a good payoff/cost
ratio: (1) static analyzers to detect duplicate code submission and (2) higher
weights on exams to punish those who share complete answers on homework
assignments.

^Don't take this as a condemnation of undergraduate education in the CS
department at UIUC. There are incredible teachers here you'll get an excellent
education if you make a little effort to avoid professors whose priorities are
elsewhere.

~~~
alanfalcon
The article posits that the question of cheating isn't a matter of catching or
punishing the students. It's a matter of creating engaging learning
experiences and treating students as the teacher's customers. A student will
only get from a class what they want to get out of it; seek a grade at any
cost and you'll find a way to earn it, seek to learn at any cost and you'll
come away better off (and likely with a good grade to boot.)

So the way I see it, a teacher does have two options: (1) try to force
students to learn by trying to make "learning" the only way to earn a better
grade, or (2) try to encourage students to learn by trying to make "learning"
feel like the rewarding experience it should be. Note that neither of these
approaches involves catching or punishing students, nor does it involve
forcing students to learn in order to achieve a better grade. If in the end
you're a student who finds yourself with the same grade as someone who cheated
their way through the class, so long as you got what you paid for (an
education), why should you care?

~~~
poet
Whoops, I meant to mention that. Creating an engaging learning experience is
the most difficult option of all. It needs to be done, but there are steps
that should be taken in the mean time in order to a more fair (but admittedly
suboptimal) environment for students.

A couple of things unacknowledged in your argument. First, there's the
practical implications of cheaters on GPA. Cheaters get higher grades than
what is possible without cheating, making the curve in a class lower than what
it would be in a completely honest classroom. I'll be the first to champion
someone who doesn't care about GPA, but there are concrete affects that a
lower GPA has on students. Even though you got a good education, it's still
something to think about. Second, there's the fact that the solution you
propose is not possible in the current system. The incentive structure is all
wrong (read: nonexistent) for undergraduate teaching in universities. Further,
the majority of professors don't even have the requisite skills to be good
teachers. Even if we did get the incentives right, the talent simply isn't
there. To be honest I doubt there are enough people on board with improving
undergraduate education to get it done.

------
jdp23
Great attitude. 'I tend to see "cheating" as a symptom that something is wrong
in the system, in pedagogy.... As a teacher, my job is to help students learn,
not create artificial barriers to learning in the name of equitable grading.
Grading should be a strategy for making learning more satisfying by
demonstrating accomplishment....

It is my job to satisfy the student, the paying customer, not the other way
around. Perhaps cheating is a strategy that students bring to an artificial
problem that I have created. Perhaps it is a symptom of my failure to teach.'

~~~
Shanghai
After four years of being a student at a major state university, I can sadly
say that I have never had a teacher with that attitude.

~~~
alanfalcon
I guess I'm extremely fortunate; I had two: one in economics and one in
accounting. I very nearly switched my major to economics or accounting because
of them. I ended up with different teachers for next-level courses and
realized it was the teachers and not the discipline that I found appealing.

------
guynamedloren
This gem pretty much sums up the current state of the entire academic world,
or at least all of it that I have been exposed to (4th year engineering
student at University of Illinois Urbana-Champaign).

"I suggest that we have gotten the cart before the horse. We are less
concerned with whether students learn the right thing than whether they learn
in the way that we rely upon to measure how well they learn when compared to
their peers. We do this without even having considered whether the measurement
is even useful, much less necessary or even counter-productive. We do it
without considering whether encouraging sin is a good way to teach morals. We
do it for no better reason than tradition, habit, and inertia."

------
sedachv
The other way to handle this is using automated systems to weed out cheaters
early in the degree program.

Christian Queinnec set up what is probably the world's coolest interactive
tutoring/assignment/testing environment for the introductory programming
courses at Université Pierre et Marie Curie that has tools to detect cheating.
He gave a very interesting talk about it at ILC 2007:

[http://www.international-lisp-
conference.org/2007/speakers#q...](http://www.international-lisp-
conference.org/2007/speakers#queinnec_christian)

------
ekidd
I'm appalled that the author puts most of the blame on the faculty. I would
hope that CS students had some personal integrity.

Dartmouth College addressed this in a number of ways:

1\. Collaboration was routinely encouraged, so long as all work was properly
credited. You weren't expected to be able to ace some of the theory classes by
yourself, for example.

2\. Many courses included large team projects.

3\. Each course began with a clear, unambiguous description of what behavior
constituted cheating, and which types of collaboration were allowed.

4\. When caught, cheating was treated as a major offense: a 9-month suspension
and a permanent annotation on your transcript for a first offense, and an
irrevocable expulsion for a second offense. I was friends with a CS TA who
_always_ took the time to ram through these penalties.

Even with those precautions, we had a cheating scandal in a non-major course.
Unfortunately, it was hard to identify the cheaters, and the usual penalties
couldn't be enforced.

Still, I do admire Dartmouth both for encouraging collaboration and for
ruthlessly ending the academic careers of students who lacked personal
integrity.

~~~
wzdd
The reason these articles focus on the faculty is because students will only
be in a particular class once in their whole lives (everything going according
to plan), whereas the professor teaching that class will do so many times.
This is why articles like this put the blame on the faculty: it's pointless
trying to reform student behaviour because the next batch of students in 6
months' time won't have learnt anything at all from any punishments you dished
out to the last group.

> it was hard to identify the cheaters, and the usual penalties couldn't be
> enforced.

This might be a common problem. My university had similar draconian penalties
for cheating, but the seriousness of the penalty requires an appropriately-
serious proof of culpability, and it's surprisingly hard to get one.

------
erikb
Writing code is also very important and should be taught in CS school. As
stupid as it sounds, but the best way might be in the middle. Giving tasks to
create code and also giving task to reuse and change code. That is how our
teachers try to teach us and I feel acceptably comfortable in both situations,
writing a new program as well as moving around in other peoples code.

One thing I want to add: The really bad thing about these "reusing" students
is, that they have no skill to see which code to reuse. Most code you find
with google is just duct taped itself. And trying to solve any problem with
ducttaping an already ducttaped monster is ridiculous. What I saw in my
undergrad classes from my classmates was so bad to read and use, that I
decided for myself to write a lot by myself and don't rely on others. That got
so far, that in one project I wrote my own linked list instead of using the
Java's basic one. Of course that is a little too far, but makes for a small,
funny story. I'm still not a really big fan of reusage, because design and
engineering is something that is treated to lighthearted by many many coders
out there. Until you are finished analysing all the options, you often have
constructed your own solution and learned more about the innards on the way.

------
WalterBright
After college, I have taken many classes and taught many classes. All of them
involve the student paying the instructor to teach them something. If the
student does not want to learn, he will not show up, let alone pay his own
money to the teacher. If the teacher doesn't teach well, he won't get any
paying students.

There are no exams, and there is no cheating, because there is simply no point
to either. Though there is homework.

------
mgrouchy
When I was doing my CS Degree The university's policy for cheating was Zero
Tolerance, it was generally a zero in the particular assignment, failing grade
in the course, or expulsion, depending on how grievous the offence.

The CS department did it a little differently. It is fairly easy to tell if
you copy a programming assignment(loop structure is identical, code is
identical, variable names, etc.), so what they would do is divide the total
grade of the assignment and split it between all the people who copied, so if
4 people copied, there was no way to determine who copied who, so the maximum
mark you could get was 25%. This happens once and no one wants to cheat simply
because by letting someone else copy of you, you are taking a chance at
screwing yourself.

Collaboration was still encouraged, but wholesale copying obviously punished.

~~~
SeanLuke
This is a terrible policy which rather encourages cheating.

Let's say that two students need help from one another on parts of an
assignment. If they cheat their chance of getting caught is 50%. If they don't
get caught their grade is (it doesn't matter for purposes of discussion) a 100
each. If they don't cheat they get a 0 each because they just can't complete
the assignment.

So the expected payoff from NOT cheating is 0.

And the expected payoff from cheating is 0.5 * 100 + 0.5 * (100 / 2) = 75.

Who wouldn't cheat? Even if the probability of getting caught was _100%_ ,
you'd expect to get a 50. Holy cow! What university IS THIS?

The only way to discourage cheating is to make the net utility of cheating
negative, and so negative that every student realizes it.

~~~
mgrouchy
Besides the fact that the expected value for not completing the assignment
isn't 0. You would get partial marks for completing what you could,assuming
what you complete is correct, the outcome isn't binary.

If you would get partial marks for completing what you can, where is the
upside in cheating in this scenario where the maximum you get is 50%, which
you may get from your partially completed assignment.

Cheating is always taken on a case by case basis. There is always a chance
that if you get caught doing this(or doing this more then once), you could
easily get a zero in the course, expelled or one of the other university's
regulations.

I think the entire point for this initial leniency I think is that on an
assignment where you are encouraged to collaborate, some students can cross
the line from collaboration to copying.

~~~
SeanLuke
> If you would get partial marks for completing what you can, where is the
> upside in cheating in this scenario where the maximum you get is 50%, which
> you may get from your partially completed assignment.

There are two factors to utility: probability of getting caught, and the
outcome of getting caught.

The problem is that the probability of getting caught, while substantial, is
actually much lower than 50% in my experience. As a result the payoff
differential has to be that much worse.

Let's revisit my example. In order for cheating not to be the _smart_ thing to
do, the expected grade for not cheating would have to be over 75!

And that's with a ridiculous 50% chance of being caught. Now if we lowered the
probability of being caught to, say, 25%, the expected grade for not cheating
would have to exceed 0.75 * 100 + 0.25 * (100/2) = 87.5.

It's a terrible, terrible policy.

------
tomjen3
The problem is that the incentives are screwed up - most students don't care
about learning the courses, but they simply needs to pass them and so do the
minimum necessary to get by.

What we need to do is to remove grades as something which you can use to
validate yourself to others, and use it strictly as an internal measure of how
well you understand the material and what you need to focus on.

------
rflrob
Writing these kinds of assignments is hard, however. I find it difficult to
come up with something that is both wrong enough to be instructive and non-
obvious, as well as reasonable enough that someone might have written the code
in the first place.

More power to the OP if he's able to write entire, semester-long curricula
based on these sorts of assignments.

------
kbatten
Do employers actually care about a degree in CS anymore? It seems that
evaluating skill (which you can learn in school or out) is way more important
than a piece of paper. Deciding to pay for said piece of paper, but not
learning anything is cheating yourself.

------
michael_dorfman
_In any case, we can divide pedagogy from credential granting. The British
have done it with positive results._

Really? That's news to me, and I'm in the late stages of getting some
credentials granted by a British University.

