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.
.