Programmers Are Writers
Back in 2009, Bruce Eckel wrote an essay that I wish I’d written.
“I finally figured out the right analogy for software development,” Bruce wrote. “Alas, the target audience for this analogy won’t be happy with it.”
Writing software has been likened to everything from math to science to engineering to handicrafts. Bruce’s insight was that what writing software is most like is writing.
Bruce is not the only person to make this connection. In Clean Code, Robert C. Martin says, “We are authors.” Butler Lampson predicted back in 1972 that programmers would soon become more like poets than like aircraft designers. A blogger at Coding the Wheel even wrote a detailed analysis of Strunk and White as a manual for programmers.
I think that this is a delightful and, more to the point, a highly useful analogy.
And it works both ways. I wouldn’t go so far as to say that writers should think of themselves as programmers, but I would say that any writer can improve their prose greatly by applying methods that the best programmers use. I hope to explore this idea in future posts.

I can’t agree more. As a developer that delves into fiction and occasional prose, let me testify to first-hand experience with the parallels.
James, I’d love to hear more about your experience.
“First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.”
Abelson & Sussman, “Structure and Interpretation of Computer Programs”, preface to the first edition http://mitpress.mit.edu/sicp/full-text/sicp/book/node3.html
When writing and programming one is holding a complex thought or behaviour in mind. The task is to determine how to split it up into its simplest constituent parts so that each part can be easily understood both separately and in terms of the role it plays in the larger context. Another struggle in both endeavors is to find good names for each constituent part, again something neither language nor computers require. (“Passport Office” is simpler than the Greenlandic “This is the place that must people go to get the papers required to leave Greenland”)
Some may argue that since it is humans, not computers, that require problems to be split up, or identifiers to be given good names, it is not necessary for programmers to find an optimal expression of the problem. However they forget that the length of programs is the only proven predictor of a product’s final bug-count. As Abraham Lincoln said, it takes time and effort to write short letters (and short programs).
Most engineering involves identifying the type of problem one is facing, and applying a standard technique to it. I know of no standard technique to grasp a complex thought and express it in terms of the simplest possible ideas. That is why authors are not called “book engineers” and why the term “software engineer” seems such a poor description.
I often make the remark to people from the business side of our organization that when they are instructing our developers how to build software, they are basically programming the programmers.
The human programmer simply adds another higher level of programming language in the huge stack that goes all the way down to the ones and zeroes that finally become the working software product.
I think you haven’t covered your main point. How is this analogy useful to you?
I miss a reason here.
What I get from this is just thinking: What a load of bullshit.
We’re not telling stories with our code, nor do others read to be entertained.
Will you use anologies like our compiler is their proof-reader? Our syntax is their grammatics?
I don’t get it.
We have our concepts of syntax, grammatics and writing so others can read and understand it.
But I think we shouldn’t compare us to writers only in parts. Depending on what we’re doing, we are a specific kind of writer, an architect, a mathematician or physicist, analyst or even a psychologist. We are all of that.
But without further reasons I can’t say I’m a writer. In areas I do similiar things, but I’m not a writer.
Knuth is way ahead of you. Check out literate programming.
The idea is that you write novel-like prose for other people to
read and, as a side effect, also embed the actual source code
in your document. You extract the source code from the
document using ‘tangle’, so the document is “live”. You can
do this in any language. For an HTML example see:
http://axiom-developer.org/axiom-website/litprog.html
Whether I am programming an artificial intelligence in English or in German I must be an author literate enough to include a little idea-story in English prose or in German-prose.
Sengan, nicely put.
Artyom and Kissaki, correct: this was no essay, just a sort of throat-clearing for points to be developed over time.
Tim, Knuth is always way ahead of us all.
Ridiculous story there. What occurred after?
Good luck!