Hacker, programmer, developer, coder, and engineer are terms used by different groups to denote the same people. So the difference is mainly what they say about the speaker.
Very true. "A friend of mine" was writing some ad copy for a job req. "his" employer was trying to fill, and wanted to use the word "hacker" in the headline. (E.g. "Looking for a great hacker", or somesuch.) The (oursourced, non-technical) HR dept. would not permit the use of that word, as it sounded too much like advertising for someone to break the law.
I've always believed that these terms told you a lot about the speaker, but I was shocked to see such a clear, real-life case.
Heh. I've had a similar problem. I do recruiting for investment banks, and sometimes the job spec says 'developer' but the job description clearly calls for a hacker. Financial HR departments are usually pretty forgiving when they can plausibly deny responsibility, though.
"Hacker" is somewhat special, though. I tend to use "programmer", "developer", and "coder" almost[1] interchangably, and I don't mind using them to describe someone whose only language is COBOL. "Hacker" confers greater respect, and I would only use it to describe a small subset of the people whom I would describe as coders.
[1] They describe the same group of people, but grammatically I use them slightly differently. Programmer is in association with a language, and developer in association with a project. Hence: Joe is a coder; Joe is a C++ programmer; Joe is a KDE developer.
I went to a functional programming group meeting and found that the people there used the term hacker with disdain. From the context it seemed like they used it to refer to programmers who don't have graduate degrees.