Glamour?

As you’ve no doubt surmised by now, programming — ­even with a tool as relatively easy to use as Director — ­does not simply involve sitting down at a computer and banging out some Lingo by poking randomly at keys, then dashing off to complete your next assignment. This is the kind of role programmers are often handed by Hollywood, which is sort of good, as you can use that image to intimidate squirrelly clients. However, this image is also harmful, as it fosters a totally unrealistic notion of what programming actually is.

Thomas Edison once stated that genius is "One percent inspiration and ninety-nine percent perspiration," probably because he didn’t understand decimals very well. It’s actually more like 99.44 percent perspiration, with 0.56 percent being that rare aha moment you get that lets you create something unique, or at least radically different from the norm. Most of the programming you will ever do will not be that interesting, or it will be something done in support of something that started out being interesting. There is much drudgery to be found in programming, which could be why so many programmers favor energy foods such as caffeine-laden sweetened fizzy liquids and chips loaded with unnaturally shaded cheezish substances. (My personal favorite is a mix of salted nuts and pretzel sticks. It doesn’t do much to keep me awake, but it does keep me crusty enough to hammer at the code for as long as I need to.)

But you will find this general fact to be true with any creative endeavor. Whether you are a poet, an artist, a dancer, or in fact one of any of the members of the creative professions, you will find that it’s all about planning, preparation, practice. Expertise in a field does not come naturally; even prodigies cannot reproduce something until they have first seen or heard it. In this part, we’ll be discussing the aspects of skill you need to create programs, beginning with this module, where we discuss what you need to do before you even really begin writing the program at all.

Finding Your Audience

In my experience when discussing preliminary program design with clients, I am often struck by how little the client him- or herself even knows about what the final goal is to be. Presumably if someone is willing to fork over five or more figures’ worth of fees for a product, that person is going to have some clue what the desired product actually is.

Not so.

In trying to gain a handhold on the elusive goal, I’ve found that considering the release market is one of the best things you can do early in the stages of a program’s evolution. For whom is the program being written? What is the desired user base? Is this program intended to be used by law enforcement officers in the field? Is this program a video game for thirteen-year-olds? Is this program meant to help octogenarians research their family histories? Is the program meant to help hearing-impaired individuals appreciate the works of Mozart? Or is it just intended to teach fourth graders the fundamentals of multiplication? (That last possibility, by the way, is by far the hardest kind of program to write.)

Let’s take the educational angle for a minute. Consider the possibility that a client comes to you and wants you to write a program that teaches decimal arithmetic operations via some series of sessions that are not meant to be simple rote-practice "drill-and-kill" exercises. That is, your user will have to be stimulated to maintain interest in what is happening at all times, will be required to show increasing skills in dealing with decimals, but should never at any time feel that the program is unbeatable, that she or he is "too dumb" to keep up.

Oh, your client mentions casually, and it has to be interesting to ten-year-olds, but it might also be used in adult-education or remedial high school education settings.

Now here you might be tempted to walk out of the meeting. How can you possibly write a program that will be interesting to anyone within an age range from preadolescence right through full adulthood? Can it even be done?

Well, consider a few things. Consider, for instance, Pixar’s movie Toy Story. Consider Star Wars. Consider The Simpsons, or Harry Potter (the books). Or Sherlock Holmes or Lord of the Rings (again, the books). What do these movies and stories have in common? They have an appeal across an absolutely vast range of ages. Eight or eighty, they attract most comers. Between them all, they manage to attract everyone, or virtually everyone. So yes, it is possible for your program to have a wide appeal base, and in fact I submit it will be harder to get kids to like it, because they don’t have the patience an adult might have with things that are less than wholly engrossing.

But that, of course, is just one consideration, just one possibility. You might also get a client who manufactures hydraulic compressors, and who wants to create a CD-ROM-based troubleshooting matrix that allows mechanics to rapidly diagnose likely sources of problems. Or you could have that same client wanting you to create an "online" version of the company’s 500-page parts catalog, without any conception on the client’s part what exactly is meant by the word "online," and without any comprehension of the fact that receiving the documents in Quark format will not be sufficient for the purpose.

Or you could end up creating a piece meant for Internet distribution that is intended to show visitors to the local Community College’s library how to use the card catalog.

Some of these might seem like interesting challenges, and some are. Many of the jobs you’ll end up doing are not particularly interesting, though, and still they will require your full time and attention to assure the task is completed on time and correctly. In all cases, the final product is clearly important to consider in your approach to the question of preparation.

For example, your client might be absolutely certain that the program is never going to be used outside a given arena, and while such assurances are sincerely given, they might well not be true. I’m not suggesting you get a disclaimer, necessarily, but if you feel your client might change the venue of a product without necessarily telling you of that decision beforehand, you could find yourself in the nasty predicament of having to retool significant portions for free.

To this confusion, you can add the fact that often a program will have to bear several aspects of different kinds of release to be truly effective. For example, an educational program will probably have to have some entertainment value; and a utility program might have to include some instructional elements to really be useful to many people. In general, however, we’ll be discussing four main categories of programming here, and each has its own approach to getting the task done.