On Sat, Sep 16, 2017 at 4:09 PM, David <david@kdbarto.org> wrote:

The other thing I did was to have students give their programs half
way through the project to a randomly chosen (by me) other student.
They were not allowed to assist the recipient and grades were based
on how well the final program met the requirements given at the beginning
of the project. Code quality went way up on the second project compared
to the first.
CMU used to have a required SW engineering course that did that.   It was the 3rd course required after Data Structures and before Compilers, OS or anything 'large.'  It was a Mary Shaw innovation.   I always thought it was brilliant.   The CMU course assumed you worked in 3-4 person teams and at least two transfers were done over the course of the semester.   Your team was not allowed to replace whole sections of code.   If you thought your team got screwed somehow, you could appeal to the TA, who could chose to give you a different group's code yet; but could not use you own last version.

CMU stopped teaching the course a few years ago - I gather it was really tough to admin - students always b*tched about, but they did learn a lot of practical stuff.   But when I took it, I thought it was one of the best courses I had as an undergrad in ~75 (we build an airline reservation system in Algol).   It was my first exposer to source control, peer review, excellence in commenting, full documentation, etc.. -- so many ideas that I so take for granted.

Clem