There is no Standardized Difference between Software Programmer, Engineer and Developer
There is no standardized difference between the meaning of the terms “Software Programmer,” “Software Engineer,” and “Software Developer”. In many conversational situations, you can use the terms interchangeably. In situations where “the difference matters”, you would need to know what differences your audience has in mind between the terms to know the correct term to use because different audiences will have different differences in mind.
How do we determine what a word means? There are two general methods, depending on whether we’re in a casual or technical context.
In casual contexts, we learn the meaning of a word by observing what people around us use that word to mean. For example, we learn that the word “apple” is a noun that refers to a particular kind of fruit (e.g., “this is a delicious red apple”) because we notice that when people say that word, they seem to be referring to that kind of fruit. If, over time, people change the way they use a word, then the meaning of the word also changes over time. For example, if people started using the word “apple” to mean a product made by a specific software company (e.g., “I lost my apple phone”), then the word would gain that new meaning. This approach is called linguistic descriptivism.
The meaning of a word can vary by region and social circle. For example, for Americans, the word “chip” refers to one type of food, whereas for British people, the word refers to a different type of food.
In more technical contexts, there is usually a governing organization that dictates the meaning of words. In this paradigm, it doesn’t matter what “most people” think a word means; what matters is what the official specification says the word means. If the people and the specification disagree, the people are wrong, and the specification is correct. This approach is called linguistic prescriptivism.
Sometimes there is more than one governing organization that provides a definition for a given word, in which case what a word means would vary depending on the organization you’re dealing with. For example, different countries might give different definitions of what a “sport” is for the purpose of providing visas to athletes (are e-sports sports? Is chess a sport?).
The same word can be used in a casual and technical context. For example, the term “murder” has a meaning in a casual context (anytime someone kills someone else) and a different meaning in a technical legal context (there must be “malice aforethought”). So if you’re a lawyer and you’re having a conversation with a non-lawyer, and they use the term “murder”, you have to use your judgment based on the context as to whether they are using the word in the casual or the technical sense. Or, if you are unsure, you would ask them to clarify what they mean.
All that to say that when people argue that there’s a difference between “software programmer” and “software engineer” and that one of them means such-and-such and the other means this-other-thing, well... that’s just like your opinion, man.
That could be what it means in the social circle you hang out in, but it’s easy to observe all sorts of different usages by other people, so from a descriptivist perspective, there’s no agreed-upon meaning for the terms.
From a prescriptivist perspective, it depends on which governing organization you’re dealing with. For example, I qualify as a software engineer from the American legal system perspective (as proven by the fact that I qualified for a work visa under that job class). However, I do not qualify as a software engineer from the Canadian legal system perspective (because my degree was in “Computer Science” rather than “Computer Engineering”).