Les termes sont différents, et ils font référence à des attentes différentes.
Généralement, "Ingénieur logiciel" est un sur-ensemble de "Programmeur".
La programmation d'ordinateurs fait partie du génie logiciel, mais ce n'est pas tout, loin de là.
Si la programmation exige une connaissance des langages informatiques, des algorithmes et des structures de données, qui sont tous très importants, le génie logiciel implique également une connaissance des projets, des exigences de maintenance, des normes de documentation, de la conception des logiciels, etc. Tout ce qui est nécessaire à la réussite d'un projet logiciel qui n'est PAS de la programmation proprement dite.
Pour moi, une distinction essentielle a toujours été faite avec les modèles logiciels. Je n'ai jamais rencontré quelqu'un qui était "juste" un programmeur qui avait une compréhension de ce qu'ils sont, et pourquoi ils sont bons. Inversement, la plupart (mais pas tous) des ingénieurs logiciels que j'ai connus et respectés avaient une bonne connaissance des modèles logiciels et comprenaient pourquoi ils sont une si bonne idée.
En général, j'ai tendance à penser que les programmeurs programment des solutions. Les ingénieurs logiciels prennent un problème et utilisent (généralement) la programmation pour le résoudre. La différence est qu'une partie au moins de la responsabilité de déterminer ce que sera la solution incombe aux ingénieurs logiciels.