I was just listening to the introductory lecture for an Introduction to Algorithms course at MIT, thanks to MIT Open Courseware. The professor was reading from the syllabus on the collaboration policy for students doing homework. Here’s a piece of it:
You must write up each problem solution by yourself without assistance, however, even if you collaborate with others to solve the problem. You are asked on problem sets to identify your collaborators. If you did not work with anyone, you should write “Collaborators: none.” If you obtain a solution through research (e.g., on the Web), acknowledge your source, but write up the solution in your own words. It is a violation of this policy to submit a problem solution that you cannot orally explain to a member of the course staff. [Emphasis in the original]
So in other words, you can collaborate within reasonable boundaries as long as you cite your collaborators, but you must write up work on your own. Normal stuff for a syllabus. But what I love is the last sentence. If the professor or a TA believes that you didn’t really write up the work yourself, they can ask you to stand and deliver via an oral explanation of what you turned in. And if you can’t orally explain, on the spot, what you did to the satisfaction of the course staff, then the presumption is that you cheated. That’s a brilliant way to ensure students understand what they are doing, and expecting students to be able to do this oral explanation is absolutely reasonable for university-level upper-division work.
Maybe everybody does this already; I’ll be building that into my syllabus for Linear Algebra next semester.