Silly question of course, anyone who has programmed for 18 years is a programmer. But the missed question is "Am I a hacker[1]?" And it is
that which puzzles attempt to ferret out. Let's take the example of the 1000 piece Escher puzzle that the author uses as an excellent example. They are correct that most of the pieces are just 'shades of grey'. Impossible right? If you're a hacker you say "Challenge accepted!" if you're not you say "This is way more work than its worth." Because what the hacker mentality gets reinforcement from, is overcoming the 'impossible' (or simply the 'you can't do this') not the actual puzzle assembly.
So in the Escher puzzle a hacker says, "Hmm the picture isn't much help, its not on most of the pieces. What else can I use? Shape!" and so first will attempt to identify every piece that has a shape suggesting it is on the edge of the puzzle. Next puzzle pieces themselves have a certain symmetry, with some 'coves' and some 'penisulas' (or convex and concave curves, or 'innies' and 'outies') so unknown pieces are often sorted into the number of those features they have. Basically the hacker is looking for any piece of information that can inform on a possible way to get to the end, generally that information is non-obvious at first, more obvious once you find it. Particularly delicious puzzles will have several layers of information.
So if you don't care to figure out ways to solve a problem that is, at first glance, either really hard or nominally impossible to solve, you can still program just fine but you need a set of rules for putting together your code. And you won't find yourself asking if they are the best set of rules for the particular problem you are coding, you just make sure the problem is solved. That is a perfectly valid programming model, it gets things done.
[1] And I'm using the puzzle solving / bounds testing skill here not the application which can be applied to good or evil.