I believe programming, like any form of human expression, affects the writer and the reader profoundly. Too often, we become so enamoured with the functionality, we forget about the readers. Sure, I can have a 6-layer deep outline of a novel which communicates all the same plot information as the prosaic version, but does it really affect the reader the same way?
Why should we care about the readers of the code? After all, isn’t that audience far more limited than those that experience the functionality of the program? Isn’t that simply programmer elitism? Of course, we could write a program that is an end unto itself, though even that could serve its purpose (a prototype, a reduced problem, etc.) But how we think about a problem domain is highly related to how we describe it. And, as humans, we’re really not good at keeping lots of details in our heads, and we’re highly sensitive to how a problem is stated. It’s hard to tell if a problem is isomorphic to another problem we know, or if the problem is ill-structured and clouds our thinking.
So why should we care about the reader? Because we are the primary readers of our own code, and we are the most deeply affected by its misconceptions, mischaracterizations, hidden consequences, and complexities. The degree to which the program works correctly is only as good as our ability to understand problem domain correctly and properly enchant or enrich the “experiencers” of the program.
We must express our intent as simply as possible with no more and no less. We must always strive for clarity. We must always remember the reader: our future selves or any others that join us in our particular endevor.