Intelligent Laziness: Plagiarism in Computer Science?
Recently, I came across a survey on plagiarism in college-level computer science. This got me thinking about the amount of focus universities give to plagiarism in other disciplines versus plagiarism in computer science, and about the concept of code sharing forums and open source programming in general. With the enormous wealth of clever solutions, algorithms, and tutorials online and off, is plagiarism really an issue worth considering in computer science?
Merriam-Webster defines plagiarism as:
- the act of using another person’s words or ideas without giving credit to that person
- the act of plagiarizing something
Now, M-W’s penchant for recursive definitions aside, what does this mean? The act of using another person’s words or ideas — well, we are all familiar with that concept, on one side or the other. But what about the second half of that definition? Without giving credit to that person. Aha, perhaps this is where the issue is.
In computer science curricula at colleges, there doesn’t seem to be a standard in teaching documentation early on. As a computer science student at Rutgers University, I haven’t yet been taught officially by the computer science department to give credit to online sources of code. If I do give credit where due, it is only because I learned to do so on my own.
So the question becomes, if students give credit wherever they use online sources, is it then acceptable for them to copy online code?
Well, if the goal in college was to get better grades, the answer might be no. Since students who find relevant code online might have an unfair advantage over students who did not, plagiarism by one student affects other students as well; it skews averages for grades on projects, assignments and exams, and it can give students who elect to do everything on their own an unwarranted feeling of inadequacy.
Especially in computer science, not just as a discipline of study but as a field as a whole, there is (as there should be) more emphasis on skill-set and understanding than grades. Ultimately, the student’s success in the industry comes down to their set of tools and skills in different areas of technology. As such, cheating for getting better grades is a non-issue, and any computer science students who fixate on grades above understanding and acquiring knowledge needs to reevaluate either their perception of reality or their major. Perhaps they would be more comfortable with B.A.s in HR?
Nevertheless, the major is about learning. While it’s perfectly fine if students choose to find solutions online, they should probably use the code as a last resort or a check rather than jumping to such resources as a first impulse. Students who consistently copy code from the internet without understanding any of it will become the worst software developers, and with the job market for computer scientists so congested as it is, the last thing the world needs is more sub-par programmers who have made copypasta the foundation of their programming technique.
These students are also the ones who will quit the major because they feel it’s “too difficult”, when the truth is they opted for the easy way out when learning the prerequisites needed to learn more advanced material. This is obviously not a winning situation for either a student or an instructor. So what then is the balance? When is using code from other sources allowed and when is it not?
At the end of it all, what it comes down to is intelligent laziness. Intelligent laziness is what spurs programmers to automate a task so that they don’t have to do it anymore. Intelligent laziness is what allows a software engineer to black-box the operating system while still optimizing software to take advantage of it. Intelligent laziness is why, almost 200 years ago, the mathematicians and scientists of old began using the Babbage mechanical “computer” instead of scratch paper.
Intelligent laziness, in a word, is the cornerstone of the computer industry.
Intelligent laziness, which admittedly is a self-coined term, is choosing not to formulate a mechanism from base principles despite knowing the theory and background required to do so. If I’m implementing a mergesort as part of an application in Ruby, and I know how to implement a mergesort algorithm but don’t want to deal with the nitty-gritty of Ruby syntax, I might pull a Ruby mergesort implementation off the internet. And that would be completely fine.
Moreover, given that research is also an essential skill in software engineering, researching an algorithm or behavior is still a useful experience. The only time an issue arises is if the researcher doesn’t understand the algorithm or behavior and chooses instead to use someone else’s implementation anyway.
If a computer science student decided to research an algorithm and take code off the internet after analyzing and understanding the principles involved — and also credited the online source, I don’t think anyone could have a problem with that.