Tap Dance & the Snow Job

In search of a little light reading, I grabbed Rupert Sheldrake’s book Science Set Free from my shelf. Evidently I bought it ten years ago, and also evidently I never read it, as it’s not marked up. I think I lost interest in Sheldrake when his experiments that purported to demonstrate telepathy were debunked.

After reading the first 50 pages, I’m ready to pull the rip cord. The guy is a sloppy thinker. His whole view is poetry, not science.

To be fair, his observation about the origins of the mechanistic, reductionist beliefs found in the standard scientific world view is important. We could all use a reminder not to be taken in by that line of thinking. The universe is still mysterious! But rather than present a coherent alternative, Sheldrake just dances around, slings a bunch of intellectual horse droppings, and hopes you won’t notice.

In his introduction, he lays out “ten core beliefs that most scientists take for granted.” Some of his items I would agree are debatable. I’m not convinced that his taking aim at item 4, “The laws of nature are fixed. They are the same today as they were at the beginning….” is off the mark. It seems to me that we’re right to question that idea.

But to get there, we have to pass through item 1. The scientific world view, he says, is that “[e]verything is essentially mechanical. Dogs, for example, are complex mechanisms, rather than living organisms.” No, no, no! That’s not a tenet of science at all! The scientific tenet is that living organisms are complex mechanisms. Sheldrake begins by setting up a false dichotomy. He’s accusing scientists of something that scientists don’t in fact believe, and in the process he seems somehow to be assuming that those scientists have a category called “living organisms” that does not include dogs. This is a naked flimflam job, right there on page 7.

But that’s just a warmup. On page 9 he quotes Francis Crick’s son as saying that Crick hoped “to knock the final nail into the coffin of vitalism.” Vitalism is a now-discredited theory that there is some sort of innate vital force that is present in plants and animals but not present in inanimate objects. Sheldrake puts it this way: “Vitalism is the theory that living organisms are truly alive, and not explicable in terms of physics and chemistry alone.” The second half of that sentence is fine, but the first half is gibberish. Sheldrake hasn’t defined what he means by “truly alive.” Even the most materialistic scientist would acknowledge that a tree is “truly alive.” It has a metabolism, and that metabolism does stuff.

It’s a shell game. It’s a tap dance. Sheldrake isn’t doing science, he’s just waving his flag and hoping you’ll be suckered into taking his ideas seriously.

Jumping forward to page 37, we find him failing to understand how evolution works. He drags in the “theory” of so-called Intelligent Design, and fails to refute it. And I quote: “Proponents of Intelligent Design point out the difficulty, if not impossibility, of explaining complex structures like the vertebrate eye or the bacterial flagellum in terms of a series of random genetic mutations and natural selection.” Notice the verb there — “point out.” Sheldrake is hoping you’ll intuit that some other force must be at work. Implicitly, he is endorsing Intelligent Design. The fact that eyes and flagella did indeed evolve gradually, over the course of tens of millions of years, is not even open to debate, Rupert, sweetie. It happened. And Richard Dawkins ripped the preposterous notions of Intelligent Design to very small pieces in a book that Sheldrake could easily have purchased and read.

If he did read it, it would be incumbent upon him to explain precisely how Dawkins erred. But no, he’s just going to rush onward, spewing out a bunch of twaddle.

He quotes Alfred North Whitehead, and then expands on Whitehead’s idea: “In Whitehead’s words, ‘Biology is the study of the larger organisms, whereas physics is the study of the smaller organisms.’ In the light of modern cosmology [Sheldrake goes on], physics is also the study of very large organisms, like planets, solar systems, galaxies, and the entire universe.”

Do you see what’s happening there? Sheldrake has ripped the word “organism” free of its moorings in natural science. It is now a free-floating germ of poetry. A galaxy is an organism! Never mind that what we know of galaxies suggests not the faintest similarity between galaxies and the living organisms on our own planet. Galaxies do not reproduce, for starters. Nor do they eat. But Sheldrake wants you not to notice that. He wants you to wallow in and be cleansed by the waters of his mystical poetic view.

He gets into the Big Bang, compares it to ancient myths about the Cosmic Egg, and then says, “Our growing, evolving universe is much more like an organism….”

In the margin, with a pencil, I wrote, “Horseshit.” I should have used a pen.

Posted in evolution, random musings | Tagged , , | Leave a comment

The Mind Parasites

Religion is a mind parasite.

Yes, your religion too.

Like other parasites, this one is subject to the normal processes of evolution. We tend to think of evolution strictly in terms of DNA, but DNA is not required. All that’s required is that a phenomenon exist within an environment that’s suitable for its survival, and that it be able to create copies of itself. The copies will always be imperfect, so the succeeding generations will compete with one another for survival in the environment. Those that are better equipped to thrive in that environment will spread. Those that are less well equipped will tend to die out.

In the case of religion, the environment is the human brain and the surrounding culture that human brains generate when they encounter one another.

Religion is a parasite because it ultimately does not care about the survival of its host. The survival of its host may serve the purposes of the religion, or it may not. The religion only cares about its own survival and the survival of its near relatives — its progeny and cousins that occupy the brains of other humans. If a given behavior in the host (a human) increases the religion’s chances of survival, religions that are better able to produce that behavior will flourish, even if the behavior is not healthy for the human. Religions that fail to guide their hosts toward behavior that helps the religion to survive will tend to die out.

It’s all very simple.

The chances of a religion’s survival are enhanced when it is well tailored to fit within the host environment — that is, the human brain, which has undergone its own evolution. Religious beliefs that are too confusing, for instance, won’t survive well. Religions that are too wishy-washy will be too easily cast aside (or altered, or forgotten) by the human host. A religion that is well equipped to insure its own survival will guide the behavior of it human hosts in somewhat rigid ways.

Religions that are too toxic to their hosts — for instance, Jim Jones’s People’s Temple and the Branch Davidians of David Koresh — will die out, and quickly. Conversely, religions that, on average, engineer prosperity and happiness for their hosts, such as the religions of the Latter Day Saints, will tend to flourish.

None of this has anything to do with the fact value of the religious beliefs. There is vanishingly little factual basis for any religion. But it does matter that the ridiculous propositions of a religion be believable. Believability is somewhat different from factualness. If the human brain had different standards for believability, religions would look different.

Religions quite often encourage believers (their hosts) to kill those who have been infected by other religions. That’s why religious wars are so common in human history. The religion that starts the war does not care about the survival of an individual host: It only cares that its rivals (other parasitic religions) be wiped out. Religious wars are always about one religion, a parasite, trying to spread through the environment (the community of host brains) at the expense of its rivals.

Religions mutate, and the mutations that are better equipped to survive in the host environment displace those that are worse equipped. That’s why monotheism is so popular: It’s a better fit than polytheism. Monotheism encourages its host brains to engage in activities (such as missionary work) that enhance the religion’s prospects for spreading. New ideas that improve a religion’s chances of survival spread. Ideas that are weaker are trimmed off or forgotten.

One of the most important ideas in religion is, “This religion is not to be questioned!” A religion that encourages individual questioning of its tenets, such as perhaps Unitarianism (what’s left of it) is very weak. It can’t survive.

Religions hijack humans’ desire for community using the idea of ostracism. Being cast out of your community may have only an emotional impact, or it may threaten your very survival. So a religion that uses ostracism to control its hosts’ behavior (as Mormonism and Orthodox Judaism do) will tend to survive better than a religion that practices tolerance of diverse beliefs within the community.

