¿Se puede considerar que la ingeniería de software es ingeniería real? ¿No debería llamarse ‘creación de software’ o algo así?

De acuerdo, ya que está convencido de que los ingenieros mecánicos son “ingenieros” reales, comparemos el ciclo de vida del desarrollo de un producto para un ingeniero mecánico y un ingeniero de software.

Requisitos:
La etapa inicial de un producto. En esta fase, el ingeniero mecánico intentará averiguar cuáles son los requisitos de este producto. ¿Es esto científicamente factible? Intentarán documentar estos requisitos, tal vez hagan algunos cambios aquí y allá para que el producto sea lo más económico posible.
Por otro lado, los ingenieros de software pasan por la misma fase. Intentan reunir tantos requisitos como sea posible. Los documentan y hacen los cambios correspondientes. De hecho, se considera una de las fases más importantes en un ciclo de vida de desarrollo de software.

Diseño y arquitectura:
El ingeniero mecánico luego pasaría a hacer los diseños del producto, en papel, tal vez usando algunas herramientas, como usted lo dijo. Intentarán hacer que este diseño sea lo más eficiente posible teniendo en cuenta la consideración económica. Se decidirán las herramientas que se utilizarán en el desarrollo de este producto. Se definirá el marco temporal, decidieron los equipos de técnicos .
La misma rutina será seguida por un ingeniero de software, usarán las herramientas disponibles para hacer todo tipo de diagramas relacionados con el software para este producto. Intentarán diseñarlo para reducir costos y aumentar la eficiencia. Se decidirán herramientas, en este caso: IDEs, marcos, idiomas. Equipo de técnicos, en este caso: los desarrolladores / codificadores se unirán y también se definirán los plazos.

Desarrollo:
¡Hora de construir el producto! El ingeniero mecánico se asegurará de que todo el desarrollo se realice según lo previsto. Se asegurarán de que todas las partes mecánicas estén en su lugar según el diseño. Es posible que tengan que cambiar el diseño, mover algunos plazos aquí y allá para acomodar cualquier cambio o callejón sin salida que puedan haber encontrado. En resumen, se asegurarán de que el producto se desarrolle lo más cerca posible de lo previsto.
Aquí es donde estás confundido. Los ingenieros de software también se someten a este proceso de construcción del producto. Sus partes mecánicas pueden consistir en bibliotecas, API y clases de código. Pero tienen que asegurarse de que todo esté funcionando a medida que avanza el desarrollo del producto.

Pruebas:
Por supuesto, no se lanza ningún producto antes de probarlo en ningún tipo de ingeniería. Por lo tanto, el producto mecánico se someterá a una fuerte inspección. El ingeniero se asegurará de que cumpla con todos los requisitos que se documentaron inicialmente. Las piezas defectuosas serán descartadas, para ser reemplazadas por otras nuevas y mejores. Y al final, se forma un producto pulido. Lo que puede no ser perfecto, lo que definitivamente no es perfecto. Y es por eso que tenemos versiones de autos fijas, mejoradas y mejoradas cada año.
Lo mismo ocurre con los ingenieros de software, se aseguran de que el software cumpla con las especificaciones y que cumpla con el propósito general. Los errores se corrigen, se descarta el código defectuoso y se escribe uno nuevo en su lugar. Del mismo modo, después de un lanzamiento, el producto se actualiza regularmente con correcciones anteriores y nuevas características.

Para resumir, aquí está la definición de “Ingeniería” de wikipedia:

Ingeniería (del latín ingenium , que significa “ingenio” e ingeniore , que significa “inventar, idear”) es la aplicación de conocimientos científicos, económicos, sociales y prácticos para inventar, diseñar, construir, mantener y mejorar estructuras, máquinas , dispositivos, sistemas, materiales y procesos.

Ahora no entiendo por qué un ingeniero de software (inteligente) no puede aplicar el conocimiento científico, económico, social y práctico para diseñar, desarrollar, mantener y mejorar sistemas, procesos y, en este caso, software. 🙂

No debes confundir a los codificadores con los ingenieros de software. Hay casi tanta diferencia entre los dos como entre los trabajadores viales calificados y los ingenieros civiles, excepto que los dos se usan indistintamente en el entorno no profesional.

Un programador es el tipo que trabaja línea tras línea para mantener los errores fuera del software, establece los niveles de nivelación y ajusta la carretera para que el viaje sea suave y rápido. Un ingeniero de software es el tipo con suficiente experiencia y conocimiento para planificar la construcción de la carretera para que no se desmorone después de cinco años, decir qué segmentos de la carretera deben cerrarse, dónde deben construirse los puentes y cuál es la carga máxima carretera podrá llevar.

Una de las razones por las que los límites entre los dos son tan borrosos ahora es que la ingeniería de software tiene solo 40 años, mientras que la civil tiene unos 400 años de experiencia acumulada en sus bolsillos. Y como en cualquier nueva rama de la ingeniería, los primeros ingenieros son realmente buenos trabajadores que decidieron ir más allá en lugar de personas que siguieron un camino completamente diferente, como es el caso en disciplinas de ingeniería más maduras.

¿Qué definición estás usando para decidir qué es la ingeniería real? ¿Necesita tener certezas matemáticas? Si es así, hay muchos programas que pueden proporcionar eso. ¿Tiene que tener un conjunto de planes? De nuevo, esto se puede proporcionar.

Es importante tener en cuenta que no todo el software necesita ser diseñado. Tampoco todos los proyectos de construcción.

-Editar-

Parece que no entiendes qué es la ingeniería de software. Un programa no es el diseño de ese programa. Hay muchas formas de hacer diseño que no tienen nada que ver con el código real que está escrito. Ni siquiera depende del idioma final en el que se escribirá el producto. Tenga en cuenta mi uso del producto. Si bien no puede tener el programa en sus manos, no puede argumentar sinceramente que el programa no existe o que no hace cosas. Y al final, es cierto que no todos los ingenieros construyen lo que diseñan. Alguien más lo hace. ¿Esto significa que no son ingenieros? O lleva a alguien que vaya directamente a la academia. Posiblemente han diseñado muchas cosas, pero ninguna de ellas fue construida. ¿Esto los hace no un ingeniero?

Tiene razón en que otras especialidades de ingeniería requieren licencia. Creo que Andrei Kucharavy hace un gran trabajo al abordar este punto. Pero agregaré que, como mencioné anteriormente, es posible que alguien obtenga esta licencia sin haber tenido una sola cosa que haya diseñado y construido.

Las licencias y certificaciones son resultados de las fuerzas de la industria. Su existencia dice más sobre las industrias relacionadas que la definición de ingeniería.

A diferencia de las formas de ingeniería de ejemplo, el objeto de la ingeniería de software no es tan definido y continuamente se descubren nuevas aplicaciones. La industria está evolucionando muy rápidamente, como supongo que todas las formas “reales” de ingeniería hicieron en su infancia.

Dale tiempo.