"Developer", "Software Engineer", "I run a software company", etc. will often get you a blank stare when you quote it to regular people in answer to "what do you do for a living?". You'll have to follow up with "I program computers" anyway, so you might as well just start with that when meeting people at a party.
The only reason you'd ever need to pull out the actual official description of what you do is if you were interviewing for a job (or consulting gig) with an organization that took such things seriously. For that case, fall back on the reasoning outlined in the excellent article "Don't call yourself a programmer".
For the more common case where you're not trying to impress anybody (or explicitly trying not to sound impressive), and just trying to hold a conversation with people you're probably never going to turn into clients, it's best to simply use the quickest term they'll understand so that you can move on to more important things.
A a person is a programmer to the extent they are competent at coding software to given requirements.
A person is a software developer to the extent that they are competent developing software to support an (initially, less-well-specified) business need, programming is part of that, but so is designing architecture for systems of separately coded, interacting components, doing the research and customer interaction to get to business and technical requirements, testing (not just unit testing), etc.
In practice, though, the terms (as well as "software engineer") are often used interchangeably with different places using different terms for the same role (which may either fit the "developer" or "programmer" description above.) Some places do make the distinction, though not always with the exact terminology (for instance, in California State civil service, there is a rough correlation between "programmer" role described above and the "Programmer" series of classes and between "software developer" role and the "Programmer/Analyst" and "System Software Specialist" series of classifications.)
Developer: term used by software people. The kind of persons that are plugged into the tech and IT world one way or another. They usually understand how a product is built and the efforts involved. Because of this, they are often prepared to pay for your work and invest in your skills. The hiring process usually involves higher level concepts and is done in a more sociable manner. The work environment is mostly good, but overworking, missed deadline anxiety and crisis management are often encountered. Sociable coworkers can also increase anxiety if you're an introvert.
Engineer: proud term used by pretentious people. You will often encounter it in companies entrenched in a specific niche. The lack of competition usually leads to strange work ideals and preconceptions. The environment is usually filled with politics and managerial incompetence. And although most coworkers are introverts, everybody thinks very highly of themselves. So clashes are common, even for minor things. The pay is average. While the environment is great for learning and getting started, experienced people usually leave for greener and calmer pastures.
Of course, there are exceptions. But this is what I noticed so far based on jobs, interviews and people. Each of these titles has advantages and disadvantages. So I don't think one is better than the other. Picking one is a just a matter of what you currently want from your job.