[racket] "The Disadvantages of High School Programming"

From: Prabhakar Ragde (plragde at uwaterloo.ca)
Date: Tue Jun 8 19:01:08 EDT 2010

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. 

Posted on the users mailing list.