A secular society, such as what was attempted (in a limited form) in the United States toward the end of the 18th century, is an existential threat to the survival of any religion. No religion can readily tolerate secularism, because a successful secular society weakens the control of the religious parasite. That’s why Muslims in Europe kill cartoonists who mock them. The religious parasite forces the believer to commit murder.

What is unfolding in the United States today is a concerted attempt on the part of a specific religion to rid itself of the very real danger of secular society. That is, the danger to itself. Secular society poses no danger at all to the humans who are in it, or at least it poses significantly less danger to the individual than a virulent outbreak of religion.

Those who have been mocking the recent Supreme Court decision about public prayer have been misguided in their mockery. They’ll tell you, “Boy, imagine how freaked out the Christians will be when they see that this decision allows Muslim teachers to conduct Muslim prayers in the classroom!” But that’s not going to happen, for two reasons. First, Muslim teachers are mostly smart enough to know that it would be dangerous to their personal well-being for them to do that. Second, do you honestly think the Christians are going to be satisfied with simply allowing public prayer? My goodness, why would you think that? Their next step will be to create a legal framework in which this decision applies only to Christian prayer.

Count on it.

Posted in evolution, religion, society & culture | Tagged | Leave a comment

The God Problem

Why does religion even exist? Lots of people are happy to offer answers to this question, but as Scott Atran points out in his book In Gods We Trust, those answers are really no better than just-so stories. They have no scientific basis.

Whenever we see a behavior pattern that’s exhibited around the world by long-separated populations of a single species, it’s a reasonable inference that evolution has selected for that behavior. Atran tries to construct an evolutionary view of religion. This is difficult to do, because our evidence about the mental habits of our species across the past few million years is, frankly, all but nonexistent. But the attempt is worth making. His book is densely written, but it’s worth tackling.

Religion exhibits a few definite characteristics, wherever it’s found.

First, it’s an activity of social groups. An individual who had never been exposed to such a thing (if there were ever such an individual) could be said to have mystical leanings or mystical experiences, but such an individual could not be said to have a religion.

Second, religion encourages or requires people to make what Atran calls counter-factual statements. I’d be more inclined to call them statements of fantasy. They’re statements for which there is no physical evidence. (The writings in old books do not count as evidence.) Those who are in a religious group are expected to believe that these counter-factual statements are true, and quite possibly to believe that they’re objectively verifiable.

The individuals making the statements may or may not actually believe them. We’ve all read stories about preachers who were privately atheists, but who perhaps didn’t want to have to find a new career or believed that the statements they made in public had some value in terms of guiding other people toward good behavior. Nonetheless, it’s clear that the majority of religious people do in fact believe that the counter-factual statements that are part of their religion are true.

Third, religions teach about the existence of invisible beings (ghosts, demons, gods, saints, and so on) who are aware of human activities and are involved in those activities in some way, either by directly interfering (for good or ill) and/or by providing instructions on how humans are to behave. Instruction on behavior is almost always part of a religion. Also, it’s possible to communicate with and possibly influence these invisible beings in some manner, perhaps through private prayer or perhaps through public ritual.

Patriotism is, of course, a form of religion. It differs from other religions only in that it has no teachings about invisible beings.

Fourth, religions typically demand personal sacrifice. This can range from the trivial (spending an hour on Sunday morning sitting quietly in a room when you would rather be doing something else) to the devastating — lifelong celibacy, for example, or significant financial donations, or even death in a Crusade. Devoting massive amounts of money and labor to building pyramids and cathedrals is a waste of resources, and resources are sometimes in short supply.

A personal sacrifice is a hard-to-fake demonstration to one’s religious community that one is a believer. This is why Abraham’s decision to kill his son makes sense in religious terms. It’s insane, but his willingness to do it is a hard-to-fake demonstration of his belief in the tenets of his religion.

Fifth, in many cases religious communities persecute non-believers. Not all religions do this, but it’s more the norm than the exception. Persecution can take various forms, from forbidding a non-believer to marry a believer to imprisonment and death.

All of this behavior is quite bizarre, if you stop to think about it. You’d think that evolution would have selected against religious belief, if only because belief causes people to waste precious resources, up to and including their own lives. Also, believing things that aren’t true is not, in evolutionary terms, a good survival strategy.

I haven’t finished reading Atran’s book, so I don’t know what sort of explanation he has up his sleeve. But it’s quite clear that a science-based explanation is needed. Stephen Jay Gould’s idea that science and religion are separate “magisteria,” and that in consequence religion ought to remain beyond the bounds of scientific deconstruction, is just hogwash. Very thin hogwash, if it comes to that.

Posted in evolution, random musings, religion | Tagged , | Leave a comment

From Inform 7 to TADS 3

From time to time, an author who has been writing interactive fiction in Inform 7 gets curious about how easy or difficult it would be to switch to TADS. Eric Eve (who has used both systems) wrote a good comparison of the two; you’ll find links at the end of this article; but by now that article is a bit outdated. For one thing, Eric himself later created the adv3Lite library for TADS 3, and the view of TADS in that article doesn’t include the new features. In any case, that article is a feature comparison; it’s not a guide for those who might like to switch.

So I made a list of a baker’s-dozen things that folks who already know Inform might want to know about what to expect when they try TADS. There’s far more to the story than I have room for here, but I’ll hit the high spots. Hopefully this quick summary will get you on the road without too many speed bumps.

And by the way, all of the references to “Inform” in this guide are to Inform 7. Inform 6 is a different beast altogether; I’d have to brush up on it big-time before I’d dare write about it. Same deal with TADS 2. It still exists, but I won’t be referring to it here.

I highly recommend using adv3Lite in TADS 3 as opposed to the default adv3 library. The “Lite” part is a bit of a misnomer. It will do everything you might want, and with less overhead in terms of learning new stuff. Plus, it has a few handy features that Eric cribbed from Inform, notably scenes, regions, and test scripts. These are not available in the standard adv3 library, but in adv3Lite they’re ready to go.

If you’re working in a Windows PC, you’ll naturally want to download Workbench as part of your TADS installation. It’s a nice enough IDE, though it’s not as nice as the Inform IDE. If you’re on a Mac or a Linux machine, you have two choices. You can run Workbench in a Windows emulator, such as Crossover, or you can use the free VS Code editor with the TADS 3 plug-in. I’m on Windows, so I can’t give specifics on the latter possibilities, but I’m told they’re quite manageable.

In no particular order, then, here’s the stuff you might like to know:

1. Object-oriented programming. Inform is rules-based, but TADS is object-oriented. Everything you’ll create will either be an object or embedded in an object. This helps keep the code tidy, and it’s also a way of insuring that the compiler and parser know what’s what. (See section 2.2 of the “Learning” document.)

2. C-style code. If you’re ever done any programming in a C-type language, you’ll soon feel right at home in TADS. If not, you’ll be facing a forest of curly braces and semicolons. Every program statement ends with a semicolon, except for the statements in object declarations. That is, when you write a new object, you’re likely to be adding code to it like this:

bulk = 25
isPowered = nil
isFragileMsg = 'Careful. This is fragile. '

These lines are property declarations. They don’t end with semicolons. See section 2.2 of “Learning” for more on this.

And by the way, this example is a hint that you can (and should) give readable names to your own names for objects, properties, and methods.

3. Case-sensitive. TADS code is case-sensitive. That is, if you create an object called apple and later refer to it as Apple, the compiler will stop you. But if it’s a property declaration, the compiler won’t care, and your code may not work as expected. For instance, the library code defines isFixed as a property of what Inform authors would call scenery. If you add a property declaration to your own in-game object like this:

isfixed = nil

…the compiler will just assume it’s a new and different property. This results in hard-to-find bugs.

