Posted
by
timothy
on Friday February 12, 2010 @09:12AM
from the no-no-you-want-game-theory-down-the-hall dept.

Pinky3 writes "The New York Times has an article on cheating in CS at Stanford. Here is a classic quote from one student: 'I wasn't even thinking of how it [sic] easy it would for me to be caught,' he said. One interesting strategy discussed is for the professor to make the final count for more of the final grade each time cheating is discovered. Share your experiences as a student and/or as an instructor."

Absolutely. I've actually had to work with someone I knew was cheating in school and they couldn't code their way out of a pile of leaves, let alone a wet paper sack.

They got the grades because they cheated. They got the job because they got the grades. Eventually, they were among the first to get the layoff because B and C students like me just plain outperformed them day in and day out on the job.

Years ago I worked as a developer for a subsidiary of Fujitsu. One day a colleague asked for my help.

The crux of the problem was that he was unfamiliar with the concept of a 'while' loop. Not the specific implementation in the language he was using, but the actual concept itself. He had some kind of computer science degree and he'd been working in the same team as me, as a developer, for at least two years.

It took me a while to realise what the problem was, as it never occurred to me that he might be unfamiliar with basic control flow. He sheepishly explained that the bulk of his degree was coursework (presumably he got some 'help') and that he'd been hammering square blocks into round holes for the last couple of years. From what I recall, whenever a while loop was appropriate he'd instead use a for loop with an extremely high upper limit and a break condition.

Usually makes sense to establish what CS is in any article headline to establish defined context.

So it used to be a lot easier to cheat in CS. I used to use an old wallhack that I hex edited and was able to use for years without detection. When they switched from WON to Steam, it all became harder.

Years ago I worked as a developer for a subsidiary of Fujitsu. One day a colleague asked for my help.

The crux of the problem was that he was unfamiliar with the concept of a 'while' loop. Not the specific implementation in the language he was using, but the actual concept itself. He had some kind of computer science degree and he'd been working in the same team as me, as a developer, for at least two years.

It took me a while to realise what the problem was, as it never occurred to me that he might be unfamiliar with basic control flow. He sheepishly explained that the bulk of his degree was coursework (presumably he got some 'help') and that he'd been hammering square blocks into round holes for the last couple of years. From what I recall, whenever a while loop was appropriate he'd instead use a for loop with an extremely high upper limit and a break condition.

I'm sad to say that I've encountered the same situation several times where someone that is supposed to be a CS grad (or what should be a junior/senior CS student) is lacking in something fundamental. Sometimes it is in things that are not so obvious (but should be) such as not knowing what an interface or abstract class is for or thinking that procedural programming means "programming with GOTO statements", or simply not knowing what structured programming really is.

I had a similar experience with a co-worker who had an MSc in CS (from U. of Windsor, Ontario)."Stack, stack! What's all this about stack?" he impatiently groused to me one day during a work conversation.I pulled him into a back room (because I was embarassed for him) and explained to him what a stack was.

Those people will eventually be discovered, but I every time that happens it weakens the value of the diploma from that school. That's bad for the graduates who actually worked. The schools need to stop this kind of thing from happening - that diploma certifies that the person earned it. Not that they cheated their way through a program. If it happens enough, they should lose their accreditation.

Absolutely. I've actually had to work with someone I knew was cheating in school and they couldn't code their way out of a pile of leaves, let alone a wet paper sack.

They got the grades because they cheated. They got the job because they got the grades. Eventually, they were among the first to get the layoff because B and C students like me just plain outperformed them day in and day out on the job.

I hated coding in higher level languages, but I loved doing it for microcontrollers in Assembly. Combined wit

