TITLE: Programming as Program Transformation
AUTHOR: Eugene Wallingford
DATE: June 18, 2006 10:20 AM
I see that Ralph Johnson is giving the Friday
keynote talk at
this year. His talk is called "The Closing of the Frontier",
shows that it will relate to an idea that Ralph has
blogged about before:
software development is program transformation.
This is a powerful idea that has emerged in our industry
over the last decade or so, and I think that there are
a lot of computer scientists who have to learn it yet.
I have CS colleagues who argue that most programs are
developed essentially from scratch, or at least that the
skills our students most need to learn most closely
relate to the ability to develop from scratch.
I'm a big believer in learning "basic" programming
skills (most recently discussed
but I'd like for my students to learn many different
ways to think about problems and solutions. It's
essential they learn that, in a great many contexts,
"Although user requirements are important, version N+1
depends more on version N than it does on the latest
requests from the users."
Seeing Ralph's abstract brought to mind a paper I
a few months back, Rich Pattis's "A Philosophy and
Example of CS-1 Programming Projects". That paper
suggested that we teach students to reduce program specs
to a minimum and then evolve successive versions of a
program which converges on the program that satisfies
all of the requirements. Agile programming for CS1
back in 1990 -- and a great implementation of the
notion that software development is program transformation.
I hope to make this idea a cornerstone of my CS1 course
this fall, with as little jargon and philosophizing as
possible. If I can help students to develop good habits
of programming, then their thoughts and minds will
follow. And this mindset helps prepare students for a
host of powerful ideas that they will encounter in later
courses, including programming languages, compilers,
theory, and software verification and validation.
I also wish that I could attend ECOOP this year!