Oh, and by the way, “nil” is a reserved word in TADS. It functions as false or zero.

TADS authors normally use camel case. The first letter is lower-case, and then capitals are used where needed inside the term. However, if you create a class, it’s usual to capitalize the first word. This is purely to make it easier to see what’s what. It’s not a requirement.

4. Indents are for convenience. In Inform, unless you’re using the obsolete syntax with “begin;”, indentation matters. In TADS code, indentation is purely for convenience. But it’s a really good idea to use it, as it makes your code more readable.

5. Templates. You will be making extensive use of the library’s templates. (You’ll probably never need to create one of your own.) A template is a way to speed up your writing. It’s a convention that the compiler understands. Here’s a simple object that is written using the template for the Thing class:

rubberBall: Thing 'rubber ball; big red round; sphere' @playground
"The ball is big, red, and round. Perfect for kicking. "
;

This code seems to be just a bunch of stuff spewed into the file, so at first it may be bewildering, but in fact the stuff is in a specific order (which you can’t change) and uses quotation marks, single and double, in a specific way (which you also can’t change). The template allows you to define the vocab property using single quotes, the location using the at-sign, and the desc (description) property using double-quotes. Again, this is explained in more detail in section 2.2 of “Learning TADS 3 with Adv3Lite.” Also, you’ll notice that the object declaration ends with a semicolon.

6. The containment structure. As in Inform, every object in your game will either be a top-level object (that is, either a room or nowhere), or else it will be contained in another object (such as a container or a surface). There are two ways of doing this. You can use the at-sign, as shown above, or you can use the symbols +, ++, +++, and so on. When an object declaration is preceded by a +, it will start the game in the nearest object above it in the code that has no +. Objects whose declarations are preceded by ++ will start the game in the most recent object with a +. And so on. See section 5.1.3 of “Learning” for more on this topic.

The two methods are equivalent. The + method is easier if you’re adding scenery to a room, for instance, because you only have to type one character. Also, if you later change the code name of the containing object, the contained object will ride along. The tricky bit is, if you should later do any block-copying of code, you can easily end up with the wrong number of + signs. This can either stop the compiler or result in hard-to-find bugs.

7. The vocabulary. In the example above, the vocab property was declared using a single-quoted string with a semicolon in it. This is the vocab property, and it has a specific form. The first bit (before the first semicolon) is the name the parser will use when printing messages that the player can read. The second bit is a list of alternate adjectives that the player can use; the third bit is a list of alternate nouns that the player can use. If the object is plural, you park another semicolon near the end and add the word them. This tells the compiler and parser all they need to know.

The vocab works very much like an Understand line in Inform. The main difference is that the printed name (in this case, “rubber ball”) has nothing to do with the code name of the object. The object could be called smizzleBoggy in the code. The compiler wouldn’t care, and the words “smizzle” and “boggy” would not be understood by the parser. For more on vocab, see section 3.1 of “Learning.”

8. Room exits and doors. Room exits are declared in a room object (that is, an object of the Room class) like this:

north = patio
east = diningRoom
south = masterBedroom

These are one-way connections. TADS does not attempt (as Inform does) to guess what the reverse connection is. Let’s say this code is in a Room called frontHall. In order to allow the player to get back to frontHall from masterBedroom, you would have to include

north = frontHall

…in the masterBedroom declaration. At first this may seem a bit of extra work, but the advantage is, you can design your map however you like without having to hold the compiler’s hand so it won’t create room connections that it thinks you met.

Doors work the same way. You have to have two separate doors, one in each room. They’re connected with a property called otherSide. (And they’re entirely movable, by the way. They’re just objects.) Not surprisingly, if there’s a door between the two rooms mentioned above, you would do something like this:

north = frontHallSouthDoorBackside

There’s a lot more to room connections than this, and it’s well documented. This is just a quick overview to help you understand something you’ll be doing a lot. Speaking of which….

9. The documentation. At first glance, the documentation (which will be downloaded along with adv3Lite) may be intimidating. Why are there four manuals?

Start by reading the Quick Start Guide. Then go through the Tutorial. Don’t try to get creative with the simple game described in the Tutorial; you’re not ready for that yet. (I’m speaking from experience here. My first venture into TADS, many years ago, was painful because I started trying to add features to the tutorial code.)

Learning TADS 3 with Adv3Lite is a good guide. You can read a chapter two at a time, and learn all sorts of stuff. Once you’re starting to get comfortable with the system, you’ll be able to use the Find command to search Learning for stuff you want to know. But it doesn’t cover everything. the Library Manual goes into more depth, but its table of contents branches to different pages, so it’s not searchable as a whole. To learn about creating new Actions, for instance, you have to start with the “Action Results” page.

The System Manual is about the TADS programming language itself, not about the adv3Lite library. It’s useful if you want to look up something about string manipulation, for instance, but it’s not something you’ll need too often.

The Library Reference Manual is, yet again, a different kettle of fish. It’s a massively cross-linked reference to all of the code in the adv3Lite library. When you’re first learning TADS, you can safely ignore this, but as you become more proficient, you’ll find it quite valuable. This is not the place for a discussion of how to use it.

10. Setting up test scripts. This important feature works almost identically to how it works in Inform. Here’s a simple example:

#ifdef __DEBUG
Test 'stabbing'
[
'gonear jerry', 'purloin pitchfork', 'stab jerry'
]
;
#endif

The #ifdef and #endif lines are not strictly necessary. They’re instructions to the compiler, telling it that it’s to include this code only in a work-in-progress, not in a release build. But it’s good practice to include them. For one thing, if you don’t, when you try to do a release build the compiler won’t cooperate, because the Test object is not included in the release build, so you’ll have to go through your whole game and either add that code or delete the test scripts.

You’ll note that the debugging verbs gonear and purloin are implemented. TADS lacks the handy commands showme and actions, unfortunately. That’s pretty much the only downside I’ve found so far.

11. Organizing your work in multiple files. In Inform, the game you write will all be in one massive file of code (unless you’re using Extensions, but normally you wouldn’t edit the code in an Extension). In TADS, it’s normal and indeed good practice to separate your game into multiple source code files. You might have one file for the rooms and scenery, another for the movable objects, another for your built-in hints, another for your newly defined Actions, and so on.

This makes it a bit easier to find stuff when you’re jumping around working on a specific part of the game, but it also has a practical advantage: TADS will compile your work-in-progress much faster than Inform will, because TADS only needs to recompile the code files that have changed since the last time you compiled. Inform has to compile the whole thing from the ground up every time.

12. Creating new actions. The library contains quite a variety of verbs that the player can use, but there will come a time when you’ll need to add a few of your own. Part IV of the Library Manual is your go-to for an exhaustive discussion of how to do it, but let’s take a quick look. The syntax is a bit snarly, so we’ll look at a quick example and then take it apart. Here’s a new Action I created for a game I’m working on:

DefineTAction(Stab);
VerbRule(Stab)
'stab' singleDobj
: VerbProduction
action = Stab
verbPhrase = 'stab/stabbing (what)'
missingQ = 'what did you want to stab'
;
modify Thing
    dobjFor(Stab) {
        verify() {
            illogical ('{The subj dobj} {is} not something that\'s in need of stabbing. ');
        }
    }
;

There are three things going on here, each in a code block that ends with a semicolon. First, a one-line declaration of a T action. A T action takes one object. In this case, it would be something like “stab Jerry”. A TI action takes two objects (“stab Jerry with toothpick”). An I action, such as the library’s “look” action, has no object. This is all explained in great detail in the Library manual. I’m just shining a flashlight on it.

