There is something that I have noticed about students studying for Computer Science tests, especially at the high school level – it seems that many study to pass the test, but not to understand the concepts involved. It’s a ridiculous scene – watching students pace down the hallway before an exam, reciting bubble sort (and if they make it to University, linked list patterns) as poetry. And while I would also argue that computer programming has certain poetic features to it, such static regurgitation of a memorized fact serves little practical value.
Programming is poetry. Computer programming is a creative expression of unambiguous logical thought. Such expression is bound by the limits of the language’s syntax as much as English poetry is bound by the rhyming
vocabulary of the written language. Though when it comes to English, the poems are not simply recited, but analyzed and discussed as well. The latter points seem to lack in the computer science classrooms.
It seems that technical content takes preference over creativity and logic – pillar fundamentals of computer science. When students concentrate on memorizing oddities of specific syntax structure, the larger picture of a concept behind the coded expression is being lost. The situation arises from students’ lack of complete understanding of the complex and strict languages, frustration of getting things to work “just right”, and is re-enforced by cookie-cutter technical assignments and tests. Some simply give up, memorize the pattern that they are told will be on the test, and… pass. Decent grades paint a very misleading picture of classroom’s achievements.
So what could be done? Clayton weighted in with his articles on Keeping students interested in Computer Science and part two. In the latter post, he talked about challenging oneself with some programming contests, and that is actually an excellent measure of understanding. I have seen a promising student carry a solid 90% average in the computer science class, yet showed an unexpectedly poor performance during the Canadian Computing Competition when the non-trivial questions took him out of the classroom’s comfort zone.
Computer Science classrooms absolutely should borrow from the English class. Encourage creativity and logic outside of the technical frustrations. English language is fairly forgiving, such that spelling and grammar mistakes still allow for an insightful paper to be produced. Programming assignments should be more like essays – much more free form, much more creative, with analysis and discussion. Programming is only the practical application of the material, we should concentrate on the science and art parts of the subject.
University assignments that ask to write a “program” via filling out the function stubs provided by TAs carry as much utility as spelling tests we used to have in the elementary school. It’s time for computer science to grow up.