I thought about the part of cheating and I think that at least in the academic world there can be a solution for that.
problem (written by Reinhard):
"pupils could 'create' their solutions and articles to tasks given from their teachers by searching in the web for foreign solutions."
solution:
pupils will have to give not only the final source code but all the process of work that was done so the teachers can watch all the process of creating the source code from start to finish including cases when the pupil generated a bug and fixed it and what they did to fix it.
I think that checking all of this work can be more productive for pupils because teachers can suggest them more efficient ways to find bugs in the future or better ideas how to avoid bugs in the first place.
Giving only the final code as the solution not only encourage cheating but also is less productive for the pupils.
The problem today(that in theory can be easily solved) is that I do not know of a way to save automatically all the work that was done(I can say undo redo but only for a limited time) and there is no reason for that because there are many terabytes that are not used and saving all the process of writing code in a special file certainly requires less than 1 terabytes.
Uri