The VerbRule adds the vocabulary for the new action. It also refers back to the name of the newly defined action, in this case Stab. We find that the ‘stab’ command can take only a single direct object. (The letters Dobj show up a lot, sometimes as gDobj, sometimes as dobjFor, sometimes as just plain dobj. Get used to it.) The rest of the VerbRule is pretty much for the internal processes, but be careful: You’re defining an object here and declaring its properties. If you accidentally type “verbphrase” instead of “verbPhrase”, that’s a bug.

The third thing we do is use the modify keyword to add some new code to the Thing class. Every object in your game that derives from Thing (and that will be most of them) can now respond to the “stab” command. You can read up in the docs about how to define dobjFor blocks. All that need concern us here is that by default, stabbing something is illogical. If the player tries it, the parser will not allow the action, and will print the message. To allow the player to stab some particular thing, we would then add something like this to the object that’s in need of stabbing:

dobjFor(Stab) {
    verify() { logical; }
    check() {
        if (hasAlreadyBeenStabbed) "He's lying there bleeding. Why do it again? ";
    }
    action() {
        hasAlreadyBeenStabbed = true;
        "You stab Jerry repeatedly with the pitchfork. ";
    }
}

This is a poor example, because naturally the player would need something to stab with. That would require a different action (StabWith), which would be a TI action, and we would have to add code for the iobj (indirect object), which in this case would probably be the pitchfork. But that’s too deep for this quick overview, so we’ll move on.

13. Text substitutions. This very convenient feature for adding variation to the game output works very much the way it does in Inform. The main difference is, you’ll use pairs of angle brackets instead of square brackets. Here’s a totally spoilery example from the game I’m working on:

"The silver nightingale trills <<one of>>a winsome<<or>>a limpid<<or>>a lovely<<or>>an exotic<<at random>> melody. <<if (mynahBird.canSee(nightingale))>>The mynah bird gazes <<one of>>intently<<or>>fixedly<<or>>longingly<<or>>enraptured<<at random>> at the nightingale.<<end>> ";

There’s more to text substitutions than that. For instance, you’ll use <q> to add an opening quotation mark and </q> for a closing quote. In place of Inform’s [paragraph break], you’ll use <.p>. To learn the whole system, you’ll need to read the manual.

By the way, it’s good practice to end each of your texts with a space character. TADS is generally better than Inform about figuring out how to make the output to the player look nicer; it will deal with that space character as needed, so don’t worry, just do it.

14. Instead of Instead. Inform invites authors to use the Instead statement to define specific actions rather than tinkering with the Before and Check rules. In TADS, most of your action handling will be in the dobjFor() blocks in specific objects, but there are occasions when an Instead rule might come in handy. Adv3Lite provides a handy widget called a Doer, which works very much like an Instead rule. With a Doer, you can intercept an action and turn it into an entirely different action during a specific scene or when the player is in a specific room, for example. I’ll let you read up on Doers in the “Learning” manual.

Links. To learn more, you can visit Eric Eve’s comparison article in Brass Lantern. Eric discusses the adv3Lite library here. You can download TADS here, and adv3Lite here. The adv3Lite download includes a Quick Start Guide that will tell you how to install it.

What’s the point? The differences between Inform and TADS are not quite as large as may at first appear. When you’re writing a game in Inform, everything you write, except the stuff within quotation marks, is computer programming. It’s cleverly designed not to look like computer programming, but that’s what it is. My personal view is that Inform’s pitch is, “Hey, don’t be intimidated! It’s not like that awful programming stuff. It’s easy!” Whereas TADS’s pitch is, “You’re programming. Get used to it.”

The underlying difference is that Inform is rules-based while TADS is object-oriented. This is not the place for a full explanation of what that means, much less for a debate about which is better. The fact remains, most of what you’ll be doing, as an author of parser-based interactive fiction, is creating objects and defining what happens when your reader/player/user tries to examine or manipulate the objects. To me, the object-oriented paradigm is just easier and more natural. As long as you’re not intimidated by nested curly braces, you’ll be just fine.

Posted in games, Interactive Fiction, technology, writing | Tagged , , , | Leave a comment

No, It’s Not Easy

Writing text adventure games is not easy. It’s a craft that combines conventional writing with both computer programming and game design. It’s kind of a niche art form, but people are still actively engaged in it. I’m one of them.

The most successful authoring system used for this endeavor is Inform 7. One of the reasons for Inform’s success is that it attempts, very much by design, to disguise the fact that you’re engaged in computer programming. The computer code in I7 looks exactly like writing in plain English. The novice author looks at I7 and thinks, “Oh, this is easy!” Yes, at first it is easy. And by the time it stops being easy, you’re hooked. You’ve invested a fair amount of time in getting started as an Inform author, so you plow on ahead.

The trouble is, Inform is not actually a very good authoring system. I’ve written a couple of games in Inform, so I’m entitled to say this. The TADS 3 authoring system, especially when one uses Eric Eve’s adv3Lite library rather than the default adv3 library, is actually much better.

Why, then, isn’t T3 more popular? The main reason is, it scares the novice author because what you’re doing is not disguised as writing in plain English. You’re writing computer code, and no foolin’. Here’s a more or less typical in-game object, as coded up in T3:

rawChow: Thing 'pterodactyl chow; brown brownish meaty; odor chunks of[prep]'
    "The brownish chunks of pterodactyl chow have a meaty odor. "
    dobjFor(Take) {
        check() {
        "Your husband and children would find it not very palatable. ";
        }
    }
    dobjFor(Eat) {
        preCond = [touchObj]
        verify() { logical; }
        check() {
            "Seriously? Yuck! ";
        }
    }
;

In order to make sense of this, you have to actually learn something about how TADS 3 code is organized. I’m not going to try to explain it all, but it’s less mysterious than it may look at first glance. The mysterious “dobjFor.” for instance, means “direct object for.” When the player types “eat chow,” the pterodactyl chow is the direct object. The library grabs the code in this object’s dobjFor(Eat), since the Eat action is what the player is attempting. The verify() routine confirms that, yes, the chow is something the player might reasonably ask to eat, but then the check() routine refuses the action with a message indicating why that ain’t gonna happen.

If you’re willing to learn six or eight fairly simple ideas along these lines, writing a simple game in TADS 3 is as easy as writing it in Inform 7. And when you start trying to do more complex things, using T3 is actually a lot easier than groping through the baffling depths of Inform. The guts of Inform, the library (which is called the Standard Rules) is quite opaque. Figuring out what the library is doing is an exercise in patience. Whereas, on the other hand, the T3 library (whether you’re using adv3 or adv3Lite) is written in the same type of code you’re already writing, and also it’s exhaustively commented with explanations of what’s going on, so figuring out what’s what is — well, it’s not always simple, but there are no roadblocks.

For comparison, let’s look at that same in-game object as it would be written in Inform:

The pterodactyl chow is an edible thing. The description is "The brownish chunks of pterodactyl chow have a meaty odor." Understand "brown", "brownish", "meaty", "chunks", and "odor" as the pterodactyl chow.

Instead of taking the pterodactyl chow:
    say "Your husband and children would find it not very palatable."

Instead of eating the pterodactyl chow:
    say "Seriously? Yuck!"

