¿Cuáles son las diferencias clave entre los ingenieros de software y los programadores? [cerrado]

103

¿Cuáles son las diferencias clave entre los ingenieros de software y los programadores?

grokus
fuente
1
Joel ya ha hecho esta pregunta. Esta no es una pregunta fácil de responder y no estoy seguro de si hay una respuesta clara. Pero sí sé que Joel ya ha planteado esa pregunta.
Denaem

Respuestas:

80

Al contratar, buscamos una distinción entre alguien que pueda ayudarnos a diseñar nuestro sistema, definir procesos, crear especificaciones técnicas, implementar refactorización avanzada, etc. y alguien que nos ayudará a completar tareas de programación de una lista de verificación . Creo que podrías llamar al primero Ingeniero de Software y al segundo un Programador .

Nicole
fuente
10
¿Puede aclarar, contrata a ambos (para diferentes trabajos) o solo a los ingenieros de software?
Jaap
2
Usted podría llamar a la ex ingeniero de software, pero no lo haría. Como Brendan elude, ese es típicamente el trabajo de un arquitecto de software.
JᴀʏMᴇᴇ
131

Realmente depende de la empresa, ya que no creo que haya un marco legal para hacer cumplir una denominación u otra, o al menos no que yo sepa, y esto puede variar de un país a otro (por ejemplo, el uso del término "ingeniero" en realidad está bastante regulado en Francia, pero hay variantes permitidas para los casos "abusivos").

Dicho esto, la tendencia general es la siguiente:

  • Un puesto de programador suele ser el de un profesional contratado para producir el código de un programa de computadora . Implicará que sabe cómo escribir código , puede entender un algoritmo y seguir las especificaciones . Sin embargo, generalmente se detiene allí en términos de responsabilidad.

  • Una posición de desarrollador generalmente se considera un supertipo de la posición del programador . Abarca las mismas responsabilidades, además de la capacidad de diseñar y diseñar un componente de software , y escribir la documentación técnica para ello (incluidas las especificaciones). Puede , al menos técnicamente, liderar a otros (por lo tanto, programadores), pero no necesariamente a un equipo (viene la confusión ...)

  • Un puesto de ingeniero generalmente implicaría que usted es un desarrollador que tiene un tipo específico de grado , algún conocimiento de ingeniería y es capaz de diseñar un sistema (como en: una combinación de componentes / módulos de software que juntos forman una entidad de software completa) . Básicamente, ve una imagen más amplia y es capaz de diseñarla, explicarla y separarla en módulos más pequeños .

