There are many reasons why I like programming. Among them:
- intellectual challenge
- solving problems
- automating boring tasks
- it allows me to build system.
The last item was inspired by a great talk (video here). Some people, which we call "geeks" or "nerds" (and I count myself among them) like to think in systems. In well-defined, understandable but usually non-trivial systems.
When I write a program, I explore such a system (one or several programming languages) to built another system. I don't think everybody understands that, but I find great joy in it, even if it's not useful in any way.