Writing and programming are two of the most **abstract** activities humans engage in.

We take abstract ideas – more mathematical and precise in programming, more organic and metaphorical in writing – and compose them together, group and categorize them, place them against each other. We stack abstract concepts on top of other abstract concepts to produce some effect in the real world. But until that effect reaches a computer output device or a human mind, writing and software both exist in the ethereal virtual world of abstract ideas. The job of a programmer or a writer is to operate on these abstract ideas in a virtual, imaginary space, such that when the effects reach the real world, they’ll have the desired outcome.

The outcome of program is some result given or action taken by a computer:

- The solution to a mathematical problem
- The accurate and precise transfer and transformation of some data
- The accurate and precise repetition of some regular routine
- Processing some human input in a pre-defined way

The outcome of writing is some change of mind or action taken by a human:

- Following through on a call to action
- Successful persuasion
- The transfer of some mental model from one person to another
- The transfer of an emotion or feeling from one mind to another
- Leading the reader to ask a novel question for themselves

So they differ on these points. But both media of abstract ideas create some effect on people and the real world around us by *manipulating pure thought*, and combining them in new and interesting ways.

There’s a second way in which these acts are antithetical. Programming is the manipulation of abstractions that are defined purely from first principles. Computers are incapable of reasoning by analogy or by examples, and so every abstraction we introduce to computers are logically and rigorously defined from mathematical axioms of computing. To program, then, is to compose these mathematically precise ideas together like meshing precisely milled gears together with tight tolerances. Writing, however, is the manipulation of abstractions that are defined almost entirely from metaphors, examples, and connotations. Ideas in language aren’t composed together in mathematically precise and rigorous ways, but loosely and by analogy, because humans reason about experience loosely.

To *program*, then, is to compose abstractions together from precise, axiomatically defined components to produce a precise, carefully defined outcome.

And conversely, to *write* is to compose abstractions together from loose, metaphorically and connotatively defined components to produce empathetic, human effects.