Why Computer Science Students Cheat
alphadogg writes "Enrollment in undergraduate computer science courses is at an all-time high at colleges nationwide. But this trend that's been hailed by the US tech industry has a dark side: a disproportionate number of students taking these courses are caught cheating. More students are caught cheating in introductory computer science courses than in any other course on campus, thanks to automated tools that professors use to detect unauthorized code reuse, excessive collaboration, and other forbidden ways of completing homework assignments. Computer science professors say their students are not more dishonest than students in other fields; they're just more likely to get caught because software is available to check for plagiarism. 'The truth is that on every campus, a large proportion of the reported cases of academic dishonesty come from introductory computer science courses, and the reason is totally obvious: we use automated tools to detect plagiarism,' explains Professor Ed Lazowska, chair of computer science and engineering at the University of Washington. 'We compare against other student submissions, and we compare against previous student submissions and against code that may be on the Web. These tools flag suspicious cases, which are then manually examined.'"
True CS curriculum require a massive amount of critical thinking and other analytical skills. Something the recent graduates of HS are not prepared for. Match that up with the sense of entitlement and you get expected results. Back when I was in CS the dropout rate was around 90%. There were no rent-a-coders and using the web for a resource was a very new thought. So it was write your own damn code or head over to liberal arts...
CS: It is all sink or swim...oh and did I mention there are sharks in that water?
They're cheating just as much in other disciplines, it's just in CS we have a lot of good tools to catch them. Plus, we get a lot of false positives with no defense, so we get to inflate our successful catch statistics.
"Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
This would be flagged but wouldn't pass the manual review. As a former Graduate Teaching Assistant, cheaters are easy to spot because they are LAZY! They turn in the exact same files (same comments with same misspellings) with maybe a different name at the top. The only good way to cheat is to make sure every things is perfectly correct and has no identifying characteristics.
When the most optimum solution to any problem is frequently the same code, and the same exact question gets asked every single time for that course, is it cheating or is it just optimization?
I use code libraries and recode old stuff to new uses every day - is that cheating or just efficient coding?
-- Tigger warning: This post may contain tiggers! --
Enrollment in undergraduate computer science courses is at an all-time high at colleges nationwide. But this trend that's been hailed by the US tech industry has a dark side: a disproportionate number of students taking these courses are caught cheating. More students are caught cheating in introductory computer science courses than in any other course on campus, thanks to automated tools that professors use to detect unauthorized code reuse, excessive collaboration and other forbidden ways of completing homework assignments. Computer science professors say their students are not more dishonest than students in other fields; they're just more likely to get caught because software is available to check for plagiarism. 'The truth is that on every campus, a large proportion of the reported cases of academic dishonesty come from introductory computer science courses, and the reason is totally obvious: we use automated tools to detect plagiarism,' explains Professor Ed Lazowska, chair of computer science and engineering at the University of Washington. 'We compare against other student submissions, and we compare against previous student submissions and against code that may be on the Web. These tools flag suspicious cases, which are then manually examined.'"
the preceding post was not spell checked... suck it.
If the person you copied it from also mistakenly used an assignment operator instead of a conditional, then yes. :)
And the masses cried out, "09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0!"
Is this not the goal of code re-use? I mean, if there is no copyright violations, that's what ppl should do... Schools are always trying to make you implement retarded things anyway...
You re-use code to avoid "reinventing the wheel." The intent is to 1) save time developing what already exists, and 2) take advantage of all the debugging that was already done for you.
The goal of getting a CS degree is to understand what the fuck a wheel is. Copying from expert sex change is not going to make you a good computer scientist; it won't even make you a good software developer.
DATABASE WOW WOW
I used to cheat in college, and all my friends do. I don't cheat anymore. My secret? I switched to a major I like. For the most part, I enjoy and look forward to assignments, and haven't cheated on any since changing majors. For me the subject is CS, but I'm sure that most people could find something they like well enough to look forward to assignments.
That's taken out of context. In context, it carries a clear implication of "manually examined for the specific purpose of confirming or denying plagiarism", on top of whatever manual examination takes place for the purpose of confirming or denying that the code is any good.
One of my lecturers decided to test our university's plagarism software as it was coming back with a unusually high number of false positives. As soon as he submitted a sample he wrote it came back positive for plagarism even though he answered a question just using the knowledge he had gained over his 20+ years experience in the industry. He and many other people in the department put hardly any weight on the results that pop up. His issue with using it is that the content of the course changes so little that with every iteration of students passing through the school its more likely to have incorrect results as its saves a copy of the submission to add to its database. I myself have had work come back as plagarised beacuse there arte only so many ways to write the same damn sentance.
for (indexnt index=1;index=10;index++) { System.out.prindexntln(index); }
What are these unneccesssary scribblings you're adding to your code? This is a job for a single line:
System.out.println("12345678910");
I am the richest astronaut ever to win the superbowl.
It's neither new nor subtle; it's why expertsexchange now hyphenates their URL: experts-exchange.com.
DATABASE WOW WOW
The many examples here of array declarations or variable initializations are not sufficient to get you pegged as a cheater. But when you get multi-line programs of dozens of lines that are precisely the same, even including comments, THAT will ring alarm bells. I don't think anyone writing a simple 'Hello, world' program that is exactly like mine will get called out. If you turn in a hundred line program full of regression equations to plot the Fry Readability Index in a matrix graph that is precisely like mine? Busted!
How about a moderation of -1 pedantic.
So, back in the 'day (1989 or so), I was grading for the first data structures course for computer science majors, and wrote a very simple program that stripped comments out of programs and then counted the number of semi-colons, colons, parentheses and so in in each program's source code, then sorted them. When two programs were sufficiently close, I compared them side-by-side and came up with more obvious cheaters than I was expecting. (Including one from two roommates who happened to be alphabetically next to each other.) If those programs have advanced *at all* in 20 years, they're now comparing parse-trees.
The problem is that computer programs have structure, and it's impossible to copy somebody else's work and then 'only' replace the underlying structure. Instead, cheaters reorder their code, add a bunch of comments, rename variables, change indentation and so on. That sort of thing doesn't change the structure, so it's easy to catch.
And, yes, this method only works on sufficiently large programs -- there are only a handful of ways of doing "Hello World." But, nobody cheats on "Hello World."
I disagree. Computer science has never really been about what happens in the real world. What happens in the real world is engineering. And before you scoff that most code you've ever seen is terribly engineered, remember that these people didn't study engineering at all -- they studied computer science. The problem is that people keep trying to glob CS and software engineering into a single idea, when it's not. CS is no more engineering than organic chemistry is chemical engineering. The goals, practices, daily ways of thinking are not the same.
If I work with CS graduates who can't engineer their way out of a wet sack, I'm not very surprised, because engineering wasn't what they actually studied. And it's not their fault either, because the distinction is never explained in the first place. Students are prepared and told that to be a programmer, they need to study CS. I think CS is something you should study if you want to be a computer scientist. If you want to develop real world code, you need to be on an engineering track.
I have a similar question,
If someone asked me to (in Java say) print the numbers from 1 to 10, I would probably do something like
for (int i=1;i=10;i++) {
System.out.println(i);
}
So would most other people. Would this flag me as a cheater?
A unique way to learn a language: http://languageloom.com
Woosh.
There is no need for an assignment like that to be scalable (as is kind of his point). If they were going for scalability they need to be using more variables, like i=x;i==y, and then setting x and y previously so it actually counts the range dependant on what you pass it. And then take out i++, because you don't know if you'll be iterating by one. Maybe you'll need every second number, or third number.
The amount of things you can do to make a simple project "Scalable" is very overwhelming. You need to assess at what point does a scalable option becomes pointless.
And in the case of counting from 1 to 10, he said scalable options ARE pointless already.
If someone asked me to (in Java say) print the numbers from 1 to 10, I would probably do something like
for (int i=1;i=10;i++) {
System.out.println(i);
}
So would most other people. Would this flag me as a cheater?
No, the system would flag you as being wrong. "i=10" would give an error either in compile time in a strongly typed language, or in runtime in a loosely typed one. FAIL.
by Mike Buddha -- Someday the mountain might get him, but the law never will.
But we didn't wirk togehter you isnensitive cold!!
"This post contains words, known to the State of California to cause thought. Wash brain thoroughly after reading."
One of the more amusing moments of my time as a Graduate Teaching Assistant was when I caught 3 students working together in a class where no collaboration was allowed. The sad thing is that in this particular class, there was only one correct way of doing the assignments, so anyone who did it correctly could not be caught. These three had such a horribly wrong answer that there was no way that 3 independent people could have gotten that answer.
It has always bothered me why CS assignments in some classes are so strangely off from what is supposedly being learned. Often there is some trick and the solution can be found only by not being deceived by the weaselly wording of the assignment, nor by being misled by the current subject matter in the class.
If you are already a successful programmer, these CS projects seem especially surreal given that "cheating" is the label given for all those things you would do in real life to learn and solve, including collaboration and seeking example code.
As an assignment in a computer ethics class I gave a talk on how the internet was going to bring college level CS education, especially self-education, to global masses. (Some universities even put their class materials online and available to everyone.) The idea was that once these useful information and materials got out there, they become part of a more advanced world culture.
During Q and A the teacher criticized that I didn't account for how hard it was to come up with new problems year after year to test and grade CS students, and that putting everything online made this only more difficult. The teacher was actually advocating holding information back to make it easier to rate students.
I answered by saying that there are two competing motivations for teaching methods in university classes: one is to enlighten, feed and grow minds, especially all the minds that paid through the nose for the service; the other was to "weed out," and to grade--like putting the class into a series of sifting screens--the course objects getting removed first and labeled low grade, and the finest ones coming out the end and getting labeled "academic excellence." I asked how much the former was to be sacrificed for the latter.
Didn't finish that class.
So how did writing the tuition check feel after knowing they were rubber stamping things? It would piss me off knowing I was supporting some lazy ass professors.
WTF? Over?
But we didn't wirk togehter you isnensitive cold!!