I worked with a guy who had been a software engineer for so long that he used to be a cobol programmer. He had been with my last company for almost 10 years doing C++ work. He didn't understand that if he updated a C++ class to add a new function anything that used that class had to be recompiled so it would "know" about the new version of the class. I mean literally, he was stuck for days and couldn't figure out why he was getting access violations.
What's worse is he had no idea how to tackle the issue. He started thinking that his system was screwed up completely and wanted to use memory management tools to figure out the problem. He didn't even bother to see the time stamp on his various files to see if they were old and could use a recompile. (Let alone use a program to check dependencies.)
I helped him and figured it out fairly quickly and then started talking to him about recompiling the other stuff. (Since I've done that before. Updated a class and then missed recompiling another class or 2.) He had no idea what I was talking about or why this made a difference. Of course the absolute worst part is he thought he was a very good coder and wouldn't listen to what anybody else said about his code. (After that I avoided working on things with him. Clueless and essentially unteachable.)

When you get into a corporate environment, "cheating" is actually preferred. No reason to re-invent the wheel when there is existing code that gets the job done.

Need a report that's "like this one except for..."? Take the code for that report and add some mods and there ya go. Your manager would consider you an idiot if you started each project from scratch, re-writing all the functions and methods that already exist in other applications and have perhaps already gone through rigorous QA.

But, to be successful over the long haul you have to be capable of producing the report from scratch in the first place. Cheating your way through school does not promote that skill set. Sure, you know how to copy and paste the right code but... can you tell why it's the right code in the first place? Can you optimize a/o improve the copied code?

So, I agree on your point re: reuseable code in the workplace but, you still need to do the work up front.

How is a person able to "add some mods" if he's spent four years cribbing everything and never coded anything himself?

You've never worked with COBOL in a mainframe environment, have you? At Cincinnati Bell Information Systems, there are billions of lines of COBOL, APL, PL1, Assembler, Forth, FORTRAN and God knows what else. You didn't write any NEW apps from scratch. You took what was written, modified to do "the new thing" and you were done.

And people were paid big money back in the 1990's for this. A buddy of mine still codes in Assembler for 5/3rd on their mainframe, because the speed of the code is so much faster, by several orders of magnitude. He occasionally gets to write a new program, but rarely. The majority of his job is modifying 40 years of accumulated code.

A perfect rebuttal.
Or it would be if was in reply to a post saying, "You need to write programs yourself in college, from scratch for this sole reason: that it's exactly what programmers do at work".
Did you cheat on your English comprehension assignments, perchance?

You've never worked with COBOL in a mainframe environment, have you? At Cincinnati Bell Information Systems, there are billions of lines of COBOL, APL, PL1, Assembler, Forth, FORTRAN and God knows what else. You didn't write any NEW apps from scratch. You took what was written, modified to do "the new thing" and you were done.

and this lazy approach is why Y2K scared the shit out of all the banking companies. They have been reusing old broken code everywhere.

What you call lazy, the company calls good business. They want to pay for all-new code.

So, learning the mindset of a "code modder" instead of "code originator" is a survival skill. This is about putting food on the table and shoes on the kids. You do what the companies are willing to pay to be done.

You and I, we know this is the wrong way to do it for the long run. Businesses of that size have done their math and simply think it is cheaper to mod the existing code, than write all new code. And since it

In university my friend and I worked together on the same assignment. We were in different tutor groups so we believed it wouldn't be detectable. Indeed it wasn't but he got 80/100 and I got 40/100! Mother f$@%^&. It's not like I could complain about it but my friend thoroughly enjoyed it.

In university my friend and I worked together on the same assignment. We were in different tutor groups so we believed it wouldn't be detectable. Indeed it wasn't but he got 80/100 and I got 40/100!

Actually, it sounds to me like you were caught. Giving different grades to people who "worked together" is a way for the teacher to punish people for cheating, if he or she doesn't want to go through all the bureaucracy involved with making a formal accusation.

I have two anecdotes from my years of teaching low-level courses in CS:

1) An introductory Java course had about 5 TAs that took care of programming labs, helped grade assignments and tests. One TA received an assignment for a student, but comments in the code mentioned that the author of the code was another student who was under a different TA. Both TAs spoke to these student separately, and it was pretty simple to determine which one had the student that was copying code from the other. When *that* studen

I had some fiends take CS 101 late in their education. They had the same assignments. Two of them were in a bind, so I dug out my old assignment and gave it to them and said "go nuts". I did pretty well on it with a 80%, which I cobbled together the night before in about 2 hours before going to the University pub.

Anyway one come up to me all excited, they got a 90%. I was about to say "Son of a..." when the other showed me theirs, and the got 100%. W.T.F. I was pissed.

Depends on the cheating. If, for example, you decide to cheat by taking some code from outside and incorporating it in your product, I doubt that your manager will be happy when your company is later sued for copyright infringement.

When you get into a corporate environment, "cheating" is actually preferred. No reason to re-invent the wheel when there is existing code that gets the job done.

But that's not cheating. Academic cheating is a breach of ethics: you're told your work must be original but you re-use some else's anyway, without permission from your instructor.

The professional analogue of academic cheating is copyright and patent infringement: using third-party code without consulting your supervisor, the legal department, and so on. That is definitely not encouraged in any corporate setting I know of; the threat of an IP lawsuit is so great that it could drive a small or mid-sized company out of business.

Sharing code between two projects at the same company may or may not be allowed depending on the business use of the respective code bases. For example, the company may not want the latest fancy libraries from R&D being imported into their internal business apps. Again, if you went and did that without approval, I doubt your boss would be happy.

Yeah, as a few others have said, I agree with you and I was going to post something similar. At least up to a point. Most software development projects are highly cooperative affairs and its rarely a matter of success hinging on one's brilliance as a coder. Still, you have to be able to contribute and at least some members of the team need good design skills of various types.

The reality is that successful projects mostly succeed because someone in charge is good at utilizing the strengths of the other team

Need a report that's "like this one except for..."? Take the code for that report and add some mods and there ya go.

Dear god, anything but a copy and paste programmer. We had one here and the results and the results are devastating. Giant swaths of repetitive code pasted in large blocks, all mangled (I mean 'modified') in their own way. It's obvious the guy had no clue what he was doing and it's even harder to understand what his code is doing because so much of it is completely unnecessary.

Your manager would consider you an idiot if you started each project from scratch, re-writing all the functions and methods that already exist in other applications and have perhaps already gone through rigorous QA.

