As far as I understand, there are teachers here, leading all kinds of practitioners. Here, I share with them (I put up for discussion) pedagogical thought :) We all know how difficult it is to defeat a student to copy and copy various solutions from the Internet (by the way, this is not at all bad - in everyday practice, for example, copy-paste programming is useful tool, but it should be reasonable). Below is described the method of at least some opposition to mindless copy-paste using version control systems.
In general, standard tasks are individual tasks. But when, in addition to teaching, the teacher also needs to work on his dissertation and work for money, and students from different courses show great cohesion and happily share with each other the experience of solving these very individual problems in the form of ready-made source texts, it is not at all fun to invent these are the most individual tasks. And it is pointless to apply sanctions in such situations - this is just the reality, it has become too easy to copy-paste, and this should be taken into account. Well, yes, you can punish Copipaster, but the goal of education is not to punish, but to teach. Yes, and for punishment you need to remember that three years ago, a student showed the exact same code. And, suddenly, the teacher thought that he had seen such a decision? Or, suddenly, a student is not a copy-paste at all, but simply thinks about the same as the person who solved this problem three years ago.
')
But to deal with the 'stupid' cheating is still necessary. And then a thought comes to mind: we also have wonderful version control systems plus a wonderful
github.com resource (in general, any one that allows you to conveniently view changes made between commit'ami, just Github is suitable - it’s like a theorem of existence, such resources there is).
Nothing prevents us from giving the student what is necessary to set off the solution of the problem: it should be laid out as a repository on Github, while the stages of work on the task should be marked with separate commitments and accompanied by sane annotations.
What is the benefit of this: (1) a student learns to work with a version control system; (2) the teacher can easily determine the situation when one repository is cloned / copied from another, that is, when a student has taken up mindless copy-paste; (3) if a student is still engaged in copy-paste, then he is forced to copy-paste wisely, piece by piece, giving logical annotations to those parts of the work that he gradually copies to create the appearance that the work was not completed in one step - not bad, there is a chance that through such copying the student is at least aware of something.
(4) if the student decides to automatically create a new one through the sequence of checkouts and commites from the old repository (that is, when a student makes a checkout of the next commit from an existing repository using a certain script, corrects the file creation dates and commit this pseudo-new a piece in the new repository), then this situation is monitored if we ask him to upload the result as a git repository, for which logs are easily generated with a list of all comments and the teacher can simply search the similar comments in the text of the comments, and Overy as two works are similar. Or, for the repository, you can generate one large patch, summarizing the change history since the repository was created. By such patches, you can also easily track such a recreation of the new repository in the old way.
Here it is. As a result, the requirement to donate works in the form of repositories of some modern version control systems with the annotation of the steps of working on the program may well complicate the life of the unprincipled and thoughtless copy-pasters.