It resonated with me when you said "I guess ultimately I enjoy thinking about concepts more than the actual programming" because I think I'm that way too. But that's lead me to think a lot about programming concepts and into language design.
Not giving up yet, but at the moment I need money...
Your comment reminds me that there should always be ways to make the programming job more interesting. If it is boring, I should think about creating abstractions/frameworks/IDEs and what not to make it less boring.
So your comment cheered me up at least a little bit :-)
I should probably taper my words with some warning then.
I'm the kind of programmer that has always thought about methodology, design, and best practice. And after thinking about that for years, and talking with other programmers like me (only smarter) and learning from them too, I can tell you not only is it really really hard but the pursuit of the nicest possible programming experience (clarity, simplicity, lack of repetition) can make you very unproductive.
The guy who spends all day writing frameworks, testing tools, and language abstractions is rarely the guy getting the most done. Unless he's a super-genius.
Only recently I was trying to apply TDD to a really extreme level. I didn't work. I ended up throwing loads of useless tests and suddenly was much more productive. But I probably lost weeks because of that.
But there is some good news: My hardcore desire to make everything wonderful barely exhibits when I program in Haskell. I think this is because the lack of side-effects, strong type-checking, and high-order functions give you such a good baseline and I don't feel like I need to write lots of abstractions and complicated things just to feel like I've got a handle on the situation. But then I'm unproductive because of inexperience with Haskell and FP in general. But that's a temporary thing.