Programming is the art of problem solving. Computer programming specifically is the art of problem solving using computers, usually computer software.

Being a good programmer then involves being a good problem solver. It has nothing to do with being a good coder (though good programmers usually are), writing popular software (just as some movie stars are lousy actors, having written popular software does not necessarily mean one is a good programmer, nor, of course, does it mean that one is not).

A good programmer can see a problem that needs to be solved. He can split it into smaller subproblems. Without losing track of the initial problem he can then treat each subproblem as a problem sui generis, then continue the art of problem solving recursively until he gets to atomic problems, that is problems that can (or should) no longer be subdivided into further subproblems but can be solved with a simple algorithm, a few lines of code, or even a single op code.

The good programmer does not need to solve every subproblem by himself. He may assign (i.e., delegate) any subproblem to another programmer, perhaps not as good as himself, but good enough to solve that particular subproblem. If he does that, it is possible for the good programmer to be good, even very good, without writing a single line of code. Though that is rare because good programmers generally enjoy coding as much as they do programming. Besides, often good programmers have a big ego which makes them think that other programmers and coders would mess up his solution. But that, of course, is a different topic altogether.