Sure, but building a reusable code base is something I would hardly consider cheating. Building proper and efficient classes and then leveraging them to handle 80% of your work takes experience that you cannot obtain by cheating.

I was lucky enough to take a class in college where the prof understood and embraced this idea. After all, he was teaching us to be engineers rather than coders. On the first day of class he told us in no uncertain terms that, if we found some code that would be useful in our projects, we were free to use it as-is provided we clearly noted where it came from.

He even told us a story where, in a previous year, he (inadvertantly) gave out an assignment that was almost identical to an assignment given at anot

When I was grading programming homework a decade or two ago (theoretical physics, oddly enough) it was obvious when people shared their code. The use of spaces, indentation, variable names, curly braces etc. really made each assignment unique, and the people who resorted in copying someone's code almost never bothered to make any changes at all. My solution was to give the first assignment turned in whatever grade it deserved, and each subsequent copy a 0, and that seemed to make short work of the practice. At my current university the response would be significantly harsher.

My solution was to give the first assignment turned in whatever grade it deserved, and each subsequent copy a 0, and that seemed to make short work of the practice. At my current university the response would be significantly harsher.

My father once taught computer science to high school students. His approach was to grade the assignment, and divide the points equally among all the students who handed in substantially identical work. (One good assignment, total grade 90%. Handed in by three people -- everyone gets 30%.) The problem didn't usually recur.

My father once taught computer science to high school students. His approach was to grade the assignment, and divide the points equally among all the students who handed in substantially identical work. (One good assignment, total grade 90%. Handed in by three people -- everyone gets 30%.) The problem didn't usually recur.

Slight permutations of the assignment also provide interesting results, as each student hands in identical answers to different questions.

As a CS student my buddy and I (we were working as teams) were tired of people copying our stuff. We shared with anyone who wanted to, and had full read access for anyone to our code, so we didn't make it hard for them to copy. Still, it was annoying to do the work and then have others just copy and hand in.

Our assignments required print-outs delivered with the software (yes, this is before there was even an internet) and we suspected people just copied our software, compiled it (which incidentally at the time could take hours) and ran it without even looking at it. So, just for fun, we inserted into our own code the equivalent of a system call to "rm -rf $HOME/*" (yes, this is before we got our Pyramid Unix boxes, so it was not exactly that). We did this two days before the assignment was to be delivered. It took less then an hour before we heard the first "WHAT THE F#CK HAPPENED???". Five teams were unable to deliver their assignments.

Interestingly two of the teams complained about our behavior to the professor. His only reaction was to ask if they had some serious mental problems (or the polite equivalent). I am sure today we would have been sued and the morons would have won since we "hacked" their accounts.

I am sure today we would have been sued and the morons would have won since we "hacked" their accounts.

That's funny you actually mention that!approx 8 years ago, I was at university. We did have internet and decent computers. I did the same kind of trick as you did.My trick wasn't as bad, I only made my program modify their login scripts so that they wouldn't be able to login anymore (it would ask the password in loop via a fake login program, always denying them access). No data deleted.

One single guy got caught, it was funny, except that everyone knew if someone was able to do this at the time, it was me. Thus they inspected my code, and my account, and shortly I had to see the director of the university. I was asked to leave the university for "hacking" and that there would be no repercusions on my scholarity. If I had chosen to ignore and try to stay, I would have to deal with a trial instead.

I left this university and went into a smaller school instead. yep it kinda sucks i suppose. Nevertheless.. the guy never got punished for cheating. Best part of the story I guess.

it took a week for the admins of the university to figure out the trick (tells a lot about their abilities or the lack thereof - i bet they were cheaters too lol), thus they lost a week of time, claiming it to be the reason why I had to leave or face trial.

When I took CS101 I was well beyond the level of the class, so, in order to make the programming assignments interesting, I added extra functionality on top of what was requested. Little stupid stuff mostly, but I tried to make it clever, and since the testing was automated, it didn't matter as long as it was to spec.

The last project was to write a program to simulate one of those stupid "digital pets"; it had to have a pet object, and various, feed, cuddle, punish, methods, etc.

One of the boundary conditions was that the pet had to starve if you didn't feed it, but the program was set so that you could have as many pets as you wanted at the same time...Well, I decided to put a little rock 'n roll in there, and if one pet hadn't been fed for a certain amount of time, he had a chance to start a "pet deathmatch", and try to eat another pet.

The code for the combat and the actual fight was massive. Most peoples code was a couple of pages...mine was closer to 50.

I printed it out at one point, so I could take it to dinner and work on some bug, and someone swiped it off the printer, and subsequently copied the WHOLE THING and turned it in for the assignment.

When I took CS101 I was well beyond the level of the class, so, in order to make the programming assignments interesting, I added extra functionality on top of what was requested. Little stupid stuff mostly, but I tried to make it clever, and since the testing was automated, it didn't matter as long as it was to spec.

The last project was to write a program to simulate one of those stupid "digital pets"; it had to have a pet object, and various, feed, cuddle, punish, methods, etc.

