I recently had a discussion with a person who presumed that since I knew how to write code for computers, that I was a programmer. I guess this is true at a very high level, but I prefer the term hacker for what I do. So what's the difference?
Programmers will use a $50 brand name crowbar and will postpone a job if they don't have the right one. Hackers will use a left over piece of re-bar from the garage. A programmer speaks one or two languages fluently, while a hacker knows 10 or 20 languages at a functional level.
A programmer will write an elegant piece of code that is fully documented and takes most variations into consideration with error handling and pretty error messages. The code will be written to industry standards with strict variable scopes and attention to validation on inputs. There will be copious commenting as well as a fully documented usage guide. It will take two months to release a final version and even then, it will be called "beta" until several users have tried it without any problems. There will typically be an upgrade path that is well thought out in advance and patches will will be built for all possible operating systems.
A hacker will give you the same piece of code in three days and it will work exactly as you requested for the environment you want it to work in. It is unlikely to run without modification on any other operating system and all new versions will have to be hand coded. The comments will all be in-line with the code because only other hackers would want to look at it right? It is unlikely that you will see a manual or user guide, but you might get a one page README file explaining basic usage. You will most likely be handed version 0.01a and the concept of "beta" if foreign to hackers.
Programmers will introduce themselves as a "C programmer with a degree from Stanford" or a ".NET Programmer with a degree from UBC" and they will have experience with methodologies like "Agile", "Scrum" and "Rational". A hacker is unlikely to identify themselves at all and never had the time to bother with finishing a degree. You often have to "know someone who knows someone" in order to find a hacker, while programmers typically carry business cards touting their credentials. Programmers have rules and ethics and follow protocol. Hackers don't think too much of rules, have flexible ethics and only follow protocol when they need to.
Crackers are hackers gone bad. These are the people who spend thier time writing mail worms and viral files and password decryptors. They often are brilliant one-time hackers who crossed over to the dark side and the allure of the pirate world. They get high on the thrill of seeing one of their code creations seep into millions of computers undetected. They sometimes are recruited by corporations for digital espionage or by organized crime for a multitude of nefarious reasons.
Hackers don't like Crackers.
I definitely fall into the "hacker" category in everything I do. Whether it is software, hardware, robotics, AI, writing, or building a deck on the back of the house - I'll always take the hacker approach. I have a number of friends who are professional programmers and I have immense respect for what they do. If I want a polished market ready application built, I would definitely have a programmer build it, but you can guarantee the first version would have been hacked into place.