[racket] "The Disadvantages of High School Programming"
Benjamin L. Russell wrote:
> There is an interesting, if somewhat dated (posted on October 9, 2008),
> article, entitled "The Disadvantages of High School Programming" [1]
> (see
> http://compsci.ca/blog/the-disadvantages-of-high-school-programming/),
> by Roman Zimine, then a "first-year student at the University of
> Waterloo's Math Faculty" (according to the byline), on CompSci.ca
> Blog. The article discusses the issue that certain students with a high
> school background in computer science were having more difficulty in an
> introductory computer science course taught in Scheme than students with
> no computer science background whatsoever in high school.
As your second link made clear, I designed the course that Roman took,
and in fact he was a student of mine in the followup course (continuing
with Scheme and introducing C) in the early months of 2009. He came and
spoke with me in office hours a few times about such matters.
The first time I taught that introductory course to a substantial number
of students, those who did not have an Ontario Grade 11 computer science
credit (recommended for all students entering our Faculty) had a
slightly higher average mark than those who did have such a credit. I
have not checked the statistics recently; it is harder to do so now,
because we have two courses, one for CS majors and those willing to be
taught as if they were CS majors, and one for non-majors (mostly Math
students, but some from the Science, Environment, and even Arts Faculties).
I attribute this surprising statistic to two factors: 1) the difficulty
of learning a second way of doing something, and 2) complacency, because
at most institutions, first-term CS is a review of high-school CS, and
incoming students know this. We tell them that it is not true at UW, but
they tend not to believe us.
> The case of Waterloo is interesting because starting from fall 2008, all
> first-term courses in computer science started using the programming
> language Scheme running in DrScheme (see the related article "Computer
> Science at Waterloo: the new Scheme of things | CompSci.ca/blog" [2] at
> http://compsci.ca/blog/computer-science-at-waterloo-the-new-scheme-of-things/).
We currently have 1500 students a year taking a required course in
Scheme. I suspect one will not find that volume of functional
programming students at any other institution.
> The article contends that some high-school programming courses focus on
> "the idea of 'just making it work'," which interferes with the concept
> of "[p]rogramming is communication," as taught in certain
> university-level computer science courses. The article argues that
> "[b]asically, 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."
More specifically, students have typically been given little or no
guidance in how to ensure, through design principles and careful
testing, that a program works properly, and come to believe that
anything that results in a program appearing to work (on the basis of a
couple of ad-hoc tests) is good enough. Furthermore, they do not
understand why they may not deserve full marks for such a program, or
why even a program that passes all of our unit tests can be docked marks
for stylistic errors. It may take a few years of dealing with other
people's code in a production environment before they can really understand.
> From what I have read in some of the publications written by certain
> members of the PLT Research Group, it would seem that this viewpoint
> runs counter to the PLT goal of introducing computer science into the
> high school curriculum.
Not at all. As Robby has pointed out, the difficulty lies in poor
pedagogy at the high school level, not the mere fact that it is being
done when students are a certain age. I would prefer to have students
who have mastered algebra, but I can see the case for actually teaching
algebra (or related concepts of abstraction, at any rate) through the
use of something like Racket.
The nice thing about Racket in a secondary- or elementary-school
environment is that, if used properly, it can be accessible to a far
wider audience than typically makes it through a CS class at this level.
--PR