Laissez-moi aborder la dernière question en premier. "Ingénieur logiciel" fait partie d'un ensemble de termes très vagues, comprenant également programmeur, analyste, développeur [de logiciels], et bien d'autres encore. Il n'existe généralement pas de définition précise et rapide. La façon dont je les conçois généralement est la suivante :
- Un "analyste" peut ou non écrire du code du tout, mais il est généralement plus impliqué dans l'analyse du fonctionnement d'un système, qu'il soit déjà automatisé ou un ensemble de procédures effectuées manuellement. S'ils écrivent du code, c'est susceptible d'être des choses assez simples juste pour coller les choses ensemble, ou peut-être un prototype simple ou une démo truquée.
- Un "codeur" écrit juste du code, généralement pour répondre aux spécifications très précises de quelqu'un d'autre'plus ou moins juste traduire.
- Un "programmeur" peut être un cran ou deux au-dessus, avec une plus grande marge de manœuvre pour décider des algorithmes à utiliser.
- Un "développeur" ou "développeur de logiciels" ou "développeur d'une technologie spécifique" (par ex, développeur Java ou développeur Rails) a généralement une liberté assez complète pour décider des algorithmes, de l'organisation, etc. Ils sont souvent soumis à de telles contraintes uniquement par des choses comme les guides de style de l'entreprise, ou les décisions du chef d'équipe ou de l'architecte du projet. (Cependant, un "développeur junior" est souvent plus comme un "codeur" ou un "programmeur" dans cette hiérarchie.)
- Un "ingénieur logiciel" est comme un "développeur" mais avec généralement plus de soin accordé à, et plus de compétences pour, s'assurer que le code est maintenable, correct, robuste, et efficace, et que les différentes pièces vont bien interagir (on commence à entrer dans le turf "architecte" là). Un SE est généralement plus précis dans ses estimations de la durée de mise en œuvre d'une fonctionnalité donnée et des défis probables. Autrement dit, il est beaucoup plus proche d'un "véritable ingénieur" dans le sens, par exemple, de l'ingénierie électrique ou mécanique, par opposition au "codage de cowboy" bâclé qui sévit dans l'industrie du logiciel.
Maintenant, revenons à la première question. Quelles sont les différences entre un développeur d'applications/web/logiciels?
- Un développeur web travaille sur des choses qui sont sur le web. Il peut s'agir de back-end (logique d'entreprise), de front-end (présentation), de full-stack (les deux), ou d'une combinaison pas tout à fait complète, mais il'y a définitivement une utilisation du "web" pour transporter les demandes et les réponses entre les deux. Par exemple, je fais environ 95% de back-end, 5% de front-end.
- Un développeur d'applications est un peu mal nommé IMHO. Cela signifie généralement développeur d'applications mobiles, comme le laissent entendre Ian Atkin et Bastien Koert. Il peut également se référer occasionnellement à celui qui écrit des applications de bureau, en particulier dans le monde Mac maintenant qu'ils ont un App Store de bureau.
- Un développeur de logiciels peut être l'un ou l'autre de ce qui précède ou développer tout autre type de logiciel, y compris l'écriture du système d'exploitation lui-même, des utilitaires, des jeux, des logiciels intégrés tels que ce qui'est déjà sur les puces dans votre téléphone (ou voiture ou télévision), peu importe.
.