Some programming languages, especially among those which haven’t gained great popularity, are puzzles. 

That’s not to be confused with “programming in general is a puzzle.” There’s always a certain amount of thought that goes into understanding a problem and deciding upon an approach to solving it. But if it takes focused thought to phrase that solution into working code, you go down one path then back up, then give up, then try something completely different–then you’re almost certainly using a puzzle language.