This is my opinion that is basically a compilation of the coworkers I've talked to about the subject.
Depends on the role. Passed senior level most prefer to be called engineers. Those are the people designing the whole system. Software developers are usually more mid level and figure out the specifics of how to design smaller sections of the system. They cut a lot of the detailed tickets and write a lot of infrastructure code.
Programmer is usually the juniors who never design much and just take tickets and turn them into code.
When I say senior, mid level, and junior, I'm referring more to the role that you're fulfilling that day, and not the overall skill level. Engineers will often step in as programmers for more complicated code.
We usually accept any of the terms though because it's very rare for someone to not jump between the various tasks depending on what the active project is. And at some companies they only hire seniors and they perform all roles.
TL;DR: Every software engineer is a developer and programmer, but not every developer is an engineer, and not every programmer is a developer or engineer.