Sin embargo, todo esto es discutible y, como dije, no hay ningún requisito legal que conozca en los países de EE. UU. / Reino Unido . Dicho esto, en Francia solo puedes llamarte a ti mismo "ingeniero" si vienes de una escuela de ingeniería (reconocida por la Commission des Titres d'Ingenieurs o algo así). No puede decir que tiene un "Grado de Ingeniero", pero puede decir que tiene un "Grado en Ingeniería" si ha estudiado una disciplina que cae dentro del marco de ingeniería y tecnologías.

Puede ser que algunos países tengan una distinción similar, simplemente no lo sé.

Volviendo al título de ingeniero de software ... Una vez, uno de mis maestros le dijo a nuestra clase, y con razón, que no hay tal cosa, a día de hoy, como la llamada "ingeniería de software" . Porque diseñar algo (ya sea un edificio, un vehículo, una pieza de hardware ...) significa que eres capaz de imaginar su diseño y todas las fases de su producción, y de predecir con precisión los recursos que necesitarás, y por lo tanto Costo de la producción.

Esto es cierto para la mayoría de las disciplinas de ingeniería "verdaderas". Hay fluctuaciones, por supuesto (los precios de los materiales variarán con el tiempo, por ejemplo), pero hay modelos teóricos muy finitos (para diseño y planificación) y modelos empíricos (para mantener a cualquiera de los primeros dentro de limitaciones accesibles) que le permiten predecir la fecha de finalización de un proyecto y su uso de recursos.

El principal problema con el software es que todavía no está allí. Queremos apuntar a la ingeniería de software, pero todavía no estamos allí, de verdad. Debido a que tenemos un entorno muy fluido y dinámico, restricciones muy variables para los proyectos y todavía una falta de madurez en retrospectiva en nuestros procesos. Claro que podríamos decir que mejoramos en eso (aunque discutible con datos duros), pero solo lo hemos hecho desde los años 60 (los proyectos anteriores en realidad estaban más cerca de las computadoras solo de hardware, por lo tanto, más cerca de la ingeniería real, irónicamente ) Mientras que hemos estado construyendo vehículos motorizados durante más de un siglo, vehículos en general durante algunos milenios, y construyendo para aún más milenios (y en realidad hemos sido bastante buenos en eso en alguna parte del mundo, haciéndote sentir que nosotros '

No podemos predecir sistemáticamente los plazos con precisión , no podemos predecir sistemáticamente los costos con precisión , no podemos identificar y mitigar sistemáticamente los riesgos inherentes y externos de manera eficiente y determinista . Lo mejor que podemos lograr es producir estimaciones conjeturas lo suficientemente buenas y acomodar un poco de búfer, mientras hacemos todo lo posible para optimizar los procesos para reducir los ciclos y la sobrecarga.

Pero mira, tal vez eso es lo que es la ingeniería. Y eso es lo que, cuando alguien habla de un "ingeniero de software", debe pensar y apuntar.

Entonces, eso parece difícilmente intercambiable con el simple acto de programar rutinas, o el acto más avanzado de desarrollar aplicaciones.

Aún así, todo es cuestión de tendencias. Últimamente es bastante común tener un equipo de desarrollo horizontal donde todos en el equipo son Desarrolladores de Software Senior (sí, mayúsculas, porque eso nos hace sentir especiales, ¿no?), Sin distinción real de edad (lo suficientemente justo, en mi opinión) y no tanta distinción de habilidades (uh-oh ...) y responsabilidades (ahora eso no puede ser bueno, aparte solo por el zumbido de relaciones públicas).

A veces también es solo una fuerza de hábito y específica de la cultura y la jerga de la industria.. Más puestos para la producción de software integrado utilizan títulos para ingenieros de software. Principalmente porque probablemente implicaría que siempre tendrá que lidiar en cierta medida con el hardware también en este campo, por lo que obviamente se ocupará de otros aspectos de la producción y de todo el "sistema" que produce. No solo los bits que se vuelven locos dentro de él. Por otro lado, no se ve realmente el término ingeniero utilizado en puestos de producción de software financiero. Es porque es una evolución mimética de esta industria de uno de sus predecesores (por ejemplo, la ingeniería integrada encuentra sus raíces en la ingeniería automotriz, por ejemplo), o porque solo quieren dar más o menos crédito / peso a un puesto.

Y para asegurarse de perder a todos en la niebla, encontrará otros títulos que combinan ambos (como "Ingeniero de desarrollo de software" o "Ingeniero de software en prueba"), y luego otros que enfatizan aún más puentes locos con otros dominios ( piense en "Software Architect" y cómo la "arquitectura de software" podría ser un desvergonzado robo de vocabulario). Y que sigan viniendo: Release Engineer, Change Development Manager, Build Engineer (ese también se vuelve ffaaarrrrrr). Y a veces simplemente "ingeniero".

Espero que haya ayudado, aunque en realidad no es una respuesta.

Ah, y eso significa que su nueva compañía está tratando de atraerlo con un nuevo título o que realmente no les importan los títulos, o que realmente va a tener una posición de nivel superior. La única forma de saber es leer las especificaciones de tu trabajo, hablar con ellos y, finalmente, intentarlo y juzgar por ti mismo. Espero que sea la última opción y que estés contento con ella (y potencialmente aproveches más). ;)

haylem
fuente
12
El libro "El programador pragmático" también dice que el software no es como la ingeniería. Si bien puede planificar una casa o un rascacielos, tal como una analogía para la ingeniería de software difícilmente se puede utilizar. Afirman: el software es más como la jardinería. Planifica el jardín, planta las plantas. Luego vea qué está creciendo, elimine las malas hierbas y plante nuevas plantas.
Halcón
66
"Una vez que mi maestro le dijo a nuestra clase que, a día de hoy, no existe tal cosa como la llamada" ingeniería de software ". Porque diseñar algo significa que eres capaz de imaginar su diseño y todas las fases de su producción, y predecir con precisión los recursos que necesitarás ". Eso probablemente no era cierto en el momento en que fue escrito. Al igual que la arquitectura, no podemos predecir los costos sin conocer los requisitos (¿cuánto cuesta un rascacielos? No le diré qué tan alto debe ser antes de comenzar a construir ...). Pero luego podemos predecir los costos, dado un grupo de desarrollo de software maduro.
MSalters
1
@MSalters: Claro, puede cambiar esto: al igual que la arquitectura, no podemos predecir costos sin requisitos. Pero a diferencia de la arquitectura , incluso con requisitos bien definidos (aunque los nuestros suelen ser más fluidos porque son más difíciles de prever o tenemos una tendencia a permitir que cambien), no podemos predecir el costo. Puede hacer esto en ingeniería normal con un nivel de precisión muy preciso, Y actualmente estamos más capacitados para identificar costos por circunstancias extraordinarias que en SE. Solo hacemos estimaciones (bastante aproximadas). Estamos mejorando en hacerlos, pero todavía son más que conjeturas.
haylem
3
@haylem: Esa es la norma en el desarrollo de software. Pero si ha trabajado en una empresa CMM de nivel 4/5, notará que pueden predecir costos y, a menudo, les asignan niveles de confianza del 95%. Entienden su base de software lo suficientemente bien, y tienen requisitos lo suficientemente buenos, que los obstáculos son raros. Y el costo de los obstáculos es menor cuando tienes la experiencia para lidiar con ellos.
MSalters
1
@pcurry: tenga en cuenta que no afirmo que esta sea "mi taxonomía". Los reclutadores y las nóminas corporativas lo consideran así con bastante frecuencia, y también es así como a menudo se lo considera en los cursos de CS ot IT. Tienden a dispararse unos a otros. Así que supongo que enumeré la vista adoptada por los (llamados) ingenieros de software más que por los programadores (autodescritos), obviamente. Realmente no importa cómo te llames, es más lo que la gente te considerará lo que importa. Y solo importa si te importan ese tipo de cosas. Honestamente, personalmente no me importa ser uno u otro, no me cambia.
haylem
81

Los ingenieros de software son personas que trabajan en empresas que llaman a las personas que escriben software para ellos "ingenieros de software".

Los programadores son personas que trabajan en compañías que llaman a las personas que escriben software para ellos "programadores".

También hay desarrolladores o desarrolladores de software . Son personas que trabajan en empresas que llaman a las personas que escriben software para ellos "desarrolladores" o "desarrolladores de software", respectivamente.

Jer
fuente
26
Debo señalar que esta respuesta no fue realmente graciosa.
Jer
15

Así que está el "Ingeniero de software", el "Programador" y también el "Desarrollador", el "Codificador" y nunca se puede olvidar al "experto en SOA"

Todos estos son términos de marketing para personas que no pueden decir algo significativo en su CV, como su papel real (no solo el título del trabajo) en puestos anteriores.

En los anuncios de trabajo, la diferencia se debe a la persona de recursos humanos.

En pocas palabras: cada persona tiene su propia opinión sobre "lo que hace que un buen empleado trabaje con código", y a algunos les gusta asociar tales habilidades con tales títulos.

¿Qué necesitas hacer? Los anuncios de trabajo deben ser descriptivos sobre las habilidades requeridas, y los CV deben explicar los detalles de la experiencia del candidato.

Ken Egozi
fuente
10

No hay diferencias Ellos son la misma cosa. Sin embargo, las compañías pueden tener descripciones formales del trabajo usando los términos, y luego puede haber algún significado específico de la compañía para el término.

Gran maestro B
fuente
8

La programación es sobre el código. La ingeniería de software se trata del producto final.

darreljnz
fuente
3

Eso realmente depende de cómo la empresa defina los puestos. Es posible que, como ingeniero de software, tenga más oportunidades de tomar decisiones de diseño, mientras que como desarrollador le darían diagramas UML y usted escribiría el programa.

Pero, no existe una definición de conjunto real, de modo que, según el título, las personas sepan lo que haces o lo experimentado que eres.

Cuando era arquitecto / desarrollador, mi título era informático, pero solo le decía a la gente que era programador, ya que los dos primeros no se definen fácilmente, pero la mayoría de la gente sabe lo que hace un programador.

Si un título es importante para usted, acepte el nuevo, ya que el ingeniero suena mejor que un desarrollador.

James Black
fuente
3

No creo que haya ninguna "diferencia oficial", para mi experiencia eso podría significar:

  • Algunas compañías utilizan ingenieros de software y desarrolladores de software para referirse a lo mismo. Solo usan su término favorito.
  • Otro usa ambos términos para diferentes posiciones internas, ¡pero los roles varían de una compañía a otra! En algunos podría haber solo una diferencia en la función (un ingeniero suave trabajará en el mantenimiento y la mejora de los sistemas mientras que un desarrollador trabajará en el producto de la compañía), o podría ser jerárquico (el ingeniero está por encima del desarrollador), o incluso ¡El ingeniero realmente depende de las preguntas y respuestas!

Además, también son términos de moda que cambian ... Primero, el término era "programador", luego "ingeniero de software" y ahora parece ser "desarrollador" ...

Es mejor leer la descripción del trabajo o alguien en la compañía específica

Khelben
fuente
3

En algunas jurisdicciones, "Ingeniero" conlleva el requisito de ser un ingeniero profesional, es decir, tener un P. Eng. designación entre las credenciales de uno. Sin embargo, en otras áreas puede que no haya tanta diferencia ya que yo era un "ingeniero de diseño de software" que trabajaba en el estado de Washington hace algunos años.

JB King
fuente
2

Los ingenieros de software tienden a trabajar en sistemas que son muy grandes, lo que lleva muchos años de desarrollo, por ejemplo, de 5 a 16 años. Los programadores tienden a tener este estereotipo de solo codificación y nada más. Pero realmente depende de la organización en la que trabaje y de cómo los RR.HH. estén comercializando el rol como se explicó anteriormente. Son esencialmente lo mismo. Simplemente no te apegues demasiado a un título porque también lo es.


fuente