One of the boundary conditions was that the pet had to starve if you didn't feed it, but the program was set so that you could have as many pets as you wanted at the same time...Well, I decided to put a little rock 'n roll in there, and if one pet hadn't been fed for a certain amount of time, he had a chance to start a "pet deathmatch", and try to eat another pet.

The code for the combat and the actual fight was massive. Most peoples code was a couple of pages...mine was closer to 30.

I printed it out at one point, so I could take it to dinner and work on some bug, and someone swiped it off the printer, and subsequently copied the WHOLE THING and turned it in for the assignment.

Anyway it wasn't obsession. I had time on my hands, and I'd never worked with Java before (this was a long time ago), so I was teaching myself stuff, and having fun, meeting people..."Hey does your program work?" "Sure" "Run it and let me see...Okay, Okay, O...What...The...Fuck?"

I had a fellow student during my university years who cut corners where he could. Which wasn't too hard, considering our profs didn't really care whether you cheated (well, most of them). And often I wondered why I didn't try it as well. Ok, I did. In electrical engineering and hardware design. But I knew I'd not end up in hardware (now it bites me in the behind when I try to toy with atmels, the code is fine but I usually need helpl with the soldering, but... ohwell).

When I was in college, we had lots of practical group assignments for which we had to deliver reports. In the end of the semester the teacher for each discipline would sit with every group and discuss the reports.

This was great, since the teacher could tell very quickly (with sophisticated interrogation techniques) who did the assignments and who slacked. And then the slackers would go on a round of technical questions. They could cheat on the exams, but they couldn't get through the discussion with the

From TFA: Mr. de la Torre was taking the computer science class for a second time in his junior year when he cheated. After he was disciplined, he resigned from his position as student body vice president in November

He shouldn't have resigned, I think he has the makings of a great politician...

My first thought also was: 'Cool, they have a Counter-Strike class and the professor got fragged and flunks the campers for cheating'.
But when I googled 'define:CS' I found the most appropriate definition: 'Caugt Stealing':)

Just make the punishment for cheating sufficiently harsh. You cheat.. you get kicked out. Simple.

I dunno about Stanford but when I went to school my CS classes (especially the earlier ones) were huge. I never met most of my classmates. I would be *extremely* pissed off to have my academic standing affected by someone else's cheating.

Harsh punishments don't work. Because the punishments are so drastic, instructors become reluctant to give them out to "good kids" who made "one mistake." Lax punishment becomes to de facto standard, and of a rogue instructor tries to apply the penalties as written, his students and his peers look at him as a monster and exert considerable pressure to loosen up.

The difficulty is that stronger punishments require stronger proof. You must be be 100% sure that you have the right person. It would suck if you tossed-out the best and brightest because people were copying their work.

It's not quite that easy (speaking as a long time CS teacher). For example, once I found that two of my students had turned in the identical assignment. They did not know each other, so one clearly swiped the other's work. Neither would admit wrongdoing, they both understood the code, and there were no timestamps to check. With an expulsion policy, what do you do? Either expel them both (not fair, you're punishing an innocent person) or break your own policy (looking inconsistent, which weakens the poli

It's much easier for people to cheat in group projects than on any particular assignment. Nearing the end of my undergrad I specifically choose courses that didn't involve group projects because I got tired of doing other people's work (while they went to class).

I am wondering what exactly they are calling cheating here, since the code says they "will not plagiarize, copy work or get outside help."

Plagiarize and copy are obvious, but I never heard of asking for help on homework being cheating. How else does one learn ?If you didn't get the concept in class, you are out of luck, that's it ?

I was in an Engineering program (Stevens Institute in Hoboken), and I would venture that at least half of homework was done in study groups, sometimes just to bounce idea off each other, sometimes as a collaborative group effort. This was part of the learning process.

Agreed. Learning to ask for help, getting outside help, and incorporating that advice into your work is a huge part of learning.

There's definitely a sliding scale between: "will you help me to understand X?" and "will you do X for me?" And it's more than just a line between those two points, because there are other ways to get help, such as group projects, or working side-by-side with an expert. It seems obvious to me that the intent of the code is to stop students before they get all the way to the lat

Why bother with university then? Do a distance-learning course and hang out in coffee shops near a university and you'll get the same experience at a fraction of the cost (as I recall, CMU charges something around $40K/year). One of the greatest benefits of university is that you are surrounded by other intelligent people and can exchange ideas and teach each other.

I did many years in grad school and discovered several cheaters. The lack of punishment for such was part of what caused me to abandon a career in academics. Part of the discovery that academics is a very very political space. A system that tolerates cheating perpetuates cheating and rots itself from within.

1) Crowded class writing mid-terms. There are 2 copies of the exam with minor but significant variances handed out in a checkerboard pattern. Am proctoring and see a student looking at another paper get another to proctor to witness it. Make a note on the exam when collecting it. Sure enough they guy has the right answers to the wrong questions. No way that would happen without copying. Have to write a formal description of what happened, it goes up the chain. Nothing but a "formal reprimand" on the record and zero for that exam.

2) Programming lab is scheduled 1/2 the class every other week. They are supposed to write code during the lab and have the help of the tutor to explain things. On second week I have people handing me a program "how does this work". I reply "didn't you just write this?" It takes me a couple of minutes to get them to admit they did not write it.

