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.