TITLE: Programming as Discovery and Expression AUTHOR: Eugene Wallingford DATE: June 01, 2006 9:44 AM DESC: ----- BODY: The RPG Dreamsongs quill Recently I pointed you to Dick Gabriel's The Art of Lisp & Writing, which I found when I looked for a Gabriel essay that discussed triggers and Richard Hugo. I must confess that I recommended Dick's essay despite never having read it; then again, I've never been disappointed by one of his essays and figured you wouldn't be, either. I read the essay over tortellini last night, and I wasn't disappointed. I learned from his discussion of the inextricable partners in creation, discovery and presentation. I learned about mapmakers and how their job is a lot like an engineer -- and a lot like a writer.
Most of exploration is in the nature of the locally expected: What is on the other side of that hill is likely to be a lot like what's on this side. Only occasionally is the explorer taken totally by surprise, and it is for these times that many explorers live. Similarly for writers: What a writer thinks up in the next minute is likely to be a lot like what is being thought this minute -- but not always: Sometimes an idea so initially apparently unrelated pops up that the writer is as surprised as anyone. And that's why writers write.
As anyone who has ever written a program worth writing will tell you, that is also why programmers program. But then that is Dick's point. Further, he reminds us why languages such as Lisp and Smalltalk never seem to die: because programmers want them, need them. Gabriel has been writing about programming-and-writing for many years now, and I think that his metaphor can help us to understand our discipline better. For example, by explaining writing as "two acts put together: the act of discovery and the act of perfecting the presentation", the boundaries of which blur for each writer and for each work, we see in relief one way in which "software engineering" and the methodologists who drive it have gone astray. I love how Dick disdains terms such as "software developer", "software design and implementation". For him, it's all programming, and to call it something else simply obscures a lot of what makes programming programming in the first place. Reading this essay crystallized in mind another reason that I think Java, Ada, and C++ are not the best (or even okay) choices for CS 1: They are not languages for discovery. They are not languages that encourage play, trying to solve a hard problem and coming to understand the problem in the process of writing the program that solves it. That's the great of of programming, and it is exactly what novice programmers need to experience. To do so, they need a language that lets them -- helps them? -- both to discover and to express. Java, Ada, and C++ are Serious Languages that optimize on presentation. That's not what novice programmers need, and probably not the pros need, either. This essay also may explain the recent rise of Ruby as a Programmer's Programming Language. It is a language for both to discovery and expression. As usual, Gabriel has explored a new bit of landscape for me, discovered something of value, and given us a map of the land. -----