Show Me The Code
One of our graduating seniors shared the below blog post with me, and I shared it with all the faculty who teach the lower division courses in Georgia Tech’s College of Computing. Andrew makes the strong statement in his blog post: “Students shouldn’t be able to graduate with a Computer Science degree from Georgia Tech without being able to read and write production quality code.”
My sense is that most of the faculty who have responded agree with Andrew. Our students should know how to read significant code (e.g., walking through the whole Linux kernel in OS course). One of our professors talked about the value of watching his own code be rewritten by a professional, expert programmer — it was stunning how much better the code got. We could teach more about reading production code at the University, but I’m not sure that we could teach enough about writing production code at the University. As Bjarne Stroustrup pointed out, faculty don’t build much these days. Programming well has much in common with craft and art, and it’s not something that the University does well.
If the University could not teach reading and writing production code well, where should students learn it? One answer is, “On the job.” Craft is often taught as an apprenticeship. I worry that the computing industry has given up on its professional development responsibilities. We talk about people being lifelong learners. Is that entirely an individual responsibility? When I was at Bell Labs and Bellcore, there were dozens of classes that I could (and did!) take. Where has that gone? Is everyone a contractor these days, or does industry have a responsibility to develop its human resources?
My research interest is more in the computing that everyone needs, and in that sense, I agree with Andrew, but without the word “production.” I fear that we focus too much on having students write code, and not enough time reading code examples. Worked examples are a powerful approach to learning that we simply make too little use of in computer science. We emphasize so much that computer science is about “problem-solving” that we only make students solve problems, as opposed to reading solutions and learning to learn from reading. I’m preparing my CE21 proposal now, and spending a lot of time learning what educational psychologists know about how to write examples that students learn transferable knowledge from — research that we pretty much ignore in computing education.
Literacy is about being able to write and read.
As I come closer and closer to graduation, I’m looking back at the Georgia Tech Computer Science program, the things it did well and not so well.
One piece I feel is missing in the curriculum is having students read good, high quality code. We’re asked to code alone and code in groups, code in labs and code in dorms, code on paper and code in IDEs.
It seems like the administration and professors think this skill just magically appears with practice. I disagree, and I think we can do better.