A designer is a programmer that takes into account UserStories, design principles (eg. beauty, OO), and FunctionalRequirements, then reconciles all of them into a design or architecture (a large scale reusable design).
A programmer is a coder that is systematic, using tests, documenting their code and some methodology. If they're good, they'll even be aware of and operate at the state of the art, using TestFirst and ExtremeProgramming.
A coder is anyone who uses a programming language, usually low-level like C++.
A hacker is a technocratic, elitist or obfuscatory coder.
Many different definitions for "hacker", including: 1) A hobby programmer (whether professional or not); 2) a particularly skilled programmer; 3) an undisciplined CowboyCoder who disregards all good SoftwareEngineering practice, etc. You seem to lean to #3. Most folks who call themselves "hackers" usually are 1 or 3. I try to avoid this term because of the many different definitions it has.
I don't conceive of hackers as bad programmers, rather as an attitude of unmitigated arrogance and contempt for others. Basically, hackers hate users and fellow coders. Programmers tolerate users and respect fellow coders. And designers respect users. At its most benign, the hacker attitude is one of total and complete unconcern with anyone else. Why does a "hobby programmer" program? For no reason, to no purpose, for no person except himself. As soon as you start programming for a reason, towards a goal then the activity ceases to be fun. I think that is what unifies the benign and malign meanings of hacker.
There are many, who call themselves "hackers", who program for a greater cause (greater than pure enjoyment, self-aggrandizement, or resume-padding). And there are many who eschew the term "hacker" who write code for no other reason than it pays the bills--MoneyOrientedProgramming it's called.
And contempt for users is certainly not a trait limited to hackers/coders--see the AntiPattern TheCustomersAreIdiots (and related stuff) for more info on that.
True. But I didn't make myself clear regarding 'goals'. I did not mean 'cause' since someone who programs because it's their job to do so is working towards a goal ... unless they genuinely don't care about doing a tolerable job.
Calling yourself hacker doesn't make you a hacker. To become hacker well established member of hacker community must call you a hacker (http://www.catb.org/~esr/faqs/hacker-howto.html#hacker_already) and of course you have to display extreme expertise at the things you are doing. Hackers also shouldn't generally hate anybody unless this particular person restricts access, is authoritarian, forces hacker into drudgery or wastes his time. Probably you just met posers.
Personally, I don't see any difference between "programmer" and "coder"; the two words are synonyms to me. I do see a distinction between these and "designer" or "engineer"--you can have programmers who only implement the designs of others; and you can have designers that never implement. The latter is widely considered an AntiPattern
And what of: Engineer? Analyst? Architect?
Like you said, AntiPatterns. An architect must be all things, even a musician so he can know the tension of catapult skeins by their vibrations alone.
But not a SoftwareArchitect...
Keep in mind that where no distinction exists, people will create one. Mutton means 'cooked sheep' and is the anglicization of the french mouton which just means 'sheep'.
Likewise with cow/beef, swine/pork, and deer/venison. The name for the food in English comes from French/Latin; the name for the living animal comes from German
No, not from German.
Swine certainly seems to come from german.
"Cow", "swine", "sheep", etc., are OldEnglish?/AngloSaxon? words. Seeing as the Saxons originally came from northern Europe (i.e, the area around the Netherlands and Germany), it's no surprise that these words are so similar in Dutch, English and German - these languages all came from the root Saxon language. (Caveat reader: I am not a linguist.) I've read elsewhere that the sheep/mutton, cow/beef English/French thing came from the time after the Norman invasion - the aristocratic Normans ate a meat-heavy diet while the Saxons made do with a cereal-heavy diet. Hence, the Normans would refer to the cooked meat one way while the Saxons referred to the animals another. -- FrankShearar