How Easy Is It To Cheat In CS?
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."
He/she who cheats discovers later why this is a bad idea.
I cheated and copied this post from another article.
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...
"A door is what a dog is perpetually on the wrong side of" - Ogden Nash
yep... easy to cheat in Counter Strike.
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.
Wall hacks and aim bots, that's how...
... but also cheating in CS:S is not that difficult.
Valve should really stop those nasty cheaters.
Now that I've posted a reply, I'm going to RTFA.
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).
Cheating is laziness by the student but also the teacher who allowed it to take place. 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. The fact is that when you use the same exact assignment year after year you're going to make cheating both accessible and profitable.
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.
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.
Besides, how many ways can you write a QuickSort?
When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
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.
How can I reach theeese keeeeeeeds???
Why people would even try cheating in a CS class at a decent university is a mystery to me. At my school in Cambridge, Mass. (not MIT, the other one), every line of code turned in for intro CS classes was run through a code analysis and similarity detection system. The system was very good, I am not aware of any false positives, and it would be more work to re-engineer somebody else's code to avoid detection than to just write it from scratch.
This system was in place somewhere in the early to mid 1990s (I was a freshman in 1996, and it had been used for at least a year). This was explained to everybody the first day of each of the 2 intro CS classes. There were several people in my freshman class in '96 who were expelled as a result of being caught cheating in CS 50. Oops. Anyway, this is now old technology - if you don't know it exists or don't believe it's so easy to fingerprint code, you are an idiot.
Furthermore, if you were the "cheatee" and there was reason to suspect you willingly provided the cheater with your code to copy, you would both be subject to expulsion. Ouch.
If you are too stupid to realize that when you hand in plagiarized code, you aren't taking a *risk* that you will be caught, you are engaging in the certainty that you will be caught, then you don't deserve to be at a university of this caliber.
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.
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 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 comes when someone is cheating to such an extent that *none* of their code is original!
I've been TAing every semester since I got to college, and every semester we tell people that we run their submissions through MOSS (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.
ttuttle is a rankmaniac
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.
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
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.
You mad
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.
A - You're talking about CS students here. No need to include the possibility of "she."
B - Is that you, Tiger?
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.
The problem with cheating is NOT reuse, but dishonesty; the right analogy is not to reuse *your company's* code or report, but *somebody else's* report or code, which leads to lawsuits against your company and firing. In many (most?) programming assignments in school, you are given starting code (like this one except for ....)
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.
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.
*Never mind that the "operating systems" class never involved leaving ring 3.
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.
You meant computer science?
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 stole bad code once. True story.
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'll do your share of the group project, but I want a copy of the solo thing."
So they give me a copy, and I take it home and try to make it work. Can't make it work. Can't even figure out how it's supposed to work. Ended up giving up and going to bed. Got up, did the solo project from scratch and turned it in 2 days late for a 40% reduction in the grade. Fine.
So I get my grade, 58, missed some little stupid 2 point thing somewhere, woulda been a goddamn 98 grumble grumble. One of the guys from my group came up to me and said, "Hey, what did you get?"
I say "58," and I kinda snarled it because I was pissed.
He says, without missing a beat, "58? I got a 5! Why didn't you give me your code?!"
Turns out the class average for that project was a 7. Heh. Those two jokers never managed to contribute anything to our group project either. We got the highest grade in the class on the group project for that turn in...Not because we were the best, but because the group who was the best let people copy off of them, and they both got 0's.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
Nope; Obfuscation isn't enough. Specialized parsers measuring similarity exist:
http://www.wired.com/science/discoveries/news/1998/02/10464
While you can't catch everyone, disguise is not enough. (And not a measure of skill either).
One of my best friends form high school and I went to the same college. We had the same Comp Sci teacher all throughout high school and we had the same class our first semester.
Well, we had a simple little assignment in class and our code looked exactly the same. We had to explain to the teacher our background and how our identical training produced the same exact code given his requirements.
Except for ending slavery, the Nazis, communism, & securing American independence, war has never solved anything.
In the university of applied sciences that I study at, it would be very hard to cheat during most programming courses.
I especially liked the first two Java courses that I took. They consisted of weekly coding assignments and two exams.
You had to show the finished assignments personally and the teacher would usually ask questions about the code. Why did you do it like this? What does this do? etc. It would become obvious if you didn't understand your own code
Then there were the two exams, one in the middle of the course, one in the end. They were done on paper. They included around five partially done programs that you had to finish. For example, in a course teaching object-oriented programming, there might be a small card game that you had to finish. The game logic would be there, but you'd have to write all the object-oriented code and a main function where you make it all work. The exam would also include printouts of the relevant API documentation.
Cheating would have been hard. Not everyone passed the course, but those that passed, with good grades, really did know how to program.
This all requires a very good teacher who actually cares how his students are doing, though.
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.
In other cases, the deficiency is graver, like, as you pointed out, not knowing basic control flow structures, not knowing what the structured program theorem really means (or even heard of), or not knowing how to decompose problems. I recently had an e-mail exchange (trying to help) with someone who supposedly passed a data structures course (a mid/upper level 300x level course) but didn't know he could call the "pop" method of a stack in a loop n times after having called "push" on it an equal n amount of times.
And now, and just to picture this, it's not just that this poor guy didn't know that he could call "pop" n times after having called "push" n times as well. He didn't know he could call pop inside a loop even though he knew he could call push (or any method for that matter) on a loop. How the hell can confusion possibly occur!!!??!! This was a guy who supposedly passed data structures and algorithms with a B.
All I can think off is that a professor (or several professors) at his university should be kicked out and forced to flip burgers for a living. Because it is not only one person like that, but many, across the board. People like that have to be made to fail or offer a wider curriculum containing a larger number of mandatory 100x/200x programming courses (hopefully using procedural or multi-paradigm languages.)
Too little time is invested in too few 100x/200x programming courses where instructors try to shuffle as many OO-fashionable concepts they can think of - superficial coverage interfaces, GUI programming, polymorphism, generics and what not - when they don't even make sure their students understand the basics - structured programming theory, control structures, modularity on the small, problem solving, divide-and-conquer strategies and so on and so on.
Students that are not qualified or who are not obviously talented on the mental skills required for programming either need to be flunked out or forced to take more programming courses at a lower, more fundamental level. Then they either get the sufficient practice and knowledge to continue or they flunk and try something else. We all have skills at one thing but not other. Schools make a serious disservice to students by watering down requirements just so that they can pass.
Not excusing mediocre students (who don't necessarily cheat), schools and instructors that let them graduate are the bigger cheaters of all.
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.
Needless to say, the student cheating was expelled.
Faith is a willingness to accept something w/o complete proof and to act on it. Reason allows you to correct that faith.
At my University, one of the last classes we take before graduation is a Senior Seminar class, at the time the class was about ethics. Well, the class was assigned a paper to write about ethics. The professor actually read the papers, upon reading one girls paper he said.....'Hey, this girls English isn't this good. There is no way she wrote this. He googles the first time of the paper, bam, this 25 page paper pops up. Turns out she had copied and pasted 14 pages of the 25 page paper and turned it in. Well, she was kicked out of University one class from graduation. I thought it was rather funny. She ended up moving back to India, who knows what happened after that.
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 lessons of history teach us - if they teach us anything - that nobody learns the lessons that history teaches us.
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.
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 because you have to teach people who to think in a completely different way (unless, of course, they already think that way). Most universities are not good at doing that and instead wind up just weeding out the people who don't have an easy time programming. CMU was no exception. I did my best to help talk some people on my dorm floor through CS-127, but it was really tough for them because they just couldn't think about things the correct way. At this point, the CS department has revamped that whole structure, eliminating the course and replacing it with a number of different alternatives based on level of experience so that people who've nver programmed before can start with Alice rather than Java.
But I suspect that part of what's happening at Stanford is people who've never gotten a B in a course in their lives are suddenly facing a C or D in intro programming and panicking. You can't just study your way to an A in intro programming because it's not about memorizing, it's about thinking differently. You have to get it.
And really, I think it can be taught better, but it will require making some substantial changes in approach. When we see rampant cheating, we need to ask what we can change which will decrease this. Some of what we can change may be improving the nature of the instruction to students.
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 compile works. So I remove this and I go further down, insert BEGIN END., exit and try a compile, and this time it faults with an error, the same one he's getting. So I go upward and try again, and eventually - meaning in about 3 minutes - I find the problem and it was a very subtle bug even I didn't spot, he had left an open brace { in his code, so, it ignored everything to the next close brace, or the end of the program, (I forget which), because it treated everything from that point on until the brace was closed (or the end of the program), as a comment.
The guy was absolutely amazed that I found the bug as fast as I had. He had been spending something over 2 hours trying to find it, and not succeeding. I found it in less than five minutes. It could be that I was a fresh pair of eyes, or it might be I'd had over 3 years (then) experience doing programming didn't hurt either...
The lessons of history teach us - if they teach us anything - that nobody learns the lessons that history teaches us.
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.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
I guess it defines what you mean by 'cheating'. A few months ago I asked my how much I'd take for a car I owned that wouldn't run. I told him $500 because the body was in good condition. He offered me $200 and I accepted it. What he didn't know is that I would have given it to him for free if he would have just gotten it out of my garage. Is that 'cheating'. I'm sure if he knew what I would have taken for it, he would have felt cheated. But he probably feels he got a deal, he got it running and it's probably now worth more than what he paid for and put into it. Did he cheat me???
.. was I lying when I said '$500' when asked how much I'd take for the car. No .. I would have taken $500 for the car. But I didn't tell him I would take less. Is leaving that part out lying by omission?? Does that make it cheating???
... could I have gotten more??? No one will tell you the highest salary they are willing to pay, just the one they think they can hire you for. We all would probably accept a higher salary than we think we are worth if we could get away with it. Would that be cheating also???
Copying someone's code is cheating because the school says it is. Is it cheating when you take advantage of someone who doesn't know all the facts, or if you don't provide them?? That's what successful people do, take advantage of someone's lack of knowledge about a business transaction.
Cheating involves deception
In any business transaction, I'm sure a large portion of the people feel cheated afterward....that doesn't mean they were. I sometimes have felt cheated after taking a job offer
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
We had a build system. So you check your code into your branch in source control and request a build. The system would then rebuild everything from scratch in the right order and put it on a server where you could just copy back to your local system. (All of this was automated.) The guy didn't even try that. (I mean all he had to do was check in his code at the end of the day, request the build when he left and the next morning it'd be done.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
Yeah. In a mid-level CS class once I just had no idea how to do the problem set. It was a bit above my ability, and I hadn't left nearly enough time to complete it. A friend gave me his solution from the previous year, for reference. I felt it was okay if I could read his, understand it, and apply the understanding to my own code; but after trying, I didn't understand it, and didn't have time to apply anything to anything.
I turned in my own work, which was incomplete and didn't fully 'work'. I received a fair grade (above zero, below failing) and learned to try a bit harder next time. My school, like Stanford, had an Honor Principle, and I respected that very much. I appreciated that our exams were usually not proctored, and professors weren't usually going out of their way to look for cheating (but of course would deal with it when it came up, which it did sometimes), so I kept my nose clean.
I remember the last time I distinctly cheated on a test: it was a grade school spelling quiz. I got semi-caught. I don't think that was the lesson which changed me forever, but somewhere along the line I decided that, for me, I was comfortable enough with my ability level that I didn't want to make a habit of cheating.