Is that easier for the novice programmer to read? You betcha. Everything that’s not in italics is computer code, but it’s disguised to look like it’s not. And there’s a hidden problem. Inform has silently created an object whose code name is “pterodactyl chow”. And the game is likely also to contain two other objects — a bag containing the chow, and a pterodactyl. Because Inform takes a wild guess about how to name an object in its own internal code, it’s liable to get quite confused when you add the other objects. This cannot happen in TADS, because the object name (in this case, rawChow) is specified by the game author, and must always be unique. The TADS compiler cannot ever be confused about which object is which, but the Inform compiler is quite likely to get confused. There’s a workaround in Inform that allows the author to avoid this problem — but why should a workaround be needed in order to help the compiler deal with something as basic as the fact that you’ve just defined a unique in-game object?

Another reason why authors like Inform is that the IDE (integrated development environment) in which you do your writing is really good. Also, it’s cross-platform. The TADS Workbench is a Windows-only program, and frankly it’s not as sexy-looking as the Inform IDE. You can actually write TADS games on the Mac, and I’ve just discovered a very adequate front end for authoring that uses the VS Code environment with a TADS extension. It’s not Workbench, but it’s good.

When you’ve written some new bits and want to test them, you need to compile your game. TADS compiles much faster than Inform, and you’ll be doing this 30 times a day, so this is a factor. An Inform game has to be written in one long, long wodge of code, but TADS games can be (and should be) written in the form of several shorter files. This makes finding what you need to edit much easier in TADS.

You’ll notice that those two Instead rules in Inform are written as separate paragraphs. The Inform author can put those two rules pretty much anywhere in the code file, without causing any problems. This appears at first glance to be a convenience, because if you think of something you forgot to write, you can just add it near the stuff you’re editing right now. But in fact it’s an open invitation to chaotic, confused code. The TADS dobjFor blocks pretty much have to be embedded within the definition of the object. (You can, in fact, put them elsewhere using the ‘modify’ keyword, but that’s an extra step that nobody would ever take.) TADS code is natively more tidy, and that makes it easier to read, once you understand the syntax. Also, the indentation in the TADS code is purely for visual convenience: You can indent or not indent. The indentation in Inform is required, unless you use an alternative syntax that’s fairly messy. Wrong indentation in Inform causes the compiler to choke on its Wheaties.

And then there’s the infamous paragraph break problem. Inform’s game output will occasionally get confused and either put too much vertical white space between its output lines, or not enough space. This has been a problem with Inform for more than 20 years, and while it’s better than it used to be, it still crops up occasionally. This never happens in TADS games. If there’s a spacing problem in TADS, it’s guaranteed to be due to something you did, and you can fix it.

Inform provides some nice conceptual tools with which to organize your game — things like map regions and ongoing dramatic scenes. So Eric cribbed those good ideas and installed them in his adv3Lite library for TADS. That being the case, I can’t think of a single reason why anybody should ever want to use Inform, other than being horribly intimidated by the fact that they’re actually engaged in computer programming so they’d much prefer to pretend that they’re not.

Posted in fiction, games, Interactive Fiction, technology, writing | Tagged , , | Leave a comment

Any Port Is a Storm

The long-awaited open-source version of Inform 7 has now been released. (Yay, I guess.) For those who don’t know what this means, Inform is a specialized programming language designed for writing text adventure games, a medium that is often dignified by referring to it as interactive fiction.

I’ve written and released a couple of games in Inform 7 (I7 for short), but it’s not my preferred development system for this type of writing. I much prefer TADS 3, which I use with Eric Eve’s brilliant adv3lite library. I7 code tends to be rather verbose, and for technical reasons compiling your work-in-progress (in order to test the stuff you’ve just spent the last half-hour writing) takes longer in I7 than in T3. It’s faster than it used to be, but compiling is still a bit of a bottleneck.

On the other hand, I7 is by far the more popular developmental system. If you write a game and then enter it in one of the yearly competitions, you’ll probably get more players and better voting results with an I7 game, because players will feel more comfortable when they see the familiar .gblorb file extension.

There are other factors to consider. The tools for making your I7 game playable in a web browser are more robust. Also, the I7 IDE (that’s the host program in which you do your writing) has some nice features. It builds a topic-by-topic index of your source code, for instance.

On the downside, the documentation for I7 is rather awful. It tries hard to be friendly for the novice, and as a result it generally fails to explain anything in detail. Eric Eve’s documentation for TADS 3 is brilliant. In addition, the underlying code for the library (the stuff you need to use in order to write a game, such as the definition of how a Room object works) is extremely opaque in I7. In T3, on the other hand, the library source code is both clear (because it’s written in the same code language as the game you’re writing) and provided with very detailed comments. With a little study, you can tell exactly what the library is doing.

Or consider something like creating non-player characters (NPCs) whose behavior can change during the course of a game. T3 includes some lovely features for doing that. I7 has nothing comparable.

I’ve written a whole handbook on how to write games in I7 (patterned, I might add, on Eric’s book-length tutorials on T3). With the new release I should probably update my handbook. Some people have found it a useful document. And the most practical way to research updates for the handbook would be to actually write a game in the new version of I7.

Now we get to the conundrum. I have an unfinished game. It’s written in T3/adv3lite. It has been sitting on my hard drive for at least ten years now, in one form or another. And an imp sitting on my shoulder is whispering, “You really ought to finish ‘The Only Possible Prom Dress.'” Now and then the imp jabs my earlobe with his tiny pitchfork. So maybe I ought to take what I’ve written and port it over to Inform 7. Do you think?

But wait — don’t answer quite yet.

Porting a bunch of code from one programming language to another would be a big job in any case, but it’s swollen to unimaginable proportions by the fact that this game is huge. About 70 puzzles, more than 100 rooms, and several hundred objects if you include the scenery.

It’s by way of being a sequel to the first game I ever wrote, “Not Just an Ordinary Ballerina,” back in 1999. It uses the same setting, but with many new rooms. It uses the same plot device, but reworked. A few of the puzzles are similar, but most of them are entirely new. There are now seven or eight complex and chatty characters (NPCs), none of whom was in the original version. There is an octopus, a Lamborghini, and my favorite (?) wizard, Zarbolphung, he of the filthy mustache and the hideously gnarled toes, who first appeared in my I7 game “A Flustered Duck.” There is a hostile ocelot, a wooden Indian, a depressed art gallery owner, a thoroughly annoying beautician, and a singing fish.

Fitting all of these elements together in a tidy way is a big job. Each time you add a new action (such as, perhaps, “set fire to the newspaper”) you have to consider how else players may attempt to use the “set fire to” action in any other context in the game. You have to provide sensible non-default responses for dozens of possible “set fire to” actions. Now multiply that by ten or twenty new actions. And then start working on the built-in Hint system. With 70 puzzles, that’s at least 500 hints.

The story still has some rough edges. It’s not entirely clear to me, for instance, what happens if you succeed in enticing a certain character to join you in a certain location before you’ve befriended and/or recruited a couple of other characters. Conceptual barriers have to be erected so as to keep the player from going too far off track, but those barriers have to be designed in such a way that they’ll appear natural, not forced or contrived.

And then … then, after all that, the game is finished. Except, it’s not. Not even remotely. It’s ready for testing. No matter how careful you try to be while writing it, all software contains bugs. Not infrequently, the bugs are fatal. The game may crash, or the story may get itself into an unwinnable condition. Absurd, nonsensical responses to player input are going to pop up like toadstools.

So beta-testers will need to be recruited. And this is where the skid marks run straight through the guard rail and off the cliff. Did I mention that the game is huge? Finding a couple of beta-testers who will work their way through the whole damn thing is about as likely as waking up tomorrow morning to find that the Second Amendment has been repealed overnight. A consummation devoutly to be wished, as saith the poet, but don’t be holdin’ your breath.

