To be honest I had started to hate programming and the industry overall until I started learning functional programming and about category theory, etc. It turns out I've been working on crap my whole career, at least in my opinion, and that's why most of my time has been spent fixing bugs, slowly adding new features while working around horrible design. Working on crappy software with crappy design and crappy developers is terrible but this isn't how it has to be. Now I don't ever see myself getting out of the industry as, even if I'm managing my own company or working as a manager for someone else, I'm always going to do some coding and manage things at the code level because it's fun when you're doing things right and it's also extremely important.
I've read that the people most satisfied in life are craftsmen who dedicate themselves to mastering a craft. There is not much craft in managing deadlines and customer commitments and such. It is necessary work but it is not creative.
On the other hand, crafting code is a creative activity. Even for the simplest projects you can appreciate the structure, and learn about the varying tradeoffs in complexity that are made by any particular design pattern. This type of thing is a very rich craft, and very satisfying to master.
The good news for us is that mastering this craft translates into satisfied deadlines and confidence in ability to deliver on customer commitments. We can be master craftsmen and be nearly guaranteed success in the knowledge economy, which is not a luxury of other crafts like art and writing.