Programming is about representing in a computer a solution to a problem. Fred Brooks said in his The Mythical Man-Month that representation is the essence of programming, so maybe that shines a light on the whole issue.
Immediately, we can start asking questions from that.
What is representing a solution?
How do we solve the problem in the first place?
Is solving the problem part of programming?
What representational tools do our programming languages provide us with?
Are we making the best use of those tools or are we just trying to program in X using the Y language?
This is the kind of argument people make by saying “You’re just writing C in Python.” or “You’re just writing Java in PHP.”.
How is representing your solution in an OO fashion better for your particular goals?
If you’re not doing OO, think of the other paradigms you’re using.
In our programs source code, should we emphasize the problem, the solution or the representation?
Can we emphasize one without sacrificing the other 2?
How can raising the level of abstraction help us with better representing solutions?
Given a program, can we change how the solution is represented in such a way to get better results?
This is obviously true. We can very often change how we represent the solution to the problem in a way that leads to, for example, less memory usage at runtime. Another point of view here is refactoring, which can lead to programs that are easier to maintain.
Given you have to read some code, which of the three is the hardest to figure out?
Given you know the representation, can you “backtrack” the problem and the solution?
These last two are about code readability. When we program, we encode a solution into a representation. When we read a program, we do the reverse process: we decode the representation back into a solution.
The problem with “readability” is that it’s a terrible word. What we want is understandability, reasonability and related benefits. I believe the word “readability” causes issues for people and leads to significant misunderstanding. There is a lot of “code like english prose” out there that does more harm than good by hiding important aspects of the representation being used.
No, I don’t really have the answers. But we can still think about the questions and come up with interesting and useful conclusions on how to become better programmers.