Releasing a game that has not been thoroughly tested is not a nice or friendly thing to do. Still, it’s an awfully fun story, and I like having a good meaty creative project to work on. Maybe if I offer to pay the testers….

Update: After five days of hard work, I’ve gotten a good start on porting the existing code over to I7. Along the way, however, I’ve rediscovered in painful detail exactly why I dislike Inform 7. Again and again I bang my head against the fact that you really can’t tell whether you’re using the correct syntax in your code. In a real coding language, you can write…

if X > Y { }

…and the meaning is clear. (The curly braces surround the stuff that will happen if the logical test is true.) But how do you do that in Informese? Is that “if X is greater than Y”? Is it “if X is more than Y”? Or can I write “if X > Y”? This is a simple example. It can get more complicated.

Even aside from the syntax tangles, porting a game is not an automatic process! It mostly means creating a new object in I7 using the correct syntax, block-copying texts (such as the description of a room) over to I7 and then manually reformatting the text, and possibly redesigning a couple of the more complex puzzles. The game was less than half finished in T3, and just getting it all ported over would take several weeks.

I’m not sure I’m going to bother. I think I’m going to stick with the TADS version. Maybe finish it, finally. Because TADS is just a better programming language, frankly. Not only is it natively better, but Eric’s adv3lite library includes some spiffy features of I7 that were not included in the original TADS adv3 library — things like scenes, regions, and variable text output markings.

I wonder how Eric is doing. I haven’t exchanged emails with him for a couple of years now. We collaborated on writing a game, some years ago. It’s called “Mrs. Pepper’s Nasty Secret.” You can find it online.

Posted in games, Interactive Fiction | Tagged , , | Leave a comment

Are There Alternatives?

If you’re having serious problems due to your drinking and have a sincere desire to get sober, Alcoholics Anonymous can offer a fairly effective method. It’s not perfect, but it has worked for probably a few million people. (It’s an anonymous program, so there may be no reliable statistics.)

What you’ll soon find if you go there is that AA is firmly rooted in the Judaeo-Christian tradition. It’s a religion-based program of recovery. For many people this is not a problem — and it’s almost certainly the case that harnessing the widespread human tendency to embrace religious belief helps people get sober. Unless, of course, you’re among the minority who want nothing to with religion. For some people, religion is toxic. And I’m on their side! Religion creeps me out. Some people may want desperately to stop drinking and stay stopped, but the religious nature of the AA program may be a huge obstacle for them.

People in AA will tell you, in all sincerity, “It’s a spiritual program, not a religious program! You can have any sort of belief you want. You can make a doorknob your Higher Power.” Sadly, this is bullshit — and they’re in denial about it. The AA Big Book quite clearly advocates a traditional view of “God,” and does so in language that is both flagrantly manipulative and downright delusional.

The good thing about AA, and it’s very good indeed, is that if you become a member, you’ll have a lot of support from friendly, caring people who have gotten their lives back together by putting the plug in the jug and will be able to offer practical tips on how you could do the same. Even so, there’s still this nasty undercurrent of traditional religion. It’s less prominent than it was 50 years ago, and it’s more prominent in some geographical areas than others, but it’s still there. The approved AA literature is slathered with it, and the literature is never going to change, even though it’s increasingly outdated.

You will meet people who really do believe the Big Book was divinely inspired. Pathetic, but they’re staying sober, so it would be impolite to argue with them.

Happily, there are alternatives. Not in the way of meetings, however. There are a few isolated atheist/agnostic AA meetings here or there, but they’re hard to find and not always well attended. Nobody has yet come up with a viable secular organization for sobriety that has had widespread success, though a few people have tried. With respect to the AA literature, however — oh, my, yes.

If you’d like to get sober and stay sober, but for reasons either intellectual or emotional you just can’t stomach the religious angle, here’s a quick list of books you may want to track down. Some are more readily available than others. Just to be clear, you won’t find any of these on the literature table at an AA meeting. We’re trafficking in heresy here. None of these books is perfect, but each of them has some ideas that you may find very helpful.

How to Stay Sober: Recovery Without Religion by James Christopher, Prometheus Books, 1988.

The Alternative 12 Steps: A Secular Guide to Recovery by Martha Cleveland and Arlys G, Health Communications, 1992.

Twelve Secular Steps: An Addiction Recovery Guide by Bill W. (no, not that Bill W.), Beowulf Press, 2018.

An Atheist’s Unofficial Guide to AA for Newcomers by Vince Hawkins, no indication of the publisher and Hawkins’s name is not on the cover, 2011.

Beyond Belief: Agnostic Musings for 12-Step Life by Joe C., Rebellion Dogs Publishing, 2014.

Waiting: A Nonbeliever’s Higher Power by Marya Hornbacher, Hazelden, 2011.

A Freethinker in Alcoholics Anonymous by John Lauritsen, Pagan Press, 2014.

The Small Book by Jack Trimpey, Dell, 1989.

Many Roads, One Journey: Moving Beyond the 12 Steps by Charlotte Davis Kasl, Harper Perennial, 1992.

Understanding the Alcoholic’s Mind: The Nature of Craving and How to Control It by Arnold M. Ludwig, Oxford University Press, 1988.

I have some fairly complex opinions about how AA works and where it falls short. This is not the place to go into that. All I’ll say is, it’s not a magic cure: You have to want to stay sober, and you may have to work hard at it. But if you don’t care for the religious angle and you also can’t be bothered to track down any of these books, booze is probably going to keep right on running (and ruining) your life, and nothing I can suggest is likely to change that.

Posted in random musings, religion | Tagged , , | Leave a comment

Discomfort

It’s never a good idea to criticize one’s fellow writers. It’s a bit like fouling your own nest. For one thing, you might someday send a query to a literary agent, only to find that that agent is also the agent of the writer you recently eviscerated. There’s also a whiff of sour grapes: This writer has a contract with a major publisher, and you don’t, so who’s the expert and who’s the nattering nabob of negativism?

There are, however, lessons to be learned from a close reading of a published novel, lessons that the three regular readers of this space might find helpful; and if I present the lessons without naming the source, you could be forgiven for suspecting that I was talking through my hat.

I’ve just finished reading The Book Stops Here, a cozy mystery by Kate Carlisle. There are at least nine books in Carlisle’s Bibliophile Mystery series, so we can safely guess that she’s doing something readers like. I took the trouble of doing a scene-by-scene outline of the whole book so as to try to figure out what exactly she’s doing.

Before I get to the blow-by-blow, I’d like to introduce a couple of terms.

In card games such as Magic: the Gathering, each card has what’s called flavor text. The flavor text is a sentence or two that makes absolutely no difference to the play of the game; it’s there simply to stimulate your imagination, to enrich the experience. All mysteries have, I’m sure, some flavor text. When Rex Stout introduces some clever byplay between Nero Wolfe and Archie Goodwin, that’s flavor text. In a Ross McDonald novel, there may be very little, and most of it adds an atmosphere of futility, desperation, and doom. In a mystery, flavor text is anything that doesn’t contribute to the geometrical advancement of the plot.

When Carlisle devotes several pages to the delectable cupcakes baked by the new neighbor of her sleuth, that’s flavor text. When the sleuth tells us, over and over, how much she loves her boyfriend, that’s flavor text. When the sleuth and her beau debate, at some length, what to name their adorable kitten, that’s flavor text. The kitten itself is flavor text. Oh, and let’s not forget the three hours the sleuth spends trying on gorgeous party dresses.

My suspicion is that cozies have a balance with more flavor text and less crime than, say, a Michael Connelly police procedural. That’s not a criticism, it’s just the nature of the genre.

