The majority of programming is analyzing a problem domain and applying the right design pattern. It is not creative. The longer I am at it, well over a decade now, the more this applies.
Software is logic manifest, there is no limit to what can be coded. At any layer of the stack you can radically reenvision the way things are currently done in order to create a new way of doing things, and in no other creative endeavor can you so fully control the minutest detail from the smallest atom to the grandest super-structure. The reason we have design patterns is precisely because the possibilities are so wide open that we need some structure and convention to aid communication and comprehension between programmers.
If you're just churning out cookie cutter patterns you need to get a new job or side project and rediscover the magic.
I'm going to go with the gp on this. I've worked as a programmer for 12+ years (and a few good more as a hobby). I've worked in various industries developing software (games, AI, QA for chemical processes, CRMs for Wine producers, Financial Institutions) and I just don't understand all this talk about programming being so special that we are 'creative' and not everyone can be a programmer talks, and all that new age crap I see exposed here in HN.
When you are learning, yes, probably it is different, but you reach a point when you see programming most things as a chore. There is no magic or unlimited possibilities. There is a goal, and you code to get there. Can we just stop with this bull crap about we being special snowflakes? Just look at your description of software: 'smallest atom to the grandest super-structure' -- Seriously?
What do you define as creativity then? You could say that the majority of writing is composing sentences with nouns and verbs if you look at it from such a low level. (or that artists are just applying specialized techniques to add to or subtract from a medium).
I suppose that you could leave the creativity in engineering to other people (designers, product managers, etc), but my experience has been that you end up a far better product when you engage developers early on in the brainstorming and product planning process and let them help decide what the product should be.
So this is what I was getting at precisely. As buckbova said, programming is problem solving, and solving problems is a creative process.
If you treat developers as creatives (like you do design, etc) you get a superior product and work environment, and you involve more people in the product brain trust.
I disagree that development has come anywhere close to optimizing our design patterns. People are still coming up with better patterns for even basic CRUD and static site generation apps. Coming up with new patterns and improving existing patterns is what we do.
Designing and implementing a software project is not creative. It is learned. It takes methodically analyzing requirements and designing a solution based on learned patterns through study or experience. We engineer software.
"Coming up with new patterns and improving existing patterns is what we do."
Chances are you are not "coming up with new patterns" but instead re-discovering existing patterns.