  Introducing inner-city high school students to program design presents unique
challenges. The typical assumptions of an introductory programming course, like
students understand what variables and functions are, may not be safe.
Therefore, asking students to define functions as part of the program design
process may be an overwhelming task. Many students do not understand that a
function is an abstraction over similar expressions and that parameters
represent the differences among these expressions. This articles presents a
novel approach to teaching program design to high school students while
simultaneously reinforcing high school algebra. The approach is based on a
design recipe to help students develop the abstractions that lead to functions.
Using a bottom-up approach, students are taught how to abstract over similar
expressions. They are then taught how to use high school algebra concepts, like
compound functions and function composition, to also design functions. In
addition, the article also presents empirical data collected from students to
measure their reaction to the course. For the students in the course, the
empirical data suggests that high school algebra concepts are successfully
reinforced and that students feel they become better problem solvers, find
programming intellectually stimulating, and walk away with an interest in
programming.
