Paul Johnson, in the U.K., wrote a piece about how there is no known “process” for programming. At some point, all the theory and methodology goes out the window and someone has to sit down, think about the problem, and write some code.
I’m sure I won’t be the only one to suggest this, but I like to think of programming as analogous to writing prose. You have an idea, a concept, something nebulous in your head, and you have to express it in words. A good program has both structure and flow, just as good writing does.
In one sense, the languages we program in are far less expressive than any human language, but seen in a mathematical light they are more expressive. The code for, say, Euclid’s algorithm is much shorter than the English description of what it does, no matter how verbose your statically-typed object-oriented programming language may be.