La ingeniería de software es demasiado joven y, por lo tanto, está menos evolucionada que otras ramas de la ingeniería.
La ingeniería básicamente está tomando la ciencia y creando aplicaciones prácticas de esa ciencia. Hay varias ramas de la ingeniería que han evolucionado de forma independiente. Casi todas las ramas de la ingeniería comenzaron con un grupo de personas que estudiaban ciencias y descubrían cómo resolver un problema. Cuando comienza una nueva rama de la ingeniería, casi nadie sabe si lo que están haciendo es correcto. Solo después de hacer algunas cosas, puede comenzar a descubrir la metodología, también conocida como la mejor manera de hacer ingeniería. Una vez que comience a construir la metodología, puede comenzar a estandarizar las herramientas. Después de estandarizar las herramientas y las metodologías, puede comenzar a capacitar a ingenieros en los conjuntos de herramientas estándar y luego encontrar formas de mejorar el conjunto de herramientas. La ingeniería civil ha llegado a este punto porque la gente ha estado haciendo ingeniería civil durante, no sé, al menos 3000 años. La ingeniería mecánica surgió de la necesidad de construir fábricas, y realmente comenzó con la llegada de la máquina de vapor en el siglo XVIII. Entonces, tiene un poco menos de 300 años. La ingeniería química y eléctrica surgió de la ingeniería mecánica y adoptó muchos principios que se desarrollaron como parte de la ingeniería mecánica.
El desarrollo de software, OTH, ni siquiera era una profesión hace 50 años. Sí, las personas desarrollaron software, pero en los primeros días, las personas que desarrollaron software realmente tenían otro día de trabajo. Crearon software para hacer que la computadora haga algunas de sus tareas por ellos. El desarrollo de software es lo que hicieron los ingenieros y científicos para facilitar su trabajo real. La idea de que una persona pueda ganarse la vida simplemente sabiendo cómo programar la computadora es bastante nueva. La idea de que una persona pase por la universidad aprendiendo a programar una computadora (y poco más que cualquier otra cosa) y luego salga a hacer algo útil también es bastante nueva. Las universidades no tenían la ingeniería de software como disciplina hasta hace muy poco.
Entonces, hay 2 preguntas
a) ¿Por qué tratar el desarrollo de software como una profesión? ¿Por qué no solo enseñar a cada ingeniero y científico cómo desarrollar programas? ¿No es realmente el software una herramienta que te ayuda a hacer cosas como el cálculo? Enseñamos cálculo a todos los ingenieros / científicos. ¿Por qué no enseñamos programación a todos los que la necesitan?
b) ¿Por qué tratar el desarrollo de software como una rama separada de la ingeniería? ¿Por qué no se considera un trabajo especializado como soldar o coser? ¡¿Derecho?! ¿Qué es la ingeniería al respecto?
La respuesta a estas 2 preguntas se deriva de las cosas que hemos aprendido como científicos e ingenieros a lo largo de los años.
a) No todos los científicos / ingenieros son buenos desarrolladores de software. Debes aprender muchas cosas antes de convertirte en un buen desarrollador. Escribir código es fácil. Escribir código que sea mantenible, flexible y funcione bien es difícil. Necesitas entender muchos principios. Enseñar a cada científico / ingeniero esos principios los quita de su trabajo diario
b) Hay muchas aplicaciones comerciales de software que no requieren conocimientos de ciencia / ingeniería. O en otras palabras, no tienes que ser un científico espacial para hacer Twitter. Tener solo científicos / ingenieros sabe cómo hacer que el software sea excesivo
c) El desarrollo de software se beneficia de la “mentalidad de ingeniería”. Por lo tanto, es beneficioso capacitar a los desarrolladores de software con el mismo rigor que capacitamos a otros ingenieros.
Déjame calificar el último punto porque es el más importante. La forma en que la mayoría de las ramas establecidas del trabajo de ingeniería es que el ingeniero está capacitado en un conjunto de herramientas y metodologías que pueden resolver una clase particular de problemas. Cuando surge un problema en esa clase de problemas, obtienes al ingeniero, y él / ella básicamente mira el problema, selecciona la herramienta / metodología correcta y luego diseña la solución usando la herramienta / metodología. Esto es lo que yo llamo una “mentalidad de ingeniería”: encuentre la mejor herramienta para el trabajo y aplíquela
Bueno, resulta que esto es exactamente lo que queremos que hagan los desarrolladores de software. Sin embargo, el problema es que aún no hemos inventado todas las herramientas. Los desarrolladores de software son ingenieros con la mitad de un conjunto de herramientas. Entonces, lo que sucede es que con nuevos problemas, inventamos nuevas herramientas. El problema de almacenar datos de manera confiable es lo que condujo a la invención de RDBMS. Sin embargo, los desarrolladores que estaban creando aplicaciones antes de que se construyera RDBMS no tenían RDBMS en su conjunto de herramientas. Entonces, se les ocurrieron implementaciones de almacenamiento de datos a medias. Durante este proceso de evaluar a medias nuestras bases de datos, descubrimos lo que queríamos de nuestro RDBMS, y luego creamos RDBMS. Finalmente, RDBMS se convirtió en una parte estándar del conjunto de herramientas de cada ingeniero de software
Esto es lo que hace que el desarrollo de software sea “ingeniería”. Aún no está allí. Pero, el impulso es encontrar herramientas y metodologías estándar. Seguimos probando cosas nuevas y nuevas metodologías, y nuestro conjunto de herramientas estará completo. En mi opinión, tenemos al menos media década más por delante. En última instancia, queremos llegar a un punto en el que la mentalidad de “no hecho aquí” desaparezca. Tienes un problema, llamas a un ingeniero de software. El ingeniero de software dice: – Coloque esta base de datos de este tamaño allí, coloque un servidor de aplicaciones de ese tamaño allí, coloque este tipo de motor de análisis para generar sus informes. Esto es lo que debe hacer para proteger su aplicación. Así es como se planifica el crecimiento “¡Boom! ¡Vamos! Obtienes un grupo de técnicos que ponen todo junto.
Técnicamente, ya estamos tan cerca de esto. Para la mayoría de las aplicaciones web, no es necesario reinventar la rueda. Existen muchas herramientas que se pueden combinar para crear la mayoría de las aplicaciones web. El problema es que esperamos que los “ingenieros” realmente construyan la cosa. Esto significa que necesitamos un ejército de ingenieros … y los ingenieros son costosos.
Lo que tenemos que hacer es encontrar una forma de capacitar a técnicos de software más baratos sin hacerlos pasar por 6 años de escuela de ingeniería, y capacitar a las personas que sí pasan por 6 años de escuela de ingeniería en mejores ingenieros. Los ingenieros deben ser planificadores, no hacedores. El problema en la ingeniería de software es que estamos entrenando a muchos hacedores, y no a muchos planificadores.