java.sun.com has published an interview with Richard Gabriel in which he suggests that writing software should be treated as a creative activity and that to get good at writing software, we have to practice it, we have to have a critical literature, and we have to have a critical context.
The interview of Richard Gabriel was done by Janice J. Heiss. Here's an excerpt:
Writing software should be treated as a creative activity. Just think about it -- the software that's interesting to make is software that hasn't been made before. Most other engineering disciplines are about building things that have been built before. People say, "Well, how come we can't build software the way we build bridges?" The answer is that we've been building bridges for thousands of years, and while we can make incremental improvements to bridges, the fact is that every bridge is like some other bridge that's been built. Someone says, "Oh, let's build a bridge across this river. The river is this wide, it's this deep, it's got to carry this load. It's for cars, pedestrians, or trains, so it will be kind of like this one or that one." They can know the category of bridge they're building, so they can zero in on the design pretty quickly. They don't have to reinvent the wheel.
But in software, even with something such as Java 2, Enterprise Edition or the Java implementation (or almost any of the APIs we define), we're rolling out -- if not the first -- at most the seventh or eighth version. We've only been building software for 50 years, and almost every time we're creating something new. If you look at software developers and what they produce, if you look at their source code, the programs they make, and the designs that they end up creating, there is real variability. And some people are really good and others are not so good.
So, because you can program well or poorly, and because most of it is creative (in that we don't really know what we're doing when we start out), my view is that we should train developers the way we train creative people like poets and artists. People may say,"Well, that sounds really nuts." But what do people do when they're being trained, for example, to get a Master of Fine Arts in poetry? They study great works of poetry. Do we do that in our software engineering disciplines? No. You don't look at the source code for great pieces of software. Or look at the architecture of great pieces of software. You don't look at their design. You don't study the lives of great software designers. So, you don't study the literature of the thing you're trying to build.
Can programmers learn Like poets and artists? Or should they take cues From bridge engineers?
What are your thoughts On Richard's new thesis? Is it inspiring Or just kind of wierd?
I'm still amazed how the software industry has made writing code an engineering-type activity. Particularly with products like Rational Rose, which seems to let you move a few boxes around and then,presto!... it's there.
I've written an article on the similarities between coding and prose writing. I think some of our processes around producing quality code could take a few hints from the copy editors I have worked with in the past.