Teaching real-world programming

The title of this post is borrowed from an article at the MIT (original article at Teaching real-world programming) about a programming course at MIT that uses professional software developers to help mentor students. The professionals perform what amounts to a code review of student code. The review is not part of the grading process but part of the learning experience. I love this idea. For me learning rather than grading is what a good educational experience should be all about.

The professionals volunteer and since the Cambridge.Boston area is a hub of hi tech companies and working with MIT is a high prestige sort of thing they don’t lack for volunteers. So this program might not work everywhere. But I wonder if it could be tried on smaller scales at least at other places – including in high schools. I can see it being very helpful. The article highlights a couple of things I learned while I was teaching. I hear similar things from other teachers. For example:

Harried professors and teaching assistants can look over the students’ code and flag a few common and obvious errors, but they rarely have the time coach the students on writing clear and concise code.

Students often don’t care how clear or concise their code it. They are just in a hurry to get things done and in for a grade. Learning to take their code to the next level (clear and concise) takes a bit more work. Friends of mine have talked about coding apprenticeships which beginners learn by working side by side with “master programmers.” This is often what happens when people leave school and take their first software development job. It would be nice if they could get some of that in school though.

Also programming is really more like a craft or even an art than a true engineering science. I know that is a matter of contention but while I would like it to be real engineering I don’t think we are quite there yet. And so programmers need to developer a style. As it says in the article:

In many computer-science classes, Amarasinghe says, professors trying to preserve intelligibility will insist on a particular style of coding, which may not be natural for some students and, he says, can actually lead to bad code. “The way we look at programming, it’s like writing an English paper,” he says. “If you are in English class, there’s no set way of writing.” What’s important is that a programmer’s style be consistent, not that it slavishly ape some model.

A mentoring process with an experienced professional can help students develop that style while also developing a clarity of thought and of coding that will serve them well.

How might this work in a high school? There are probably several ways but I wonder if a small number of volunteers could dedicate a day where they code review individual or small team projects. Perhaps in the middle of the semester or near the semester break of a year long course. Ideally the project would be reasonably complex – not too long but long enough for personality and habits to be visible. The reviewers would get advanced copies of the code and so come with questions. I see this working better by starting with questions “Why did you do this?” “What does this do?” “What other ways did you consider?” and on and on. Spend an hour or so going line by line perhaps. Seems like it might be useful.

I’ve quickly reviewed student code on visits to schools in the past BTW. Generally I only have time to scan the code and ask a few questions. What is amazing is how often I ask or tell the students things they have heard from their teacher. Students are surprised when this happens though of course they shouldn’t be. I like to think that these outside comments help build teacher credibility as well as reinforcing learning. Doing this on a larger more formal set up seems like a valuable effort.

The hard part I admit will be finding the volunteers though. One place to start? Find out if there is a local chapter of the ACM or the IEEE Computer Society. People who are active in these groups tend to be the people who are interested in developing the next generation. Also industry advisory board for career technical schools or even community colleges. They are out there.