[Edu-sig] High School Programming for Newbies

M Holthouse mholthouse at westwood.k12.ma.us
Sat Feb 26 16:04:27 CET 2005

Joe's email got me thinking about the difference between "programming" and 
"computer science" courses at the high school level.  I teach a one 
semester "Intro to Computer Science" elective, and then organize 
independent study programming projects for those who want to take the AP 
Java course the following year.

The CS course is loosely based on the Dale & Lewis "Computer Science 
Illuminated" text, and I like the approach of progressing through
   * binary data representation (since it ties in some of their useless 
math - 2^n, log base 2, etc),
   * digital logic (with Boolean algebra and building with modules),
   * simple computer architecture illustrated with a machine language 
   * assembly language with the PEP7 simulator introducing conditionals and 
very simple loops (which also touches on addressing and memory management),
   * C as a "higher level language" with data types and more complex looping
   * Python for "real programming", including primitive graphics with 
Zelle's package
...and then an overview operating systems, databases, networks, and AI

This is an elective targeted mostly at juniors, but due to our relatively 
small size (800 students) and various scheduling constraints, I get a 
variety of students, many of whom are not dying to learn this stuff.  Our 
goal is not to make them programmers in 20 weeks, but to give them a 
reasonable overview of the field so they can decide if they want to pursue 
(parts of) it more, and regardless of that make them more intelligent users 
of computers, better able to work with "computer people".  The mix of other 
topics also lets some of the kids who are not natural programmers get their 
legs under them before jumping into the programming deep end and feeling 
left behind.

Although not intentional, the progression of languages ends up being a real 
sales pitch for Python ("Wow, this is easy!"), and many of the 
programming-oriented students end up doing a final project with 
pygame.  I've had students who later had to deal with C++ tell me they were 
happy to have had the brief (~2 week) intro to C, and often those who end 
up taking a Java course appreciate having been exposed first to other 
languages so they're not intimidated by the rather cryptic magic overhead 
of Java.   Object-oriented purists object to this bottom-up approach, of 
course, but I find that the digital logic section where we build one bit 
adders and then replicate and assemble them to build 16-bit versions, and 
similarly, turn gobs of SR flip-flops into simple memories is a great way 
of introducing modularity and encapsulations, perhaps because it's less 
abstract than the top-down software focused approach.

There's more info up on my class web site 
westwood.k12.ma.us/~mholthouse;  I wonder if anyone has some experience 
with both approaches and has any experience to share?

-Mark Holthouse

More information about the Edu-sig mailing list