This is university, they are paying to learn. Yet they are unwilling to work at it. I wonder what they are looking at getting out it?

The number of taxi cab drivers with university degrees does not surprise me.

That's strange. At my current university, getting caught cheating is grounds for immediate expulsion. At that school, in my experience, the problem is more with the teachers inflating grades. This happened in a math course I took, and because the teacher essentially gave everyone A's, the grade's use as a measure of understanding was completely eliminated. In my mind, our grades were meaningless. Fortunately, in my other classes, I'd had to work my ass of for those A's (or that B in physics-- whoa!).

I attended a school where cheating was also grossly ignored. The most flagrant example I can think of was in an intro to software engineering course where about 70% of our final grade was based on a semester-long project. Of course, the semester-long project does not change from semester to semester, so last semester's (and the one before that, and the one before that) projects were readily available. On the final day of class, each group (maybe 10 groups of 3 or 4) presented their projects. More than half of the class turned in the same project from the previous semester. Some of them actually took the time to at least change the colors on the GUI, but two or three did not. I talked to some of the students that turned in the same project the next semester and asked if anybody had called them out on it, and they all said that they got their A and nothing happened. The professor did not care at all.

They are unwilling to learn because University wasn't really their choice. Students are told, in no uncertain terms, that they will be miserable failures if they don't seek higher education. Since society feels justified in propagating this stupidity, millions of students each year head to universities and colleges in order to grasp that golden vine, and they'll do whatever it takes to grasp it with as little work as possible. Only the students who actually want to be there know that the golden vine doesn't really exist.
And they are the ones who suffer.

Regarding your first scenario: My favorite story on that front was from my dad, who teaches math at a private high school. He handed out a midterm with multiple versions, and within a few minutes had a student raising his hand to tell him "Mike's test is different than mine!"

That's a misconception on your part. The vast majority of kids at university are there to do whatever it takes to get that piece of paper. The goal isn't to get educated; the goal is higher earning potential by virtue of a better job.

I used to head TF CS classes at an Ivy League school (you can probably guess which one from my job title alone). I worked both in session with undergraduates, and in the summer for the high-school/further learning program.

Cheating in CS is terribly easy to detect. We had programs we could use to pick up anything suspect, but I never actually used them - at the entry-level I was teaching at, it was pretty easy to catch someone out. In fact, often you can complete the assignment in the time it would take you to modify your stolen/plagiarized code so as to be undetectable. Half the time you just need to google the code they submitted before you find a forum/Yahoo Answers post from the student in question, and once you've been coding a student for a while you get a good feel for what exactly is and isn't their style and their code.

As to preventing it: there was a very simple policy at my university. You cheat, you fail. In most cases, it was rarely followed. We tended to be far more strict at the Summer School sessions, but then again, we also tended to get considerably more problems, mainly because the high school students and foreign exchange students attending didn't know better. The university also didn't really have a problem showing them the door.

Undergraduates were more of an issue. A lot of the time, we would let them know we'd discovered it, and let it slide. Repeat offenders were usually dealt with by using some kind of grade penalty. Very rarely did students get referred for academic discipline (although this is partly due to the entry-level nature of the courses I taught. Something high-level, or with a substantial amount of original research required, would be another story).

Finally, and perhaps most importantly - why were these students cheating? Well, honestly, I suspect because of the academic pressures placed upon them. I'd be extremely interested to compare the rates of detected cheating at somewhere like MIT, where grades are rounded up/down for GPA (ie, get a B+ and it's recorded as a B in your GPA, get an A- and it becomes an A) and at my university. Given the vast number of emails I used to get at the end of each semester from students desperate for a grade boost to help their GPA, I can see how some might have convinced themselves it was 'ok' to cheat. And maybe....just maybe...people are cheating because they're not getting the support they need. The article says the guy was taking the class for the second time. Sounds like maybe he wasn't getting the one-on-one help and extra support teaching staff should be giving him. Just a thought.

It requires a personality trait. If you don't have it, then you shouldn't be taking that course. The last thing the workforce needs is another cert chaser who has no talent and no skill in that line of work.

And frankly, if you have that personality trait, then cheating is far from necessary. CS isn't so much about memorizing as it is about understanding the material. There are often many correct answers in CS.

I've been TAing every semester since I got to college, and every semester we tell people that we run their submissions through MOSS [stanford.edu] (the canonical code plagiarism detector, hosted at [and perhaps developed at?] Stanford). We exhort that it's really not worth their trouble to try to get their code past it, and that they really ought to just contact the course staff if they're in a bind, as there's really nothing worse for them than getting caught cheating. And every semester, we find several pairs of students who have copied each others' code. Sometimes it's a literal, word-for-word copy (comments too) with the name changed (or occasionally without!); sometimes it's the same structure with different comments, suggesting they just sat side by side and wrote the lab together.

I'd really like to see the penalty for cheating to be an immediate failure in the course, if not expulsion. The idea that honest students spend hours working on an assignment, and then someone who didn't plan their time well, or doesn't get things as well, or is too lazy to ask for help thinks they can just not do the work and get the same grade is offensive, and cheaters should be punished accordingly.

