Programming as writing

Most people can put words together into sentences. They can communicate adequately without being great writers. Most programmers can write some kind of program. It probably won’t be very good, but most companies don’t really need it to be very good. Most companies only need basic programming skills. A college degree in computer “science” from anywhere is good enough, and the job is just a job. It doesn’t require much in the way of continuing education, conferences, workshops, or someone who is so interested in the craft of programming that they are always trying to learn more.

Such people can write, but it’s just basic writing. They are not essayists or novelists — and keep in mind that there are lots of articles and novels that get published that are not particularly well-written or worth reading. Obviously such things seem to sell well enough to make the effort and risk worthwhile all around.

But someone who dedicates themselves to writing, who goes through the struggle of figuring it all out and discovering their own place in the world — this is a very different kind of writer (of prose or programs) than the average programmer. This person can produce more functionality faster, and the results will be clearer and deeper than ordinary code.

Finishing a novel is a very impressive feat. Doing something that might be worth publishing — that’s an even greater feat. But the vast majority of published novels aren’t worth reading. Only a small fraction of writers create something really worthwhile, and no one, really, knows how they do it. Each good novelist comes to their art in their own way. And what about nonfiction? Every year there are about 5000 novels published, and about 50,000 nonfiction books. Most of those nonfiction books are merely functional, not great reading. But they contain useful information and enough people buy them to make it all worthwhile (to the publisher, at least).

This answers one of the biggest questions — why you can’t replace a programmer with just any other programmer and get similar results. It also suggests that you should evaluate what kind of project you’re creating when you decide who your team should be, and how it will run. The creation of mysteries and young adult fiction and so-called “bodice rippers” and the vast sea of nonfiction books all have their own particular structure and constraints (you’d be surprised at how rigid and controlling publishers are about these things, as if they are manufacturing some kind of basic commodity — “the murder has to happen in the first 10 pages” etc.). None of these are the mass-market bestsellers (“killer apps”) that are sold by the author’s voice and style (few of which I find readable). The mass-market bestsellers usually don’t coincide with the great writers, since most people don’t have the patience to read these meta-craftsmen, just as most programmers don’t read the source code for compilers.

Although stakeholders won’t necessarily understand the intricate details of the writing and publishing process, they typically understand that there are different types of writing, and that the craft of writing is a weird, unfathomable and artistic process which can’t guarantee results. So even though “software is writing” is not necessarily going to increase the predictability of what we do, it may at least help non-programmers to understand its unpredictability.