Landing : Athabascau University

Computer science students should learn to cheat, not be punished for it

This is a well thought-through response to a recent alarmist NYT article about cheating among programming students.

The original NYT article is full of holy pronouncements about the evils of plagiarism, horrified statistics about its extent, and discussions of the arms wars, typically involving sleuthing by markers and evermore ornate technological fixes that are always one step behind the most effective cheats (and one step ahead of the dumber ones). This is a lose-lose system. No one benefits. But that's not the biggest issue with the article. Nowhere does the NYT article mention that it is largely caused by the fact that we in academia typically tell programming students to behave in ways that no programmer in their right mind would ever behave (disclaimer: the one programming course that I currently teach, very deliberately, does not do that, so I am speaking here as an atypical outlier).

As this article rightly notes, the essence of programming is re-use of code. Although there are certainly egregiously immoral and illegal ways to do that (even open source coders normally need to religiously cite their sources for significant uses of code written by others), applications are built on layer upon layer upon layer of re-used code, common subroutines and algorithms, snippets, chunks, libraries, classes, components, and a thousand different ways to assemble (in some cases literally) the code of others. We could not do programming at all without 99% of the code that does what we want it to do being written by others. Programmers knit such things together, often sharing their discoveries and improvements so that the whole profession benefits and the cycle continues. The solution to most problems is, more often than not, to be found in StackExchange forums, Reddit, or similar sites, or in open source repositories like Github, and it would be an idiotic programmer that chose not to (very critically and very carefully) use snippets provided there. That's pretty much how programmers learn, a large part of how they solve problems, and certainly how they build stuff. The art of it is in choosing the right snippet, understanding it, fitting it into one's own code, selecting between alternative solutions and knowing why one is better (in a given context) than another. In many cases, we have memorized ways of doing things so that, even if we don't literally copy and paste, we repeat patterns (whole lines and blocks) that are often identical to those that we learned from others. It would likely be impossible to even remember where we learned such things, let alone to cite them.  We should not penalize that - we should celebrate it. Sure, if the chunks we use are particulary ingenious, or particularly original, or particularly long, or protected by a licence, we should definitely credit their authors. That's just common sense and decency, as well as (typically) a legal requirement. But a program made using the code of others is no less plagiarism than Kurt Schwitters was a plagiarist of the myriad found objects that made up his collages, or a house builder is a plagiarist of its bricks.

And, as an aside, please stop calling it 'Computer Science'. Programming is no more computer science than carpentry is woodworking science. It bugs me that 'computer science' is used so often as a drop-in synonym for programming in the popular press, reinforced by an increasing number of academics with science-envy, especially in North America. There are sciences used in computing, and a tiny percentage of those are quite unique to the discipline, but that's a miniscule percentage of what is taught in universities and colleges, and a vanishingly small percentage of what nearly all programmers actually do. It's also worth noting that computer science programs are not just about programming: there's a whole bunch of stuff we teach (and that computing professionals do) about things like databases, networks, hardware, ethics, etc that has nothing whatsoever to do with programming (and little to do with science). Programming, though, especially in its design aspects, is a fundamentally human activity that is creative, situated, and inextricably entangled with its social and organizational context. Apart from in some research labs and esoteric applications, it is normally closer to fine art than it is to science, though it is an incredibly flexible activity that spans a gamut of creative pursuits analogous to a broad range of arts and crafts from poetry to music to interior design to engineering. Perhaps it is most akin to architecture in the ways it can (depending on context) blend art, craft, engineering, and (some) science but it can be analogous to pretty much any creative pursuit (universal machines and all that).


  • A couple (or more) thoughts:

    1. I too have been doing this* for some time.

    *this meaning encouraging students to 'borrow' freely available code and modify it to suit assignment problems. In fact, I've written two of our undergrad courses where the entire course is based on this principle, and rewards properly accredited, documented and discussed use of 'internet' code.

    2. I like "Computer Science", because it makes me feel all "sciency" and warm inside. It allows us to pretend this 'stuff' is a real science, instead of a collection of urban legends and pseudo-science statistical mumbo-jumbo with a large dollop of sociology trown in. :-D

    The term I really, really despise is "coding". As in "lets teach CODING to everyone in K-12". As if "coding" were a real thing beyond the good old "Typing 10" we used to get in grade 9. Sure, the machines foisted upon the trend-chasing edu-set are slightly better than 30-year-old underwood typewriters we used (at least the "k" doesn't stick), the crap and crapware loaded onto them make them amost as useless to young minds. The only "skill" actually learned in "coding" is perhaps typing.

    3. Programming, really excellent programming, is more ART than science. It's an intuition and invention to solve complex problems that involves many of the same centers of the brain as does invention and genius. That's why there are so many "drone coders" working in 21st century sweatshops today. OOPS, did I say sweatshops? I meant to say "enlighened fun, fascinating work places". Same thing, IMO.

    My god, I hate that "coding" word.


    Richard Huntrods May 31, 2017 - 11:29am

These comments are moderated. Your comment will not be visible unless accepted by the content owner.

Only simple HTML formatting is allowed and any hyperlinks will be stripped away. If you need to include a URL then please simply type it so that users can copy and paste it if needed.