Thursday, January 1, 2009

Writing Software is a Lot Like, Well, Writing

Continuing on the prior post’s theme of skills used in software development -- there are many analogies and comparisons between creating software and other endeavors. Putting up a skyscraper and designing an automobile are a couple of examples.

My favorite analogy for writing software however is writing a book. What type of book, specifically? Well, it would be easy to compare software to a nonfictional reference work. But I’ll compare writing a program to writing a novel, a piece of fiction.

In both software development and writing you have multiple threads or storylines that have to converge at certain specific points and in certain ways; otherwise the results could be disastrous for your characters and your application. Your characters might miss important developments in the story, and your program can end up deadlocked or crash.

There are differences, of course; with a novel the author may start writing freely without a predefined notion of where the story will end up. Sometimes the storyline works, and other times they may (figuratively) rip the page out of the typewriter and crumple it up, tossing it into a wastebasket that is already overflowing with crumpled up pieces of paper.

You generally can’t adopt such a haphazard approach to software development. In most cases you’ll start with a pretty good idea of what the finished product should look like. Still, some approaches to software development advocate the idea of ‘throwaway’ prototypes, or at least iterative methods of development where each iteration gets you closer to your ultimate goal.

There are other similarities I can think of between the two endeavors, tortured as the analogy might be. Authors of books need to flesh out the characters sufficiently so that readers can visualize them in their minds. Software developers also need to put a UI or ‘face’ on their applications, one that users can react to positive and productive ways.

Perhaps my favorite part of this metaphor is that both a book and software (say a website) are guided experiences. You have to anticipate and plan out what the user will see, and make sure the experience is a coherent and pleasant one. Of course, on a website a user may click anywhere and navigate at their leisure, while a book reader is unlikely to skip ahead. That just means the guided experience with software is more difficult to create, but it still remains a guided experience, as with a good book.

My point? Software is much more of a creative process than people recognize.

1 comment:

Anonymous said...

Exactly.

Writing music for all instruments has the same properties.

Either way, music design is the same as software.

-Never, Never, Never give up!