My motivation for learning to code was that I wanted to build things; not just anything, either, stuff that solved a problem I or someone else had. I don’t necessarily enjoy programming for the sake of programming, which seems to be unusual amongst a lot of developers I talk to.
Which is not to say I don’t like what I do. A lot of people seem to describe programming as “fun” (anecdotally, the most cited reason I’ve seen for writing ruby, a language I’ve been spending a lot of time with in the last few months).
“Fun”, to me, describes entertainment, recreation; like listening to music, watching a film or going quad biking.
Sometimes it’s fun, but that’s sort of a side-effect of being able to execute well. I pride myself in the overall elegance of the craft – being able to deliver a good, well defined balance on the scope/cost/schedule axes, quickly get used to a new tool, or know when to toss out an oft-used one, etc.
That might mean a lot of frustration along the path to that point. It might mean knowingly incurring technical debt. It might mean working in a language or technology I’m unfamiliar with, doing something tedious-but-necessary, or working on a timescale I find uncomfortably tight.
These are challenges that make me a better developer. They take me out of my comfort zone. I’d like to think it helps me be more open, objective and skeptical (without being cynical).