I don’t know of many professors who are really “into” code review.
This is so strange.
You would think that a process that provably helps reduce code defects earlier in development would be right up there in intro programming courses, along with “use a debugger instead of sprinkling print statements everywhere”.
So, what gives?
Well, one thought is that perhaps these courses are structured so that peer code review would completely undermine the ability to evaluate students correctly. I’ve been in plenty of classes where I’ve been instructed never to show my code to anyone else. We can vaguely discuss issues on the course bulletin board, but absolutely no code can be discussed directly. For these assignments, team work, plagiarism, and cooperative learning is a big no-no.
At first glance, it’s perfectly understandable: it seems like the only way to fairly evaluate the abilities of each individual student. But still, it seems like that particular teaching model is really missing out on a huge opportunity to give their students valuable feedback.
I have to make some corrections, though. I haven’t been completely honest. I’ve made it seem like I’ve never had any code review done in my courses at UofT, and that’s not entirely true. Quick examples: in CSC180, I did pair-programming with another student – and pair-programming is certainly a type of peer code review. In CSC301, my team would rigorously review the diffs of each other’s repository commits, looking for flaws, and emailing back and forth defect reports. We weren’t explicitly instructed to do this, but it certainly seemed like a good idea at the time for the success of the project.
But it’s nothing like this. Look at it this assignment from Carnegie Mellon. What a great idea for an assignment! How come this type of assignment seems so rare?
Back when I was an Electrical and Computer Engineering undergrad, one of my professors once told me that “great programmers write great code because they read great code”. I think this is something that was missing in my formal education: how to read, review, analyze, and critique code. And above all, what beautiful, elegant code looks like!
In my academic Drama classes, we poured over tons of famous, landmark plays. And of course we tore them apart, boiling them down, analyzing them, critiquing and debating, arguing our pants off… I got good at reading them. My critical evaluation skills in this area are pretty sharp. I can tell when I’m reading something really well done. And, because of this, given some practice, I could probably write something half-decent if I put my mind to it.
So I think that’s something I’m missing from my computer science education. Perhaps there’s a good reason for it’s absence – but if there is, I don’t know it. Instructor moderated peer code reviews, or (even better!) code reviews of industry software…that sounds juicy. That sounds useful. That sounds like valuable feedback and instruction.
It’s too bad it never happened.
Anyhow, I haven’t answered my question yet. I still need to finish my review of Smart Bear’s Cisco study. I’ve also found a case study where code peer reviews were used as part of an introductory computer programming course – I’m interested to see what they found out.
We used to do assignments like this in our SE courses. Here’s one of mine from 2001:
The problem is that is completely un-assessable. You can’t get the students to hand in reports from their inspection, and grade them on it, because they quickly realise it’s easier to fake their reports than it is to do a real code inspection. And the assignment never gets them to understand and internalize the real reasons for doing code inspection – here they just do it to jump through an artificial hoop set by the course instructor.
What we really need to do is to assess code quality, and let them figure out for themselves how the various tools we show them (e.g. test-case first, code inspection, etc) will help them achieve that quality. Better still, we give them ways of measuring directly how the various tools they use affect code quality for each assignment. But I haven’t thought enough yet about how to achieve this.
So, I’ve long since dropped the idea of a specific marked assignment on code inspections, but still teach inspection in all of my SE courses. I need to find a way to teach it so that the students themselves understand why it’s so useful.
@Steve: That’s a good point.
How can we show students that code reviews are useful?
I remember when I first started using version control here at UofT, the only time it really became apparent how useful it was, was when I accidentally wiped out my local copy. Up until then, SVN had mostly just been a way for me to submit my work. Now, because it saved my butt, and I have that experience, I use version control on almost all of my projects – code, or not.
So, is it possible to show students directly that code review will save their rears? If so, how?