|Reversible figures and vase. From Wikimedia Commons|
I've also been rediscovering the fun I have playing Sudoku. It's interesting how organizing numbers into patterns according to rules fosters a sense of accomplishment. Probably informs my career choice of "professional geek" (a.k.a. programmer).
|Sudoku Puzzle. From Wikimedia Commons|
That's not to say that enjoying puzzle games and being a good programmer are inextricably linked, in fact I'd dare say that in some sense, being fascinated with solving puzzles can be a detriment to being a good programmer. For example, solving a sudoku puzzle requires a very strong adherence to the rules of the game so that you can "predictive" the combination of numbers in the correct sequence to solve the puzzle. This same strict adherence to the "rules" of programming will result in the idea that given a particular situation there is only one solution which will work; however, as has been proven time and time again in the world of software there are plenty of choices to solve any given problem and often the "right" choice is more influenced by perspective.
I often find that at one level a programmer is a plummer. You connect the pipes and/or tubes if you will. (You didn't know that the internet is a series of tubes?) Then turn on the information faucet and have the data flow from point a to point b and then it all goes down the drain. From this vantage point programming would seem like it's just a puzzle, if only all problems could be that simple. The reality is that the issue is not moving information through tubes, the issue is figuring out if you even have the right information in the first place.
This is where perspective comes into play. You have to be able to obtain the context of a problem and appreciate the subtle shades of gray that come into the black and white world of programming. Who are your users? What are their objectives? How do you want them to feel after they use your software? And a hundred other questions that even make me cringe when I think about attempting to answer these questions for all but the simplest of problems.
If you do figure out what the right "perspective" is then you can dive into the "fun stuff", where you get to enjoy the straightforward challenge of programming and relish the sense of "solving the puzzle, the right way".