<p>Computer Science programs are typically pretty rough but I was a bit surprised to see this article in the news.</p>
<hr>
<p>"Cases in which students borrow code in computer-science classes make up a disproportionate share of the honor-code violation situations heard by the universitys judicial panel. Last year, according to a new report, cheating incidents in computer science classes accounted for 22 percent of the total honor-code violations, The San Jose Mercury News reported. Historically, the computer science department accounts for between 20 to 60 percent of all honor-code cases, even though the courses represent about 7 percent of student enrollment."</p>
<p>The thing about CS courses is that it's fairly easy to catch cheaters because there are automated tools that do the work.</p>
<p>Why would a student copy and paste code from someone else when they could just read the code and rewrite it in their own style? Many CS programs have so many labs that students are under a lot of pressure to get something working and if a student doesn't understand the problem or can't come up with a solution because the tools or insight isn't there, then reading a code solution may not provide further insight into the problem. There often isn't enough time. One thing about CS labs is that you really need to start early (probably true for a lot of other subjects).</p>
<p>Does this article mean that students are actually taking code and copying it verbatim, without even doing as much as changing variable names, or making slight changes in the sequence of operations?</p>
<p>Because for some introductory classes, I would imagine, with short or simple programs, there really isn’t going to be much variation in the logical flow of the programs. So you might get unfairly accused of cheating even if you didn’t.</p>
<p>I mean, how many ways can you write a program to display “Hello World”?</p>
<p>It’s interesting. When I was in college (late 60’s to early 70’s), I served on an “Honor Commission” which enforced the school’s honor code. Even that long ago, a disproportionate percentage of alleged honor violations occurred in computer science. The more things change,…</p>
<p>The article says that some cheating students are taking other students’ programs from laptops or finding printouts in the trash, then making cosmetic changes and submitting the programs as their own. I think that at Stanford, by the third week of class the programs will be complicated enough so that cheating can be reliably detected, and the article says the professors are using automated tools to detect cheating.</p>
<p>I am fascinated by this. Granted, I am not a programmer or computer scientist but I did a fair amount of it in EE. How much similarity does the program have to find to declare it plagiarism? It seems to me that although there will be some differences, in the most elegant and robust programs will always end up being a fair amount of overlap in the class, object definitions, program logic, etc.</p>
<p>In ACM competitions I think they just judge by speed. I always assumed there was a good deal of similarity in the solutions.</p>
<p>Anybody who can explain this to me? I’m curious.</p>
<p>I taught introductory programming courses in college, and students have no idea how easy it is to see copying. You can change all the variable names you want, but the fundamental structure isn’t changed by that – Harry Potter would still recognizably be Harry Potter even if the characters were changed to Henry Sculptor, Gertrude Butcher, and Reginald Muskrat, all students at Pigscanfly School.</p>
<p>There will be some overlap in common structures, but not as much as you might think. Errors also help.</p>
<p>Also, I think that the reason that there is more cheating in the intro to CS programming classes is that lots of kids are required to take it, and unlike many other classes, the concepts are actually quite hard. You can spend a long time trying to figure out an approach to a problem and not really figure it out, you can spend many late night hours struggling to fix an error that you can’t find, and lots of people just have a hard time with the concepts – even people who are very smart in most other contexts. For a lot of students, that into to programming course sucks up a huge amount of time, and they didn’t expect that. (One reason why I was always surprised when football and basketball players were signed up for that class during their sports season. Not a good idea.) The class is usually hugely weighted on the actual assignments, and hugely weighted on producing programs that accomplish the objective. </p>
<p>Yes, students come to college with lots of computer experience, but relatively few come in with more than point-and-click experience. The underlying how-do-things-really-work never came into play.</p>
<p>My experience was that kids who’d played with programming in high school breezed through the intro course, but that many other kids (including science and engineering students) hit brick walls, at least for a few weeks. There are a few “naturals” that just show up from out of nowhere – I remember a linguistics student who was scarily good, and a cognitive psych student who had the most remarkable and unorthodox (but elegant!) solutions to problems, but I can remember a whole lot of other students who were just miserable.</p>
<p>Yes, that’s what I’m asking. What are these ways? Could you give me an example?</p>
<p>For example, I imagine a common introductory program would be to compute the sin of an angle using a Taylor series. In C or Basic I just can’t imagine that you would get 40 identifiably unique programs out of a class.</p>
<p>Maybe in assembly language it would be easier to se the differences.</p>
<p>^^^
I guess it may be easier than I thought. To see for myself I googled up a few samples in java and they are all pretty different. And this is a fairly rudimentary problem.</p>
<p>I think part of the problem as you other posters have mentioned, is that so many of the students hit the brick wall in writing the programs because they don’t get started early enough to leave themselves enough time do it, they always under-estimate how much time it’ll take, once they start the program they realize they have no clue how to go about it for the particular requirements, and they realize the objectivity in the grading - i.e. in some cases if the program doesn’t compile, it’s a zero, if it doesn’t run correctly, it might be a zero or have significant points taken off, etc. Unfortunately some students resort to cheating as what they see as a solution. Fortunately there are apps that can weed out some of the copied (even if somewhat changed) programs. Ultimately all of these students do themselves and their fellow students a disservice by cheating.</p>
<p>While I do not in any way condone cheating - </p>
<p>If large numbers of students cannot get a decent grade in an intro course by working hard, perhaps the level of the course needs to be adjusted to accommodate smart and hard-working students with little to no prior experience, not to mention those who might have real talent if given half a chance to learn fundamental concepts before being expected to advance. </p>
<p>This might be accomplished by giving placement exams. Many schools already do this in subjects such as Mandarin, so that students who did not grow up listening to and speaking Mandarin are not in the same classes and held to the same standards as those who did, at least not in the intro courses. And other departments sometimes offer courses specifically designed for students with no prior experience, especially in areas not commonly taught at a high school level but nonetheless accessed by some students prior to college, that would not count towards a major but might give students a fair idea of whether they have any talent in the area without penalizing them for not having a background.</p>
<p>I don’t go to Stanford, I go to UMich, but last semester I took an introductory CS course last semester and they told us this about how they catch cheaters.</p>
<p>There’s an autograder which also checks for similarities in code. From what he describes I think he was saying I think it in a way follows the code through… He said changing names, moving functions around, switching 2 lines with each other, etc, don’t fool it. For about 4 or 5 of our projects, he said the tolerance was set very high, since there was pretty much just a few logical ways to do it, so many people would have very similar code, but there were a few (near the end of the class) where people’s code wouldn’t have been too similar. </p>
<p>As for “the intro class is too hard if people can’t pass by working hard,” it really depends on what working hard is. On a few of our projects I spent 25+ hours on them (a large portion of that on debugging), while a lot of other people wrote what they thought worked in 10 hours, didn’t test it, and then it didn’t work. Or people spent 15 hours, couldn’t figure out what to do, and gave up. “Working hard” is pretty subjective and I don’t think a lot of people did that. </p>
<p>As for placement, they do that at UMich. There are two classes, one was for kids who hadn’t programmed before, and one was for kids who had. Now, there were lots of people who had programmed before in the one for those who hadn’t (I guess people who didn’t want to be in CS or were just being lazy), but the class really was for people who hadn’t programmed before. And while this is the UMich course, not the Stanford course, somehow I feel that the issues would be the same at each.</p>
<p>My son took Computing I many, many years ago and it was a killer course. But it just got you used to killer courses of which there were more of in subsequent CS lab courses. I didn’t know that some schools require most of their students to take programming courses.</p>
<p>Stanford does not require all students to learn to program. </p>
<p>
</p>
<p>… then that’s a hard course. There’s no A for Effort in programming. If you can’t even get your program to compile, then you can’t program and you shouldn’t get a good grade. </p>
<p>Do they hand out pity As in Organic Chemistry at Stanford? I certainly hope not.</p>
<p>Alright, cheating that goes on in CS 106a, the class mentioned in the article, happens out of laziness. Most people at Stanford are smart enough to figure out the material in this class, it is just a lot of work. It is the easiest CS class offered at Stanford so placement is not an issue. I also looked up the grade distribution for this class, 53% of students get an A+, A, or A- and only 6% got bellow a C or bellow. It is a far cry from some impossible class the kicks everyone’s butts. If you want that look to the chem 31.</p>
Students that cheat like this should be kicked out IMO. And why did he ‘resign’ as student body VP after being suspended a quarter for cheating as opposed to being ousted automatically from the position? It sounds like his major regret was that it was easy for him to get caught rather than the fact that he cheated.</p>
<p>Isn’t that usually the case? Do you think that Bernie Madoff would have felt overwhelmed with remorse if he hadn’t been indicted and thrown in the federal hoosegow? I’ve never understood why people can accept the idea that people cheat but can’t understand why they wouldn’t feel remorse. If they’re cheating, that means they’re unethical.</p>
<p>^^ I understand that there are people who don’t feel remorse but there are some who actually end up regretting what they did from an ethical perspective rather than just that they were caught. And no - I don’t think Bernie falls into that category of feeling ethical remorse - I don’t think he has any ethical sense at all.</p>