My other new term is “kitchen sink suspense.” Kitchen sink suspense is when the author throws in, almost at random, yet another danger that the sleuth must escape — falling objects, let’s say, or a rattlesnake — not because it advances the plot but merely to provide a moment of pulse-pounding drama.

Without the moments of kitchen sink suspense, The Book Stops Here would stop dead. Carlisle’s heroine, expert bookbinder Brooklyn Wainwright, does almost no sleuthing at all. Hints about the nature of the crimes and the identities of the criminals are handed to her on a platter. But every few chapters, there’s some kitchen sink suspense. Including, yes, an attack by a rattlesnake.

It seems not to have occurred to Carlisle to research rattlesnakes. They don’t attack. When Brooklyn is locked in a backstage dressing room (and that makes no sense either) with a rattlesnake that advances toward her threateningly, the scene is plainly included not because it advances the plot in any way but because it adds some excitement.

Same deal with the falling objects. Somebody pushes a “stack” (presumably a vertical stack) of tall, heavy backstage flats over on Brooklyn, but she and her companion don’t see anyone doing the pushing. A few pages later, Carlisle claims it was too dark to see anything, yet at the moment when the pushing starts, Brooklyn is admiring the painting on the flats, so that rationale falls, as it were, flat.

At various points in the book, Brooklyn mulls over (in a first-person interior monologue) what’s probably going on, or discusses it with her boyfriend. This may serve to keep the less attentive reader wired in to the story line, but such scenes do not advance the plot. As a point of comparison, my favorite writer of awful mystery novels, Erle Stanley Gardner, routinely avoids this. In Gardner’s Perry Mason paperbacks, we seldom learn what Mason is thinking. He just takes action. Action is good. Gardner’s plots are often absurd, but by golly they’re full of action!

The final term I want to mention is “idiot plot.” An idiot plot is a plot whose events can only occur if the lead character is acting like an idiot.

Now, Brooklyn has an amazingly hunky and amazingly competent boyfriend, Derek, who after the danger starts swears he will be with her every minute to protect her. This loyalty will, I suspect, have Carlisle’s readers swooning with pleasure. But somehow, at several points in the book, Brooklyn manages to give Derek the slip because she’s certain there will be no danger, only to run promptly into a moment of great danger. Brooklyn is an idiot.

What we have, then, is a story in which the flavor text is bound to appeal to Carlisle’s target readers while seeming frankly dumb to anybody else, in which the sleuth does no sleuthing, and in which the very implausible moments of suspense arise only because the sleuth is being an idiot.

The eventual explanation of the main mystery plot makes no sense either. Spoiler alert! Read on if you dare.

A woman steals a collectible book from her rich brother because she figures the brother won’t include her in his will. This is a $20,000 book, the brother has tons more valuable stuff, and the woman has no visible idea how to sell a collectible book, but that’s what happens. The rich guy’s former girlfriend then convinces the sister’s idiot son to give her the book, supposedly to get back at the rich guy for dumping her, though that makes no sense because the book has already been stolen, so her acquiring it will have no impact at all on the rich guy. And then, rather than sell the book (not that she knows how to sell collectible books), she goes onto a TV show closely based on Antiques Road Show and shows the book to book expert Brooklyn, so it’s on TV (which doesn’t make sense either, because the show is being taped and won’t air for weeks), after which the sister stabs the woman for no particular reason and the sister’s idiot sons start trying to kill Brooklyn, which isn’t going to help them get the book back.

There’s another whole plot in this novel, the one with the rattlesnake and the falling flats. It includes a few more absurdities; no need to go into them.

One of the primary challenges of writing a good mystery novel is that you have to write it from two directions at once. From one angle, the reader is seeing only what the sleuth sees, and that has to make sense and provide good rising action. From the other angle, the author has to know what the bad guys are doing offstage, even though the sleuth doesn’t know anything about it yet, and that has to make sense too.

One possible lesson to be learned from The Book Stops Here is that cozy readers really don’t care about the second angle. If the narrative provides some moments of danger, they’re never going to stop, scratch their heads, and say to themselves, “Wait — that doesn’t make any sense.”

Another possible interpretation is that cozy readers may notice these defects and be momentarily annoyed, but the publishers are buying the best cozy manuscripts they can find because they know there’s a market.

Writing a mystery novel that actually holds together is hard! Maybe Carlisle is doing the best she can, and has bills to pay and a deadline by which she has to deliver a manuscript, come hell or high water. I’m sure her readers like the cupcakes, the kitten, and the heartthrob boyfriend. As long as there’s a new moment of danger every two or three chapters, they’re probably happy.

I don’t plan to take this one book as an archetype of the whole genre. If I have the stomach, I’d like to do the same kind of analysis with several more cozies. Two things are already clear: Readers like this stuff (which means Carlisle is actually doing a lot of things exactly right), and it’s just not my cup of oolong. I love mystery novels, but my personal taste runs more to plots that make logical sense and sleuths who do some actual sleuthing and don’t act like idiots.

Posted in fiction, writing | Tagged , , | Leave a comment

Hit Me with Your Best Shot

Hanging out with other talented, industrious writers is a consummation devoutly to be wished. But alas, writing is a lonely activity. How are we to connect?

Last year at about this time, I saw an ad on Facebook for the Stanford Online Certificate Program in Novel Writing. I clicked on it, which led to a slew of other ads offering courses in writing, about which I blogged. And now the Stanford ad is back, so I thought I’d take a serious look at what’s on offer. Stanford is, if nothing else, a reputable institution of higher learning.

First the good news. The certificate program consists of five full college courses. Admission is limited to 60 students, and they’re divided into four “cohorts” of 15 students each. In between reading the course materials and writing your own assignments, you’ll be critiquing the work of the other students in your cohort, so there will be lots of personal interaction. The students will not be utter beginners; each of them will have at least some experience in writing fiction, and will be serious enough to sign up for a demanding (and expensive) course.

The course description suggests that they’re happy to include writers who are working in genre fiction (SF, fantasy, mystery, etc.), which suits me, as I’m definitely a genre author. I have no interest in producing literature or mainstream slice-of-life stories.

As a senior citizen (that sounds so much nicer than “old fart”) I’d get a 20% discount. I’d be paying “only” $900 per course, and I can afford that. One way to look at is, if I’m serious about writing, I’d be investing in my own future. Not necessarily in my own future earnings, though that’s possible. In my own happiness, fulfillment, and contentment. This could be worth doing.

Now for the bad news.

In their video pitch for the course, they display the covers of half a dozen “success stories” — novels by students who enrolled and presumably completed the program. So I had a gander at these books on Amazon. As far as I can tell from the blurbs, none of them is genre fiction, they’re all mainstream slice-of-life stories. Only one of the six authors has produced, to date, a second novel, though most of the first novels were published in 2018. This is also true of the woman who runs the program, by the way: She has had one novel published, and that was 12 years ago.

I’ve published either five or eight novels, depending on whether you count the Leafstone saga (those covers up there at the top of the blog! buy the books! read them! rave about them to your friends!) as one novel or four. Also four nonfiction books, a collection of short stories, and blah blah blah. This suggests that perhaps I’m over-qualified.

Being over-qualified is not a deal-breaker, however. I’m not going to find a group of authors to hang out with who are as far down the primrose path as I am. You take what you can get.

Here’s the big blinking red light, though. The certificate program lasts for close to two years, and the course list looks like this:

Year 1. Fall: The Writing Life: Form and Theory of the Novel. Winter: Novel I: The Powerful Beginning. Spring: Novel II: Plot and Structure.

