Para no quedar empantanado en los aspectos técnicos de la industria del software, usaré una analogía: para simplificarlo, comparemos el proceso de creación de software con el de crear una mesa de comedor y las personas necesarias para diseñarlo y construirlo:
Programador : este es básicamente el aprendiz en muchos sentidos, la persona que sabe barnizar madera, taladrar agujeros, usar una cinta métrica e incluso un calibrador Vernier. Sin embargo, alguien debe proporcionarle orientación sobre cómo construir una tabla. Un supervisor necesita decirle la longitud de la madera para cortar, qué tornillos usar y dónde perforar la madera. Al final del día, habrá podido crear una mesa con sus dos manos, pero no puede hacerlo sin orientación y supervisión. En el mundo del software, este es el tipo que conoce uno o más lenguajes de programación y puede aplicarlos para escribir una función o una clase, pero no puede imaginar y crear una aplicación completa de principio a fin sin supervisión. Con suficiente tiempo y trabajo duro, progresará para convertirse en un desarrollador / ingeniero / arquitecto de software.
Desarrollador de software : suponga que desea tener una mesa de comedor personalizada construida para su hogar. Como persona no técnica, tiene una idea de cómo le gustaría que se viera la tabla terminada, pero no sabe cómo construirla usted mismo. Entonces, sale y encuentra a alguien que puede construir una mesa personalizada desde cero de acuerdo con sus requisitos específicos, es decir, le dice al tipo más o menos qué tan grande es su habitación y la longitud de la mesa, la cantidad de sillas que desea hacer espacio para etc. El desarrollador de software es la persona que puede crear una aplicación personalizada de acuerdo con los requisitos del cliente. Debido a que él está a cargo del desarrollo del software, tiene cierta libertad creativa, pero en última instancia necesita hacer que el cliente feliz siguiendo los requisitos de un cliente específico.
Ingeniero de software : ahora suponga que usted es el dueño de una empresa que diseña y fabrica muebles. Este es un juego de pelota completamente diferente ahora porque ya no estás tratando de satisfacer las necesidades de un solo cliente, sino más bien un mercado completo en todo tu país. Entonces, en lugar de obtener una sola mesa diseñada y construida, está buscando obtener miles de mesas construidas. Para realizar el trabajo, necesitará una persona con un conjunto de habilidades completamente nuevo que vaya más allá de las habilidades del desarrollador de software. Los principios de ingeniería de software deben aplicarse al problema. Estos incluyen patrones y principios de diseño. El ingeniero de software tiene una visión más amplia pensando más adelante haciendo preguntas sobre el escalado y la reutilización. Al crear miles de mesas, uno debe pensar en crear un producto atractivo que no solo complazca a un cliente, sino que a muchos les encantará. Esta persona también piensa qué materiales son rentables y la durabilidad. Está bien y bien crear una tabla, pero esta persona también piensa en cómo duplicar el diseño una y otra vez para que cada copia se vea exactamente igual a la siguiente y tenga la misma calidad. El ingeniero de software es la persona que diseña y desarrolla software que se venderá no solo a una persona sino a muchas.
En la superficie, el desarrollador de software puede parecer muy similar a un ingeniero de software, pero en mi opinión, las principales diferencias entre los dos son sus personalidades o las circunstancias que se les imponen, es decir, no se trata tanto de habilidades técnicas. El desarrollador de software suele ser un tipo de acceso directo o una persona que busca soluciones rápidas y acumula muchos departamentos técnicos. Esto se debe en parte a las rígidas limitaciones de tiempo y presupuesto con las que trabajan los desarrolladores de software porque facturan por hora. Además, cuando está desarrollando un producto y facturando por hora, ese producto solo será tan bueno como debe ser, es decir, “¿realmente necesitamos esta función, cuánto va a costar? ¿Podemos encontrar una solución rápida? para ese problema al no gastar más tiempo y dinero, etc. “.
Por último, un desarrollador de software generalmente trabaja en varios proyectos al mismo tiempo, lo que significa que su enfoque está disperso y sus prioridades cambian día a día. La falta de enfoque y priorización da como resultado el desarrollo de productos de menor calidad. Por otro lado, un ingeniero de software generalmente trabaja en un solo proyecto a la vez y se le asigna un presupuesto mayor sin tener que cronometrar horas. Un presupuesto mayor también permite más tiempo para concentrarse en la estrategia y el diseño del producto en lugar de simplemente trabajar sin pensar, es decir, correr como pollos sin cabeza.
Arquitecto de software: continuando con nuestra analogía, la empresa de muebles no solo tendrá un solo comedor como producto, sino muchos tipos diferentes de productos. Esto requiere que una persona técnica supervise el diseño y la creación de cada producto, lo que conlleva una serie de desafíos adicionales. Esta persona necesita pensar en la reutilización, por ejemplo, ¿podemos usar el diseño de la tabla A cuando estamos trabajando en la tabla B tal vez modificándola un poco? Esta persona también puede ser responsable de pensar en los costos generales, por ejemplo, o qué proveedores de madera deberíamos usar para crear los mejores / más baratos productos, etc. El Arquitecto de software es la persona que piensa en todos los productos que se están diseñando y se pregunta cómo estos productos encajar en el panorama general de la empresa. En empresas muy grandes que tienen productos muy grandes, se puede asignar un Arquitecto de Software para supervisar solo un producto y se pueden asignar ingenieros a los componentes de los productos grandes.
Para resumir; La diferencia entre todas estas personas es el alcance de su visión y responsabilidades en el proceso de diseño y desarrollo de software. Por supuesto, hay muchos otros títulos (especialmente los de gestión) en esta industria, pero elegí centrarme solo en los muy técnicos.