¿Cuál es la diferencia entre desarrollador de aplicaciones, desarrollador web y desarrollador de software? ¿Cuál es la definición de ingeniero de software?

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.

.