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.
Sounds like CS135’s Scheme managed to do its job — it leveled the playfield for incoming students. I’m glad to hear that you are keeping up with the program; and that students who previously have done some programming still have enough to learn.
Reply to comment
That may be true, but there’s a larger problem.
Many people that want to take a programming course in high school not only learn bad habits…
But they start in a language like Visual Basic.NET or HTML (try not to giggle… many schools define HTML as a programming language).
Both of which are completely irrelevant to the real world of programming that doesn’t involve legacy “everything is Windows, top to bottom, so who cares how it’s written” systems.
–Kyle
Reply to comment
I’ve heard similar comments from many university faculty. The problem is not that the learning is from high school but that it is coming from poorly prepared teachers. It’s even worse from many self-taught programmers. I’ve had many of my students go on to university where they wound up helping many of their peers. A few have gone to less competitive colleges and found that they spent time correcting faculty there. There are trainings available for HS faculty but too many of them are not really interested in taking the time or spending the money (especially their own) to take them because they would rather be teaching something else.
As for Kyle’s comment about VB .NET I’ll just say that a lot of really good programmers are doing a lot of really good things with it.
Reply to comment
It depends on the school and the teacher. I took ICS3M and ICS4M (grade 10 and 11 comp sci in Ontario) and took the AP exam in grade 12 as well, and I received credit for the first comp sci course at UofT because of my AP credit, I aced the next programming course with a 98% because almost everything was review (except for trees, basically), and I jumped straight into an enriched second year theory course which I also did really well in.
Granted, I went to a private school.
But I think the point still stands. I had a huge advantage from my high school courses, but that’s because our teacher cared and the school gave us a chance to do the AP course in grade 12.
Though, the fact that this is often a problem elsewhere does suggest that it’s systematic, even if it’s not *necessarily* a problem due to the system.
Reply to comment
Indeed. I think the problem is a combination of many factors, including a poor curriculum, inexperienced teachers who are not passionate about the subject, and students who take the course as a joke. *Strangely*, those three things are not unrelated.
Reply to comment
I think Universities must be taking part in the formulation of the High School computer science curriculum.They must ensure that this curriculum incorporates all the necessary prerequisites that would prepare a student for undergraduate studies in Computer Science.
Reply to comment
Although I graduated from High school back in 2000, our school had a rather advanced computer programming as well as web authoring curriculum. I didn’t end up majoring in Computer Science in college but the classes I did take at Rutgers ended up being a breeze because of the HS curriculum.
Reply to comment
I couldn’t agree more. I wrote thousands of lines of code before I ever took a high school programming course, and was majorly disappointed when I did. None of the concepts of software engineering practices and skills were used. Most students’ code tends to be the worst you could imagine. No wonder this skewing of proportions of the field and illusions of abilities based on useless high school “grades” create havoc in post-secondary education.
Reply to comment
I agree with many of the issues you are putting forward.
As an undergraduate, I understand what you’re talking about. The “get it to work” idea is all too common. I find that lectures consist of mainly just getting a program to work, and not teaching the workings of the program.
This has left many people behind in my course.
Reply to comment
I took Computer Science AB my senior year of high school. I have to say I was very well prepared for college. I had a wonderful teacher who decided that teaching for the AP test wasn’t necessarily the most important thing he should have been doing.
Reply to comment
I agree and disagree. On my course at university there were a hell of a lot of people turn up who had never written a line of code ever and when reality hit decided it wasn’t what they wanted to do.
Sure you can be taught badly and pick up bad habits but surely it is better to have a taster before you arrive at university. The whole point of a university course is to go in to a subject in great detail and this is the proper place to loose those bad habbits you have learnt.
Reply to comment
My highschool CS teacher (grades 10 and 11) had an efficient method of grading programs and also stayed away from making the course that 91% free credit. For marking he’d actually read the code, check for useful comments, look at the thought put into the code, the functionality, and a non-compilable code didn’t mean a 0%, as long as the code was going somewhere it never got to. Also, I had the highest mark in grade 11 with a 87% and I was one of the only ones who actually knew waht I was doing, the average was around a 50-60% if I recall correctly. All in all, great blag.
Reply to comment
We’re still using Ready to Program.. I wish they would switch the curriculum, so that we use Netbeans/Eclipse, or Python.
Reply to comment
I was talking to my ICS4M teacher a few weeks ago, and I believe he noted a few things:
- AP may drop the Computer Science AB exam (leaving only the CS A exam), and
- that ICS4M might be called ICS4U next year (and feature a ever-so-supposedly-slightly different curriculum).
Reply to comment
I also heard something two years ago from another CS teacher. Apparently they are looking to split the ICS courses into an U and a C level. To differentiate the two directions.
Reply to comment
(sorry for reviving an older post!)
I am a current Gr.12 Ontario student (going into CS in the fall) who has been been through this messy high school system. My particular situation was so ridiculous, it’s almost laughable.
My first experience with CS was at the Gr.10 level with an introductory course (TIK20). I attend a full year system, so things progress at a slower rate. Our particular CS teacher decided to retire in November, we had less than 1/4 of the material covered.
The replacement teacher was a extremely nice teacher who was a science teacher. Our old CS teacher stayed for two weeks to guide her on what to do with our class, we all assumed that she knew what she was doing because she was apparently qualified to replace our old teacher in all of his current classes (Science, Math AND CS).
However, that was not the case.
It wasn’t that she was not advanced with the field, she couldn’t even point out where the motherboard was in the opened case. I must repeat that she is a wonderful person and an excellent science and mathematics teacher, but she was no where NEAR qualified to teach our CS class.
I guess I should blame this problem on school administration and the way the way our school board policy on who should be hired. But the problem does not end there. Due to her lack of knowledge in the field, she decides to come up with a plan so that we can at least get some work done.
Imagine the surprised look on our faces when we walked into the computer lab, to find a tutorial on how to apply makeup on a girl using Photoshop Elements! The rest of the course took a drastic turn. We edited images for the rest of the year. I often wondered if she is even allowed change the course curriculum as a teacher. I brought it up with one of our vice principals, but it was ignored and I really didn’t know who else to talk to.
I think the point of my long story is that (at least in my school board, the TDSB) it seems computer science is not in high demand outside the technical schools. And as a result, some teachers who are teaching cs may not even be qualified to teach it. I heard from one of my math teacher (who was originally a computer science teacher but switched into the math department) that it is not uncommon for a science or a math teacher with no experience and/or qualifications in computer science, to be teaching courses at the high school level, largely because the amount of staff a school can maintain, and it is unconventional to hire just a “computer science” teacher when the science or mathematics department of said school does not require more teachers.
Reply to comment
It sucks that you’ve had to go through such an experience, but I’m glad that it hasn’t deterred you from pursuing Computer Science in a University.
It kind of sounds like your teacher might have tried her best to have some sort of a “computer” class, given her lacking qualifications. Yeah, it went off on a wild tangent, but that’s not the worst that I have heard.
The thing about the Computer Science curriculum is that it’s very vague, simplistic, and unenforced. It might say things like “data structure”, and it would be up to a teacher to interpret that as a binary tree, or a simple array (and both would satisfy the “requirement”).
Good luck in your upcoming studies
Reply to comment
I learned everything I know about programming on my own. It is true that functional programming is very difficult to understand, if you come from an imperative programming background. I took me years to understand Lisp after I first saw it.
However, the problem doesn’t only occur in high schools. Many American universities have computer science curricula that never cover functional programming. Graduates of these programs are likely to have difficulty if they ever encounter anything like Scheme. The usual response, out in the wild, is to say “Scheme sucks” and dismiss it.
Then again, those who finally “get” Scheme but didn’t see it during their education are likely to become those annoying, smarmy Lisp zealots.
Reply to comment