A hacker is one who creates programs, has a proficient knowledge of how programs work, knows how to read a computer language code, one who is good at creating programs, debugging, or fixing glitches in programs.
A cracker is someone who, using programs, attempt to breach software made by hackers.
A simple way to remember is that hackers build programs, and crackers try to break them.
The media started to improperly use the word hacker to describe someone who cracks.