"My current theory is that programming is quite literally writing."
Of COURSE.  Why would anyone think anything else?<p>For more, let's start with source code.  Suppose we have source code line<p><pre><code>     a = b*c
</code></pre>
Reading this line, we want to know what it does and check that it's correct.  So, we need to know what the line 'means'.<p>But, we conclude that<p><pre><code>     a = b*c
</code></pre>
doesn't really mean anything.<p>Of course if we saw<p><pre><code>     F = m*a
</code></pre>
we might guess that the variable names were mnemonic and guess Newton's second law that force equals mass times acceleration.  Okay, now we know what the line means and can check if it's correct.<p>Okay, we are beginning to see:<p>A line of code such as<p><pre><code>     a = b*c
</code></pre>
doesn't mean anything.  So, we have nothing to read and no way to check.  So, we don't have anything.<p>We could write<p><pre><code>     F = m*a
</code></pre>
and begin to guess what this means.  But we are still in trouble:  We still have no good way to communicate meaning to permit understanding or checking.<p>So, we have to ask,<p><pre><code>     F = m*a
</code></pre>
came from physics books, and what did those books do?  Well, they wrote in a natural language, say, English.  Always, an equation such as<p><pre><code>     F = m*a
</code></pre>
was just an abbreviation of what was said in English.  And, in particular, from the English there was no question about the meaning of each of the variables.<p>Net, math, and science with math, are written in complete sentences in a natural language.  The variables are all clearly defined, discussed, explained, etc.  At no time is an algebraic expression of such variables regarded as a substitute for the natural language.  Take a physics book, throwout the English and leave just the equations, and will have nothing.<p>Physics and math understand; so far computing does not.<p>So computing tries to write<p><pre><code>     force = mass*acceleration
</code></pre>
or some such and omit the English.  For simple things, can get by this way.  Otherwise, this approach is hopeless, at best presents the reader a puzzle problem of guessing.<p>The matter of using mnemonic variable names as parts of speech in English is a grand mistake but common in writing in computer science.  Bummer.<p>Bluntly computing has not figured out that there is so far just one way to communicate meaning:  Use complete sentences in a natural language.  Period.  That's all we've got.  But computing has fooled itself into believing that algebraic expressions with mnemonic variable names form a 'new language' that, in computer source code, can provide the needed meaning without a natural language.  Wrong.<p>For<p><pre><code>     F = m*a
</code></pre>
the situation is simple.  But significant source code has much more complicated cases of 'meaning' to communicate.  Again, computing tries to get by, say, using a big library of software classes, relying the mnemonic spelling of the classes and members and the documentation of the classes.  In simple cases, can get by this way.  But fundamentally, for some complicated code, the meaning, workings, etc. just must be explained, and there's only one way to do this:  Complete sentences.<p>So, writing these complete sentences to communicate meaning effectively is 'writing'.<p>Done!