There are only so many ways to write a Las Vegas Algorithm when the teacher counts off for not following the algorithm as stated in pseudo code in the book.

Then he wants you to structure it a specific way. Then he wants a certain input. Then he wants a certain out put.

By them time your done, the only part of your program you get to "write" is the gui to display the output.

Oh and it has to be in the prof's preferred language, java.

So you end up with alot of remarkably similar programs, especially when the teacher has all these style demands and the same prof teaches students 2 or 3 classes in and everyone starts naming classes and methods the way he does.

I have taught several introductory CS courses and to be honest, I was not interested in playing policeman and checking whether students are cheating or not. Instead, I have established a two tier system:
- For homeworks that had to be turned in, these were corrected by the students themselves. I did some spot checks to warn those who were cheating and to ensure that the corrections are up to par, but didn't really put much effort into chasing cheaters. The homeworks were primarily a feedback for the students and an opportunity to learn. However, to give them an incentive to actually do them, they could pass the exam orally in advance instead of a practical programming exam if they had 80% of homeworks right. That was strong motivation for many of them, because they perceived the oral exam as easier (even though in reality they had to do much more work over the semester for it).
Now, the purpose of the oral examination was simple - to establish whether the homeworks were actually done by that student or not. In my experience, if someone was cheating, he didn't have a clue whatsoever what the code he has handed in does. At best, he could memorize some superficial stuff and do some hand-waving over it. One or two targeted questions over the details of the assignment has always uncovered this. No need for any computerized code comparison tool (which would be always gamed) or tiresome reviews of the homeworks.
- For the regular exam which was always written, practical programming assignment on a computer in the lab (CS exam on paper?? WTF?), I have allowed the students to bring their own code snippets (e.g. from homeworks), use their books, even internet. This essentially makes all what would usually be considered cheating allowed, lessening the burden on me - I did not have to spy on them whether or not they are cheating.
My reasoning was that the students should demonstrate practical knowledge how to solve problems, not whether or not they have memorized stuff (which is what the exam would be about if the books were forbidden). Now, of course, if the student didn't learn anything, the books will not help - they would spend most of their time searching for information and run out of time.
One disadvantage of this approach is obvious - it puts a bigger onus on the examiner to prepare meaningful exams. Assignments like "Implement quicksort" are useless, because the students can find them ready made online or in the book. On the other hand, I do not think it makes much sense to examine whether or not a person can implement quicksort - it is not a real-world problem. Better give them an assignment where the quicksort needs to be used - the clueless one will not find it online so he cannot readily cheat and the smarter one will see the similarity and solve the assignment without problem.
To conclude, I do not believe in the various software to catch cheaters. Especially not in CS - the students are very smart and will be always able to game it. If the teacher is doing their job, this is not needed.

FTFA, I understand the argument of, "Your friends want to cheat, great. Good luck on my uber-weighted final worth, now, 102% of your final grade", and I am personally not a fan of it. I've seen that type of methodology applied at the 101-level and gen-ed classes but I just don't like it at any level as it applies to college. IMHO, I paid for my schooling with the G.I. bill and the rest of it in loans and of course it would piss me off when I'm putting in hard, valid work in a class and not cheating to be punished for what others are doing. If people cheat and don't take the class seriously, the Mr/Mrs Professor should deal with that student accordingly and make sure it qualifies for an automatic failure of the class. I had professors in college that has a very low threshold for that type of behavior and the student would learn (or mom and dad fronting the college bill every semester would learn) that taking classes over and over will only make you either a 7 year senior or a drop out. Furthermore, I don't like how the professor gives up his authority and puts a layer of discipline on the students by punishing them. Is he looking for a militaristic approach? Does he think all the kids in the dorm are going to gang up on "the cheater" and give him/her a blanket party? Absolutely not.

However, when I started working in the real world in the Information Technology field, I never knew that this "group-punish" methodology would apply at most of the jobs I've been at with substantial perks (e.g. Work-from-home a good portion of the week, very flexible and accommodating work schedules with the option to make up time whenever).

To me, it just reminds me of being treated as less as an adult and more like a 2nd grader having to lay their head down on their desk for someone talking in the back of the classroom during teacher instruction time.

I apologize for the long post. The issue of cheating is very dear to me. It was the single most frustrating part of my education, and I often felt as if I were the only honest student in my undergraduate program.

As another poster mentioned, blame can be pinned on both instructors and students. But "blame" is only useful when it can be used to fix the original problem, and this problem is too big to fix by pointing fingers and admonishing each other. It's a cultural shift toward the worst, and we're powerless to stop it.

You can only deal with cheaters when cheating is uncommon and has an attached stigma. We've come to the point where cheating is so common that accusations of plagiarism are just met with "so, lol?".

