In my opinion they are two words for the same thing: Someone who builds software.
The word programmer refers to the literal act of writing the code, while to me the word developer implies writing the code, but also all the other "software engineering" aspects of developing software. If you wanted to be technical, you could say a programmer just codes, while a developer codes but also determines requirements, develops a specification/scope, etc.
I refer to myself with both interchangeably, and I assume most others do as well. I really don't consider them to be different in any meaningful way.
I (and many I know) tend to think of programmers (or coders) as those the concentrate on specific tasks, such as programming a specific type of hardware, phone system, manufacturing machine, or those that write code as a part of a larger project but typically work only on small pieces of the larger whole, with tight guidelines.
Developers are those that work at the next level. They have their fingers in the project as a whole, or at least in multiple modules. These people are are typically the leads, or senior people in the group.
For the engineer comparison... I would compare them to software architects. They probably aren't writing much code, but they are building out specs and test cases.
Where the engineer designs the bridge, the contractor handles sub projects, and the worker welds the beams... the architect designs the software, the developer manages interfaces and algorithms, and the programmer pounds out lines of code.
So for me.. "Engineer" is actually different. Honestly I think they are all different however I'm especially fond of engineer and care to differentiate it.
In my opinion an Engineer is a problem solver, at scale. Similar to a Contractor vs Civil Engineer. Sure a contractor can build you a good bridge for your backyard but you don't get them to design you the Golden Gate.
Similarly you don't build DynamoDB or BigTable with programmers, in my opinion you need Engineers.
Outside of analogy, the biggest difference I can think of is probably the ease at which youre able to be taught new things and the breath of knowledge that they already have. An engineer, at least in my experience/opinion has more breath of knowledge and a far easier time teaching themselves new things than a programmer. However, some programmers actually have more knowledge about a specific topic. For example I couldn't currently profile a running JVM (I'm sure I could learn) but to someone taught to program in Java and specifically took classes on Java, it is second nature. Again similar to how a civil engineer couldn't build you a closet. Or mechanical engineer couldn't fix your Honda Civic.
Anyways, I'm just being a bit defensive since I had to go through 1 year of general engineering (physics/chemistry/project management) 1 year of electrical engineering and 2 years of computer engineering.
For the record, I don't think you need to have gone to university to be an engineer. That was just my motivation for segregating its definition as much as I could.
I work in the tech industry. In the tech industry, titles are absolutely bullshit. We have varying descriptions from developer all the way up to rock star ninja wizard to describe the exact same thing, someone who gets shit done. At large tech companies titles are fixed based on level, they are fairly simple and generic, it's a good thing. {Junior, Senior, Staff} Software Engineer. At startups it's a free-for-all. Full stack, architect, VP of something something, global head of... Titles have truly become meaningless. In reality in a startup, developer, programmer and engineer all mean exactly the same thing. Someone who writes code, who thinks about constructing a solution to a problem which may be on an infrastructure, a software, or a business level, or heck probably all three.
> For the record, I don't think you need to have gone to university to be an engineer.
Actually I beg to differ on this. Engineers are supposed to understand both theory and practice. Your engineering course at university teaches you how to think and not just how to complete a task. Being able to think about a problem and solve it using experience and scientific knowledge is what differentiates a construction site foreman from an engineer with equal years of experience.
The word programmer refers to the literal act of writing the code, while to me the word developer implies writing the code, but also all the other "software engineering" aspects of developing software. If you wanted to be technical, you could say a programmer just codes, while a developer codes but also determines requirements, develops a specification/scope, etc.
I refer to myself with both interchangeably, and I assume most others do as well. I really don't consider them to be different in any meaningful way.