Programmers are classically engineers — “One who contrives, designs, or invents” in the primary sense in the OED. Some are also Engineers™, while others object to the intrusion of the Engineering™ cartel into their field. I've never noticed among my colleagues any particular difference between those who are Software Engineers™ and those who are not, and have come to like the term ‘technologist’ to avoid the issue.