Really, what we have here is a failure to take life seriously. In school, everything is a joke, a show. Nobody earnestly attends class, or does homework. People who ask questions in class are either trying to delay the lesson or merely stroke their ego by one-upping the professor. (I've been accused of both.)

At least in my experience, the typical student doesn't even seem to consider the idea that someone might want to actually learn. Learning is a chore, class an ordeal, and the professor the enemy. As a result, shameless, rampant cheating is rampant in the "I can haz degree nao?" generation.

My favorite example involves a project to build a userspace filesystem "driver". It was simple enough, and the professor even gave us interface specifications.

The reaction was catastrophic. Students complained that the assignment was too hard, that they didn't know the algorithms, and that half a semester was too little time. They talked in the hallway in hushed tones of outrage and asked whether they could appeal to the dean.

The real issue behind the complains is that the assignment would make them think, and most of them had no idea how to do anything beyond compile code fed to them with a spoon. The assignment involved analytic thought, which my fellow students appeared to consider Herculean.

"Poor students whine about having to do real work for once," you might say.

Except that the TAs for the class shared this adversarial, anti-intellectual mentality. In recitations, the TAs provided "sample code" sufficient for the whole project. Crisis averted, right? A grades were handed out to people I personally knew had no idea of when to use a loop instead of a function call.

These people graduated with degrees in CS, but they're completely unable to develop original software. Tasked with an assignment, they'll just copy code from the internet or ask on IRC, laughing about it the whole time. They'll choose systems based not on their technical merits, but on "documentation" --- meaning they'll choose the system that has the easiest-looking introductory tutorial. Their code will have bugs because they have no idea how to code, and their programs are chimeras of copy-and-pasted examples.

We're all worse off for these imbeciles running around, and those of us who consider this profession a craft, and who take pride in our work, and impoverished by having to share a degree with people who want to avoid thinking at any cost, and who laugh at the idea of serious work. The laughter is what bothers me most. It's how I know we're doomed.

I RTFA and I agree that a big incentive to cheat is when your project doesn't work. When you still can't find that nagging bug at 3 AM, cheating seems like a good option. But I think honesty is the better way. Once, I turned in a project that didn't work ; I had an oral exam a few days later to defend my code, and one the professor actually congratulated me on the code. Turns out he had just read the code and liked it, because I followed his specs to the letter and used all the OOP patterns that he taught in his course. The one bug that made it crash was a missing call to an ancestor's constructor, undetected by the compiler (this was in Turbo Pascal)

I would offer help to other students at this one college I would visit, and this one guy had a problem with his Turbo Pascal program (version 3) that it wouldn't compile and he couldn't figure out why. This was a fairly long program, say on the order of 20 screens (about 1,000 lines) so it wasn't clearly obvious. So I ask him if I can make a few changes. I go in and I find a point where the code should be complete, e.g. no pending procedures, and I insert a 'BEGIN END.' I exit and compile and the compil

My junior year there was a CS lab that was particularly tough at the end of the semester. I turned it in (a few days late) but managed to complete it (first true all-nighter I pulled in school). I was taking the final in the CS labs (they put 6 bugs into your program and you had to find and fix them) and a student next to me was escorted out into the hallway where the dean, a sysadmin, and another student were waiting for him.

Apparently, he couldn't pass the course unless he turned in that lab on time. So, when a student next to him got up to get a course TA to verify his program (without locking his screen), this student scp'ed a copy of the student's program over to his account. But he didn't stop there, he then deleted this students program and replaced it with a copy of his incomplete program.

The student whose program was stolen met up with the sysadmins and they were able to determine what happened by looking at logs.

From the article: "Programs are idiosyncratic as sentences and no two are alike," he said. "They are not even comparable if they are independently generated. It's particularly easy to detect if they've been copied."

While it is extremely hard to independently produce duplicate programs at the 3GL level, it isn't impossible. The problem space will have only one optimal solution. The semantics of the problem space could easily lead to a common choice of classifications. The higher you go in abstraction, the more likely it is to produce identical programs.

I won't say where, but a couple of times I did someone else's college computer programming assignment for them, making sure I 'dumbed down' the quality of the work so that it wouldn't be too obvious that someone who has a considerable amount of experience (over 5 years, then) did it, as opposed to a new student. What can I say other than I was broke and needed eating money, and as with today, it was just as hard then to get a job programming without a degree as it is now. At least it's over 20 years ago so the statute of limitations applies, presuming I did anything illegal. I can admit, however, I think I actually learned a few things from having to do the assignment.

"About the things I've done in the past, I hope either they've been forgotten, or if not forgotten, covered by the Statute of Limitations."— Robert A. Heinlein

The professor who teaches operating systems at my university runs people's code through an automated cheating detector. The first operating systems project ends up being around 8 lines of code to complete a stub he provided. In a class of 30 people, there will inevitably be a couple of people who produced similar enough code that they get a zero on the assignment even if they may not even have talked to the person who had similar code. After the first project everyone gets scared and writes the most obscure code they can to avoid being accused of cheating.

On another note, I was a teaching assistant for a lab last semester, and caught a few students cheating. Most often I could hold the two assignments up to the light and see that each line lined up exactly. I had a couple of students who would hand in the same assignment in different fonts, but I nailed them for having the exact same typos.

There were some other people I suspect might have been cheating, but they changed variable names and switched around lines if the order didn't matter to the point where I wasn't confident that the similarities weren't just because they were solving the same problems.

Cheating is very easy to avoid but it does require educators to be willing to create assignments that they themselves didn't download or buy from a teaching website.

I would also like to add, that cheating is far worse in the US since the teachers grade the students instead of third party independent testing organisations who are contracted to create unique material for each test.

...huh?! If we're talking about university classes, the idea that anything other than perhaps the intro courses would use materials provided by some company (say, the textbook publisher) is absurd. Also, what kind of a professor would outsource their tests to an independent organization? How can they possibly know the course material well enough, and adjust for what's been covered during the semester, and such?

Evidently a rather large amount of professors would. Some even use slightly modified powerpoint slides from the textbook publisher to present the class. Guys with PhDs are just like the rest of us, there are some good ones, many average ones, and a bunch who totally suck. Some cannot even be bothered to read their own class textbook..... Some steal tests from other places and then invent their own "interpretations" of a problem. And when their own "interpretation" is totally wrong or based on false ass

I would also like to add, that cheating is far worse in the US since the teachers grade the students instead of third party independent testing organisations who are contracted to create unique material for each test.

Umm, citation needed?

Are you accusing the teachers of helping the students to cheat? If so, outside tests don't help. Thanks to the All Children Kept Behind act, every public school has been using third-party independent testing. Since the teachers and districts are evaluated based on their students' performance, the teachers and administrators themselves have been caught helping students cheat (either by giving away answers during tests, or by editing students' responses before submitting them.)

Yup, good programmers are lazy. Good programmers will write the smallest amount of code to solve the problem at hand, because the more code you have, the more potential for bugs. In general, 50-90% of development time is debugging, so a lazy developer will write code that is easy to debug (short, simple, well-structured). If this cuts debugging time in half, it can double or triple productivity.

Unfortunately, students seem to not be learning how to be lazy very well. One course I taught had a URL at the end of the coursework sheet which pointed to a site that had code that did around 90% of what you needed for a passing grade. A lazy student would have copied this, changed a few things, and then spent some effort on the things needed to get from a pass to a first class grade. Only two of my students actually did this. In another course I taught, the back page of my hand-out notes had the complete solution to one of the questions in the assignment that I set. Only 10% of my students even attempted that question, and of those less than half got it right.

I think I blame schools giving grades for effort. It reinforces the idea that putting in a lot of effort is laudable, even if you don't achieve anything.

Your mentality is the reason schools no longer teach grammar. Some students are bad at it and complain: they're "bad test takers", or "the class doesn't reflect real-world tasks", or they're "bored".

That's bullshit. Educators knew it and students knew it. (And laughed to their friends about "getting out" of things with excuses like that.) But I imagine educators tired of an endless cavalcade of students try to wiggle out of actually learning, and realizing that students who don't want to be taught can't be

No certainly, but what if there isn't a program for them and comp. sci. is the closest there is? I'm not saying they should necessarily get a comp. sci. degree, but that perhaps, a better solution would be to grade students in a range of ways- give them a rating on their communication abilities, their implementation abilities, their knowledge and so on. As I say, I really don't know what the solution is and it's not something that can be solved in a Slashdot thread.

I think I disagree - the beauty of programming is everyone codes in a different way.
I taught entry-level CS. A simple java 'print "hello world" 10 times using a for loop' question may only have one solution, but dozens of stylistic variations. Square braces on the same line? Spaces between your commas? System.out.println() or System.out.print?
Cheating in CS is generally pretty easy to catch when somebody is just copying code, because it will be totally out of style with their usual work. The problem com

It's so much easier to believe successful people must cheat then to accept the truth that there are people out there that are actually smarter, more motivated, and more clever. I've known a few people who are multi-millionaire's... and they are all far more talented in those categories than I am.

My ego is small enough that I can accept that I'll never be able to match their talents, nor do I want to work that hard to be that successful.

There's many talented and hard working people (much more talented and much harder working than myself), but only some of them are gazillionaires; the external environment (that I summarize as luck) counts a lot; both who are your parents (which heavily influences how you develop your talents, which schools you go to etc) and being at the right place at the right time.

If you think about it, Bill Gates was probably going to be a millionaire (his parents were very well off, he was (is?) driven, very smart and an SOB:), however, if IBM hadn't messed up, the timing hadn't been right etc he'd probably just be one more millionaire.

Senior year, tons of hellish classes, and two huge project-driven coding classes. Now, one class was group projects, and the other class was solo. And it turned out that 3 of the 4 people in my group were in both classes.

So due date is coming around for both projects and they were due 8 hours apart (midnight thursday and 8am friday) and the two other guys in the group stop working on the group project and start working on their solo class project...Together. I say, "Fine, I

During my time at CMU, I saw very little of this going on. The female students in my admission class were just as good as the guys and didn't need a lick of help (with the exception of one who got a -lot- of tutoring to make it through anything, but she got that through official department channels, not through flirting). The only time I saw it happen at all was non-majors taking CS-127, the Introduction to Programming Course in Java. Unfortunately, introductory programming is a hard course to teach well