I've always viewed myself as a developer. I know how to very effectively and efficiently put pieces of already written code and libraries together to build new products. I say I'm not a programmer, because I feel that requires more lower down knowledge and implementation details.<p>From my experience, a programmer/engineer can build a very efficient reverse tree sort doodad, and it come out PERFECT awesome, but they rarely build entire products. Then a developer/architect comes along and takes that brick and sticks it alongside a bunch of other bricks to release a product.
Back in the ancient times of the 90's there were no developers. You were either a programmer or a systems analyst. Programmers wrote the code and Systems Analysts gathered requirements and designed the overall system specs, over time those two jobs kind of merged into what a we call developer, giving the Programmer/Coder much more say into what an overall system will look like/behave than before and ultimately reducing the head count. At least I think that was the idea.<p><i></i>EDIT<i></i>: Another interesting point is that originally programmers were more specialized and dedicated to a single set of tools/languages while developers, when they first appeared, were more concerned with "developing" the ideas into a useful system and writing it in whatever language got the job done faster. Now today pretty much anyone with any skill set calls themselves developers but you see more old timers calling themselves programers.
Some people think of a programmer as someone who can write code; and a developer as someone who can develop solutions.<p>The difference being that the developer is expected to be able to identify problems to be solved and the solutions to the problems, in addition to implementing them. The programmer is told what the problems and solutions are and only needs to be able to implement them.<p>However, not everyone makes any such distinction, and in the vernacular the terms are basically interchangeable. If someone uses one or the other term, don't assume they make that distinction; assume they're just talking about someone who can program. If you see one or the other in a job title or description, you will still want to speak with the hiring manager to understand the scope of responsibilities.
Unless there is a "Senior" tag on the title, usually Programmer/Developer/Engineer/Hacker/Coder are pretty interchangeable across the industry.<p>That said, some companies do differentiate, so it pays to really read the descriptions.