Déjame abordar la última pregunta primero. "Ingeniero de software" es uno de un conjunto de términos muy vagos, incluyendo también programador, analista, desarrollador [de software], y muchos más. Por lo general, no hay definiciones estrictas ni rápidas. La forma en la que yo pienso generalmente es:
- Un "analista" puede o no escribir código en absoluto, pero suele estar más involucrado en el análisis de cómo funciona un sistema, ya sea automatizado o un conjunto de procedimientos llevados a cabo manualmente. Si escriben código, lo más probable es que sea algo bastante sencillo para unir las cosas, o quizás un simple prototipo o una demostración amañada.
- Un "codificador" sólo escribe código, normalmente para ajustarse a las especificaciones muy precisas de otra persona, más o menos sólo traduciendo.
- Un "programador" puede estar un escalón o dos por encima de eso, con más libertad para decidir qué algoritmos utilizar.
- Un "desarrollador" o "desarrollador de software" o "desarrollador de alguna tecnología específica" (por ejemplo, desarrollador de Java o desarrollador de Rails) suele tener bastante libertad para decidir sobre los algoritmos, la organización, etc. A menudo sólo están sujetos a estas restricciones por cosas como las guías de estilo de la empresa, o las decisiones del jefe de equipo o del arquitecto del proyecto. (Sin embargo, un "desarrollador junior" es a menudo más como un "codificador" o "programador" en esta jerarquía.)
- Un "ingeniero de software" es como un "desarrollador", pero con generalmente más cuidado dado a, y más habilidad en, asegurándose de que el código es mantenible, correcto, robusto y eficiente, y que las diferentes piezas se interoperan bien (empezando a entrar en el terreno de "arquitecto" allí). Un SE suele acertar más en las estimaciones sobre el tiempo que llevará implementar una determinada funcionalidad y los probables desafíos. Es decir, mucho más cerca de un "verdadero ingeniero" en el sentido de, por ejemplo, la ingeniería eléctrica o mecánica, frente a la "codificación de vaquero" descuidada que plaga la industria del software.
Ahora, volviendo a la primera pregunta. ¿Cuáles son las diferencias entre un desarrollador de aplicaciones/web/software?
- Un desarrollador web trabaja en cosas que están en la web. Puede ser back-end (lógica de negocio), front-end (presentación), full-stack (ambos), o alguna combinación no muy completa, pero definitivamente hay un uso de "la web" para transportar las solicitudes y respuestas entre los dos. Por ejemplo, yo hago alrededor de 95% back-end, 5% front-end.
- Un desarrollador de aplicaciones es un poco mal llamado IMHO. Por lo general, significa desarrollador de aplicaciones móviles, como Ian Atkin y Bastien Koert implican. También puede referirse ocasionalmente a alguien que escribe aplicaciones de escritorio, especialmente en el mundo Mac ahora que tienen una App Store de escritorio.
- Un desarrollador de software puede ser cualquiera de los anteriores o desarrollar cualquier otro tipo de software, incluyendo la escritura del propio sistema operativo, utilidades, juegos, software integrado como lo que ya está en los chips de su teléfono (o coche o TV), lo que sea.
.