In the real world you don't get punished for using Google or surrounding yourself with people who are smarter than you.
Maybe classroom programming shouldn't punish you either. What if you could turn in any code you wanted as long as you cited where you got it from and which license it was released under?
// got this from John. he explained this to me & now I finally understand how it works!
or
// thanks Google! found this great code on Github (Apache 2.0 license)
Of course, this approach would require assigning different types of projects than we're currently used to, but I imagine students would graduate a lot more prepared for real jobs.
I think that you are right, in that this would probably prepare students for jobs very well.
However, I think that a Bachelor's degree is supposed to be about something other than job training. Sure, there is some overlapping material between "prepare for a job" and "get a Bachelor's degree," but not very much. People who have a Bachelor's are expected to have knowledge that is both broad and deep. That is, they are expected to know far more than they need to know, and have skills outside of their area of expertise.
Not that there is anything wrong with your approach, I just think that it disagrees with the overall goals of a standard university degree program, which is not terribly concerned about job preparation.
If you can just copy and paste answers, with source, then you haven't actually learned anything (technically, you might have, but there is nothing in your work to support this conclusion - unknowledgeable until proven knowledgeable). The grade you receive should be a measure of the skills you have obtained, and the things that you have learned, rather than the results you produce. Sure, you can do this in the real world, but in the real world you are not trying to show what skills you have obtained, you are only asked to produce results - this is the major difference between the education environment and the work environment.
I think that's pretty much the stance my university takes. We are graded on two things for each assignment. 40% of the grade is how well the program works. 60% is how well we can explain the code. That solves the plagiarism problem very well. I think they almost don't care if I copy the code, because if I can explain it, I have achieved what they wanted me to achieve.
I would have never written any code for class if given that option.
In the real world, you do get punished if you need to program something, but don't know how to. College CS classes aren't meant to teach you how to get stuff done using software, they're meant to teach you how to program. Handing in someone else's code is not going to accomplish that.
My CS course allows to use of others code, given proper attribution, but you only get marked on the stuff that you yourself contributed - if you were to take other people's code all the time you'll get pretty bad marks.
I think that works as enough of a deterrent to what you suggest whilst allowing students to get on with making interesting projects and not reinvent the wheel.
Depends on what you plan on doing in the real world. Googling for code snippets will not help you with novel algorithm design/analysis (though here I'm thinking of Computer Science, not "programming").
In the real world, you still have to be able to implement stuff yourself - Google doesn't have everything (and the license matters in commercial development) and you can't make your colleagues do all your work. Yes, Googling snippets/tutorials is not a bad idea, but I don't see where that is forbidden.
>> In the real world you don't get punished for using Google or surrounding yourself with people who are smarter than you.
In the real world, you are generally working on a problem that has not been solved before, so although you might find a few snippets to learn from, most has to be created from scratch.
To emulate the real world, each student or team has to have its own problem. This is possible (as discussed in the post), but raises the level of effort for the instructor considerably.
Admittedly my degree wasn't a comp sci but a design degree, but when we did the programming half of it students were encouraged to use others' code on the condition that it was properly attributed. It was strongly suggested to add our own comments to demonstrate understanding of what was happening.
dds' approach fits the real world not too badly: an employed programmer is unlikely to have exactly the same assignment as their smarter colleague in the next cubicle, and so they have to understand the advice/code of their colleague before they can apply it.
10% homework
25% quizzes
25% midterm
40% final exam
On rare occasions, plagiarism might have helped a borderline student move from a C+ to a B-. But I suspect it hurt more students than it helps - the plagiarism bonus on homework is usually offset by the lack of practice penalty on exams.
I dislike quizs and exams because I view them as memorisation tests. I do badly while those people who can memorise everything so well, don't understand what they're doing.
Do you allow books or computers? I'd think the internet would make it too easy as it'd allow people to communicate.
Some more pet peeves:
* Expected to write perfect code on paper despite students using the IDEs and documentation throughout coursework and tutorials. Professor's response "Practice writing on paper before exam/quiz"
* Timed exam/quizs and it's on paper. I write far more slowly on paper than computers. In fact, I can type for many hours but after one or two hours on paper, I'm exhausted. Professor's response "Too bad / Not enough computers for everyone"
The majority of the points are obtained via understanding.
As for your experience, one can certainly come up with bad tests. Also, tests aren't perfectly fair. But overall, I'd rather penalize people for being unable to work outside their comfort zone than penalize people for not cheating.
I agree that writing code on paper is annoying, but a few things that made it bearable for me were:
- At my school, exams that required writing code by hand were open book and open note (and occasionally even open-laptop with wifi off): no memorization necessary.
- A wide range of syntax errors were acceptable without any penalty to your grade. The questions were designed to test understanding of data structures, algorithms, and good program design, and that was what the grade was based on, not syntax.
- These code-by-hand exams were really good preparation for job interviews that require you to code by hand (or on a whiteboard, which to me is even scarier). I don't know why interviewers don't let you type your code in an IDE instead of writing on a whiteboard, but since they don't, it's nice to have some practice writing code by hand under pressure.
This is how almost every CS and EE class was for me in college. Sure, I could have cheated on all the homework, but if I didn't understand the material, I was going to flunk the final exam. I think cheating is a bigger problem for classes with large assignments you work on outside of class and fewer exams.
This brings to mind a professor at my university, who used to handout textbooks with problemsets which were most of the course's homework. The problem sets would have answers at the back, but he would misprint some of them on purpose that he could 'catch' students cheating from the back of the book.
I always thought that sounded like entrapment - the assignments I tend to learn the most from are the ones that are inherently structured so that there is no way to copy / cheat on them.
That does sound awful. Especially for the students not confident in their answer, finding it's different than the back, spending time trying to get that same answer. I've had times like that where, once I got the right answer, I had convinced myself of the right way to do things and similar problems aren't as hard anymore. In the case of wrong answers, I might convince myself of something that is false.
This is why I think grading on work is more important than the right answer, though of course the right answer and right work should be taken into account. If problems are such that little to no work needs to be shown, they aren't worth assignment as homework.
This makes me wonder about the times I found problems with the answers in the back of the book. It is incredibly frustrating to work on a math problem for two or three hours, look in the back of the book to see if your answer is right, only to find it wasn't, and then to subsequently find out (from the professor) that the provided answer is wrong.
As someone who hopes to be a future professor, posts like this are extremely valuable to me.
I hope that some of the good that's come from this media storm is we'll have a surge of great ideas on how to design courses and assignments to minify plagiarizing.
My observation is that most cheating is one student handing in another's work with little or no changes (maybe a find/replace on variable names, or very slight editing).
The key is that every student writes software as uniquely as they write prose or have fingerprints. I can't get a class to type in HelloWorld.c exactly as presented on a
projector without odd spacings, typos, errors, etc. I watch for submissions which feature the same impossibly identical nuances, usually bizarre solutions (works, but nobody else would do it quite that way) or odd mis-formattings or other things which raise red flags. Find the previously seen instance, and - here is the key - overlay the windows to position the text exactly the same, then Alt-Tab flip between them. The copying is plain, exact when the paltry few guilty tweaks are accounted for. Showing this to the parties involved usually reveals the original author vs plagiarist pronto.
The contention that "it's the same assignment so submissions will be similar" doesn't work when bad formatting is duplicated right down to every extraneous space.
The other way is just watching for submissions well beyond the capacity of the student. For my classes, legit passing students will find it easier to just do the work than to attempt stealing it. In-class participation, quiz results, short answer questions, and lab work will soon show what the student is really capable of. When submissions far exceed what is demonstrated elsewhere, suspicion is warranted and dead giveaways will usually occur.
In the end, a talented cheater cheats himself, not the system. For programming classes at least, there will come a point where you have to perform, at which point the error of cheating one's way to a degree becomes it's own very costly punishment.
Is your goal to get students to understand, or get them to do the work-hours you want them to? If your course is one where a smart student could pass your exams without doing any of the assignments (or conversely an average student who might fail your exams but does well on assignments without cheating), why should you care if anyone does those assignments or even copies them? Just make assignments optional and the tests account for >90% of the grade, and use your cheating-detection skills at test-time where you can actually test understanding.
The problem is that test taking is only minimally useful outside of school, and by choosing tests as the only measurement, you end up optimizing for the wrong skill. (I know because I was a pretty good test taker as a student, but the laziness and procrastination that it fosters is really starting to bite me in the ass right now) I think tests are useful because they're an easy metric, but if you're goal is to teach or learn a skill, tests are a really poor tool.
As a thought experiment, if you wanted to teach yourself something what would you do? You probably wouldn't do it by giving yourself written tests.
If I wanted to teach myself something, I wouldn't be going to school for it. The whole purpose of grades, testing, and catching cheaters is so a school can determine if a certain person deserves some credentials they give them or not. Ideally we wouldn't need them, but you tell me a better way apart from projects (which have their own problems if they're in groups) to measure a student's proficiency in something while remembering they're taking 5 other classes at the same time with professors who may do the same thing.
I do agree with you on possible bite-backs to a highly test-oriented system, and poorly made tests are very easy to game. Lots of students coast through high school and then around their sophomore or junior year of college stuff starts getting hard and they don't know what to do and don't know how to study.
I agree; tests can be too easily gamed. The assessment of courses I described in the blog was mainly based on the coursework. In the programming course a simple multiple-choice exam was used to weed-out students who might assign their coursework to somebody else. In the software engineering course, the "exam" consisted of the final presentation.
>A week later all four groups were given a short-answer test that assessed their ability to recall facts and draw logical conclusions based on the facts.
The problem with this study is they measure learning using test. Of course the groups that had taken tests while memorizing scored better, they got practice.
(more related to the previous post rather than this one, but still on-topic) I wonder how well would automating the process work. Right after the student clicks "submit", show the plagiarism analysis / score (previous article has a pretty interesting screenshot with all the sources annotated / issues highlighted).
Would that be a sufficient deterrent? Would the guys copy/pasting the work cancel the submission if they saw that everyone will know they directly copied 60%+ of the content?
In my university programming class, we submitted assignments using turnitin, the same software you saw in the screenshot. We were allowed to see how much of our programs matched other people's programs, and where it was copied from. Scores of up to 70% were not uncommon because the whole class had the same assignment and example code to work from. The only problem is if your score was near 99%, which would probably raise some eyebrows.
But since we could see what parts were considered to be plagiarized, we could easily change our program and resubmit to avoid the filter. It would only deter the students who were too lazy to change their variable names to something else.
Did anyone submit a pre-processed version of the code? (Assuming your assignments were in C.) If only one person did it they'd probably have high-uniqueness, but if >1 did it they'd all have high-sameness.
No, it was done in C#, and even if it was in C, it's not worth the trouble to preprocess the code anyway. The assignment answers were usually simple but short. Something like sorting a linked list using insertion sort. If you have no idea how linked lists work, it's likely you would copy it. But if you understood linked lists, and already knew insertion sort, you could probably write it on the spot within 20 minutes.
Wow, so you never had to write complete programs for assignments? That "write a sort function" question seems more suitable to what I'd expect on an exam. You find out who knows/doesn't know a lot faster than a homework problem where you may be able to program it at the time but don't understand in general only to fail on the next exam, or maybe you think you know it already so you just copy from somewhere and change variables, but don't really know it, and so you also fail at test time.
Bleh. The whole point of catching plagiarizers has been to determine whether work was done in some expected way, not to make sure learning happened or anything useful came from the work.
The idea is really nice. If I understand correctly he let's the students computer do the grading (and not the server, who he can trust a lot more), but that is just a small security design problem. Allover using a program to solve the problems of a CS class is quite smart and I wonder (since I started to study CS) why not more people do that.
Maybe classroom programming shouldn't punish you either. What if you could turn in any code you wanted as long as you cited where you got it from and which license it was released under?
// got this from John. he explained this to me & now I finally understand how it works!
or
// thanks Google! found this great code on Github (Apache 2.0 license)
Of course, this approach would require assigning different types of projects than we're currently used to, but I imagine students would graduate a lot more prepared for real jobs.