If you want, you might get in touch with me. Projects are always better when they're being done for/with someone else, and maybe we have overlapping interests. Reply to me if that's your will.
I want to share one comment about distraction where I like the way novelist/nerdfighter John Green put it: "This is a common problem because the easiest thing for us to do is whatever we are currently doing -- which is usually nothing."
If you understand will, resolve, transformation, interaction, and love, then you can choose what you find fun. But when you don't have that understanding, then you reach a point where your ambitions are loftier than your one-shot ability is, so your target projects are bigger than one-weekend coding binges. This makes it very hard to focus on those projects, which I think feels like boredom even though it's not.
To answer your own question, I enjoy programming on several different levels. For example, there is the affective level. I now have a remote server running FreeBSD, and whenever there is a software update, you have to recompile whatever's in the ports. It always makes me giddy (which is an emotion, an affect) to type some small "make install" command and then text flies by on my screen. It's very hard to explain what this emotion comes from. It's halfway "it's working!" and halfway a sort of pride that I am making some computer somewhere do something big and complicated for me. In any case it feels power-mad and exciting, like I have minions who serve my every whim.
On another level there is the abstract appreciation. I really like sort of the mathematics of programming, by which I mean distilling some complicated idea to a really pure and simple form. How does the server work? Well, everything that I want to be able to do is a service -- the very simplest unit, with a uniform syntax for simple-syntax requests and responses, you just start off by writing "here are the things that I expect to be able to do" and fill in the code stubs. I love the moments where I get to do that. I've written the Fibonacci numbers as a matrix exponentiation just to figure out what the actual time bound is in the "O(1) algorithm" (It turns out that it's also O(N^2) just like the naive summation algorithm, which for large numbers will add up N N-bit numbers, it just has a slightly smaller constant.)
The abstract appreciation is also why I really like refactors; the cleaner the code gets the happier I am.
Finally, I think there is a creative appreciation. I appreciated programming my base-10 clock (shameless plug: http://drostie.org/time/ ) not because it was a technically difficult task but because I got to build a machine which just had not existed. It was the same thing with switching to Linux, where I have a more personal relationship with my laptop because I've taken the time and effort to care for it.
I really believe that there is a simple formula -- that patience plus symbolism together create real meaning, because they both emerge from a sort of harmony. Of course there is a longstanding philosophical problem that this meaning, while real, is incomplete -- but I view that as a fundamental issue in life. Anyway, take care, work on a project with raw symbolic potential, and just be patient with it -- then you'll find the results meaningful and enjoy the task. Just walk into your office one day saying "I am just spending the next hour on this project." It can be quite liberating.
Maybe we can talk more, if you're interested.