A common worry for students applying to Computer Science programs at Universities is about high schools not adequately preparing them for the field. Roman, a student at the University of Waterloo, explores the flip side of the issue — sometimes things learned in high school simply get in the way.
As I settled into University of Waterloo’s academic system over the past month, I’ve noticed something that, to me, seemed counter intuitive. People who have taken a year or more of high school programming were having a harder time in the CS135 course than me, who has a combined experience of just over two months (including the month in university). Granted, the fact that CS135 employs the functional language Scheme as its language of choice is a big stumbling block for those with experience in imperative languages such as Java or Turing. High school programmers are challenged syntactically and conceptually, effectively bumping them down to beginner level as they adjust to the new curriculum. However, the problems go beyond that.
It seems (I wouldn’t know, but I draw on conversations with others to make this assumption) that high-school programming focuses on the idea of “just making it work.” My roommate tells me his teacher simply checked if the program worked and gave 100% or close to it. Making contracts, purposes, examples, and tests (as well as templates and data definitions) comes hard after years of simply “making it work.” And though (again, I wouldn’t know) the design recipe may not be as heavily implemented in the “real world,” it a way of communicating with those reading your code. Programming is communication. And communication is not a high-school programmer’s virtue. (Editor’s note: not all University students are better. — Tony) Their philosophy seems to be that the code is to be created and put into a black box until an emergency calls for a (painful and time consuming) review. In CS135, the fact that programming is an act of communication is emphasized heavily. Those who have been continuously told to “just get it to run” are in a hard place.
On the other hand, people who come into the course with no, or barely any, programming experience may find the basic concepts (such as functions, operations, and conditionals) a little more difficult to tackle. However, when it comes to programming readable code they may not be inhibited to the same extent. Their code might be lengthy, ugly, and inefficient, but, in accordance with the “just get it to run” philosophy, so might the code of the high-schoolers. Basically, those who take programming courses in high school can find themselves at a disadvantage, as they have to unlearn bad programming habits while learning a new and very different language. Furthermore, if the dominant idea of high-school courses is to get the program to just run, the marks of a decent portion of the students will be high. The judgment of success based on marks may give them an exaggerated idea of their abilities. They may think “Well, I’m getting 75% in English, 80% in Math, and 91% in Computer Science… I guess I’ll apply to a Computer Science program!” When they get there, the difficulties described above will exceed anything they have ever experienced. If the students are not passionate, the results will be poor.
The point is that high school programming can teach students bad programming habits, entice them to pursue Computer Science as their major (for the wrong reasons), and undermine their chances of success in the field. Again, I’m assuming an average student who does not take an active interest in Computer Science or any other subject and will choose Computer Science based on the grades he/she receives. I believe that with passion, nearly anything is possible. I am not insulting any high-school students, nor am I suggesting one shouldn’t go into Computer Science (high school or university) unless you’re 110% sure you will live and breathe code. I’m pointing that there are faults in the high-school programming curriculum that seem to do the very opposite of preparing students for the challenges of University Computer Science and beyond.