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.
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.
[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.