Year 2. Fall: Novel III: Subtext, Theme, and Language. Winter: Novel IV: Manuscript Completion.

The explicit idea, as you can see, is that students will take two years to finish their novel. But for anybody who is serious about writing genre fiction, that’s just plain silly.

Right now I’m thinking quite seriously about writing a series of mysteries. I have two or three good ideas for series, in fact, one of which already exists as a partial draft backed up by thousands of words of notes. A series mystery tends to be about 80,000 words, give or take. I can easily write 2,000 words a day, if not more, day in and day out. That is, I can produce a first draft in no more than two months, including a little time out for untangling plot snags. And having been a staff writer on a magazine for 25 years, I write publishable first draft. There’s always some editing after the fact, but that only takes a couple of weeks, because I edit as I go along.

I’m not unusually productive. I daresay a lot of genre mystery writers routinely write four books every year. Some of them write under several names, so as not to clog the market with their output. But the students in the Stanford program will, in their second course (Novel I), “write and workshop an opening section of up to 5,000 words.” My goodness! You’ve already shelled out two thousand bucks, and you’re only now writing an opening section of 5,000 words?

The winter quarter of Year 1 will end, I would suppose, in February 2023. If I keep my nose to the grindstone, by that point I will have finished at least two novels and be well along with a third.

In sum, the idea that the Stanford program is suitable for industrious writers of genre fiction is a flagrant non-starter. It may be ideal for wannabe writers who have thousands of dollars burning a hole in their pockets, and some of them may, in the end, produce very nice novels. I’m not knocking the work of any of the graduates, since I haven’t read any of it, nor of the instructors, who I’m sure are well qualified and provide excellent advice on writing.

Nor am I claiming that I can reliably produce novels on a schedule. Some of my work has taken an embarrassingly long time to get from initial conception to publication. The Leafstone story started in 2004 and was finally published in 2018. But that wasn’t because I worked slowly and continuously; it was because I gave up entirely for years on end, then retrieved the story, breathed new life into the corpse, and started over. I don’t see that process anywhere in the Stanford curriculum, and I sincerely hope I’m done with it, because it ain’t fun.

Every writer’s process is different. Someone could write only one novel and then stop, and it could be a classic. (Case in point: To Kill a Mockingbird.) So I can’t claim no graduate of the Stanford program will ever become famous or write a classic beloved by millions. But to me it feels as if the curriculum is aimed at dilatory dilettantes. 5,000 words by the end of the second quarter? Gott im Himmel!

Posted in fiction, writing | Tagged , , | Leave a comment

Snuggle Up

It has happened before. After finishing a large writing project (that is, a novel), I flounder around for a while trying to organize a new one, get terribly confused about the welter of material I’ve generated, and give up writing entirely. But then a month or two later I start thinking about one of my abandoned projects, dream up some possibly useful changes, and start putting it back together.

Sometimes a project will go through this rinse-and-repeat cycle more than once. Sad to say, I’m not the kind of writer who can crank out a new book every six months. Or at least I never have been. For the project I revived a few days ago, however, I’m setting up some careful guidelines for a series. With the guidelines in place, if they’re good guidelines, maybe I’ll be able to write six or eight books back to back.

I want this project to have legs, because I’m burned out on self-publishing. I would like this book and its sequels to be commercial. As in, pitch it to an agent and the agent says, “Ooh! Please send me the full manuscript!” I don’t need the money, but I do like a nice challenge. If I don’t have a meaty project to work on, I get bored.

To get a positive response from an agent, you pretty much have to hit the sweet spot in a genre. Agenting, as I’ve noted before in this space, is a 100% commission business. If the agent doesn’t see a prospect of placing your manuscript with a publisher (by which I mean, a commercial publisher that pays a hefty advance against royalties), the agent is not going to waste even 30 seconds looking at it.

This project started out as a sort of tongue-in-cheek riff on the cozy mystery genre. I was calling it an anti-cozy. And as someone who heard about it asked me a couple of years ago, “If you dislike cozies so much, why are you writing one?” Good question.

Something about the story wouldn’t let go of me, though. So now I’m re-imagining the material in a way that I hope will hit the sweet spot in this admittedly very competitive genre. I’ve made my sleuth more relatable. I’ve moved the small-town setting inland and renamed the town so that it’s no longer a snide comment on Murder, She Wrote. And I’m thinking as seriously as I can about the parameters of the genre — not just the length (60k to 90k words, average 80k) and the absence of sex, violence, and bad language, but also about things like the clever book titles used in series and the balance between the crime plot and the sleuth’s social network.

Also, I’ve gone back to doing research in the genre. Bringing home stacks of books from the library and trying to be as broad-minded as I can about what I find.

Being broad-minded is difficult. To be honest, the style of writing in cozies ranges from adequate down to dreadful. And the dreadful books are being published by major imprints, not just as one-shots but as series of a dozen or more titles. Flat, stilted dialog. One-dimensional characters. Failure to meet even a minimal standard in setting a scene.

The challenge for me is to avoid being snobbish about what I’m encountering. The right way to look at it is, I’m a better writer than most of these authors. Seriously; not giving myself airs here. I really am. I interpret this as an encouraging sign. If I can get the formula right, I should be able to sell my series, because my manuscript will float feather-like to the top of the pile.

It’s the formula that I need to master. For instance, the typical amateur sleuth in a cozy is a woman between 30 and 40, and she has a career in a field that female readers (the vast majority) will be able to relate to. You will not find cozy protagonists who are motorcycle mechanics; don’t even think about it. A lot of them own charming little bakeries that do specialty chocolate muffins or something. Food is guaranteed to be relatable; there are even cozies that come with a few pages of recipes. Book shop owners and antique store owners are also big. And because the sleuth is the business owner, she has time to run around solving the crime, a crime that has somehow mystified the local police.

For almost any generality that I might mention, there are of course exceptions. In the only series I’ve found so far that I really like, the Flavia de Luce books by Alan Bradley, the sleuth is an insanely precocious and rather nasty-minded 11-year-old girl. My advice for aspiring cozy writers (including myself) would be that you can probably get away with deviating from one element of the formula, and in fact you might be well advised to do so if you can do it in a way that makes your book stand out from the pack. But while deviating from that one element, be doubly sure to keep the other elements well in line. And really, the ban on sex, graphic violence, and bad language just plain can’t be violated.

My sleuth is in her early 20s and has, in the first book, no job at all. So I’m stepping outside the formula. She won’t land a standard cozy job until book 4. But I’m planning that out as part of the long story arc, and since my personal motivation is that I’m rather fond of this character, I’m keeping her. I got rid of her pet rat, though. A friend of mine said, “Oh, no, you can keep the pet rat! Make it a rescue rat.” My friend is wrong. The pet rat was satire, a not very subtle dig at the pet cats that are crawling all over everywhere in the cozy genre. But this series is no longer a satire. The rat had to go. Now her aunt’s next-door neighbor has a golden retriever. See? Golden retriever. Relatable.

I’m still fiddling a bit with how to make the series titles cute. It’s harder than it looks. But I’ll have to nail it down before I pitch the series to an agent. Having a spiffy manuscript is not the only requirement. An agent will want to see the whole package.

I’m aware that there are people who look down their noses at this sort of thing. They want their creative writing to be deeply personal, straight from the heart. Hey, if you can do that and sell it to a New York publisher, more power to you! Or if you’re satisfied to self-publish, you can do anything at all.

Me, I like plotted genre fiction. It’s what I read, and it’s what I write. I’m not ashamed to want to tell a good story. And that’s harder to do well than you may think.

Posted in fiction, writing | Tagged , , , | Leave a comment