To me, the term "programmer" connotes a person who is performing more or less rote translation of specifications or a detailed design into software code.
"Developer" connotes a more holistic involvement in the entire process of constructing software applications.
YMMV.
I am glad engineer is not "synonymous" with "programmer".
When I was a kid, I built a lot of things for fun. I would tinker in the shop and build a go kart or a boat. If it broke, I made it stronger. It was fun, creative, and looked a lot like engineering when I was playing with machinist tools. There was even a lot of intuition and experience going into the designs. But that wasn't engineering.
Right now I'm doing some engineering. I have a CAD model open and I'm building a mathmatical model of the stresses imposed on it. We iterate the CAD model based solely on the math. The draftsman had made a first pass at it, I came back and said these areas need to be strengthed and these can be lighter, he adjusted the model, and we rechecked the math. There was never a real part created because it is simply too expensive. The cost of this part, once forged and machined, exceeds $85k. So we will be working on the model and tweaking it until we have a design that we know works. And then we'll both go on to do other things and at some point a few months from now it will get made by other people who I probably will never even meet and then I will show up again when we test it.
In contrast, most software developers work directly on the final product. There is no model. You might make a spec, a test suite, a UML model or sketch of how you think it should work, but there is no testing on that. That is a hypothesis not a model. Nobody ever stands there with a UML model in a production envirement and runs tests on it for twice as long as it would take to code it.
So software developer seems like the right name to me. This is far from a knock on software development. A lot of times I think engineering is more straightforward. I either pull formulas out of a book or plug it into FEA modelling software and look at the pretty colors. But the "engineering" part of the title for me speaks to the process I employ not me being superior to anyone who is not an engineer. I just think "software engineer" is a funny title for people who write code on the final product 99% of the time. We don't call designers "photoshop engineers" even though a lot of them are super smart and super skilled at what they are doing.
The question is highly subjective to the organisation using those titles, but generally you will find Programmers, Software Developers and Software Engineers perform the exact same role.
I've notice some people do get a bit touchy about what you call them though...
By the way, this has been discussed to death on StackOveflow http://stackoverflow.com/search?q=Difference+between+program...
"Software engineering as it’s taught in universities simply doesn’t work. It doesn’t produce software systems of high quality, and it doesn’t produce them for low cost. Sometimes, even when practiced rigorously, it doesn’t produce systems at all.
That’s odd, because in every other field, the term ‘engineering’ is reserved for methods that work."
http://confreaks.net/videos/282-lsrc2010-real-software-engin...
It comes down what's the definition of engineering.
I personally think we shouldn't look for metaphors in other fields with "science" or "engineering" in their names.
A program is a programmer. Developer is also fine, but it implies a bit more than programmer.
Programmer can be someone who just programs the machine to implement the ideas of someone else (product managers).
Developer implies someone who develops these ideas, not just implements them.
I think "Hacker" is a fine word to describe a programmer/developer. It implies a sense of ownership and pride and craftsmanship.
Gotta have them fancy titles, you know?