Charles Simonyi, writing in Edge, likens programming to encryption. Encryption without benefit of automation, because programming is largely done manually.
The plaintext in this case is the notional specification (of a problem and how it is to be solved). The encryption process transforms this specification into the chunks of gibberish we call programs.
This nicely highlights the difficulty of changing software when the problem (or solution) specification changes — since we've invested so much manual labor "encrypting" the specification, we invariably choose to edit the cyphertext.