La historia de la Ingeniería del Software

Fernando Rojas
7 min readOct 9, 2022

--

Basado en la perspectiva de Grady Booch en su artículo The History of Software Engineering (https://ieeecs-media.computer.org/media/marketing/cedge_newsletter/ce9boo.pdf)

Grady Booch

Las primeras computadoras eran humanos (y en su mayoría, mujeres). El término “digital” no entró en circulación hasta alrededor de 1942, cuando George Stibitz tomó las ideas de otro George (Boole) y las aplicó a dispositivos electromecánicos. John Tukey tardó otra década en popularizar el término “software”. ¿Qué pasa entonces con el término “ingeniería de software”?

Las primeras computadoras

Los orígenes del término

Muchos sugieren que el término “ingeniería de software” proviene de la Conferencia de la OTAN sobre Ingeniería de Software de 1968, acuñada por Friedrich Bauer, o incluso antes, en 1965.

Margaret Hamilton, que trabajó en el programa SAGE y más tarde en Skylab y Apollo, acuñó el término “ingeniería de software” en 1963 o 1964.

Ingeniería de Software versus Ciencias de la Computación

La ingeniería de software es un arte y una ciencia, porque implica equilibrar muchas fuerzas, incluidas las físicas, humanas y legales. Los fundamentos de la ingeniería son ciertos, aunque cada época descubre alguna nueva verdad sobre el software de ingeniería.

Del Siglo 19º al 20º : Ordenadores humanos

Ada Lovelace y George Boole entendieron que la programación era una cosa en sí misma, y Annie Cannon, Henrietta Leavitt y otras mujeres fueron las primeras computadoras humanas.

A medida que los problemas computacionales se ampliaron, las salas de computadoras se volvieron más rediseñadas, con filas de computadoras que realizaban una operación y pasaban el resultado a la siguiente computadora.

De la Gran Depresión a la Segunda Guerra Mundial: Nacimiento de la computadora electrónica

La eficiencia y la reducción de costos fueron importantes en la fabricación, por lo que las personas introdujeron estudios de tiempo y movimiento y gráficos de procesos. Estas ideas saltaron rápidamente a la informática.

La Administración del Progreso de las Obras, lanzada como parte del New Deal del presidente Roosevelt, empleó a cientos de matemáticos y competidores sin trabajo, en su mayoría mujeres. Su trabajo desarrolló la primera metodología de computación o lenguaje de patrones.

George Stibitz construyó el primer sumador digital hecho de rieles electromecánicos, y esto llevó a la creación del ENIAC y el EDVAC. Esto llevó a la creación de una nueva forma de pensar: el concepto de una computadora electrónica programable con sus instrucciones almacenadas en la memoria.

Grace Hopper redescubrió la idea de que el software era una cosa en sí misma, e ideó un lenguaje de programación que podría traducirse al lenguaje de máquina utilizando la propia computadora.

La Segunda Guerra Mundial dividió el mundo de la computación en tres partes, con Konrad Zuse en Alemania y Alan Turing en Inglaterra. Tommy Flowers convirtió las teorías de Turing en soluciones pragmáticas, y Dorothy Du Boisson sirvió como la operadora principal de Colossus.

En los Estados Unidos, ENIAC y EDVAC dominaron la escena, con computadoras humanas cableando enchufes. Estas computadoras se organizaron en pequeños equipos de desarrollo centrados en la integración continua.

Después de la Segunda Guerra Mundial: Auge y nacimiento de la ingeniería de software

Las fuerzas técnicas y económicas que darían forma a la ingeniería de software moderna se unieron aún más al final de la Segunda Guerra Mundial, con la invención de diagramas de flujo, subrutinas y el lenguaje imperativo de alto nivel Fortran.

El mundo comercial recurrió a las ayudas automáticas a la informática después del final del conflicto global. John Pinkerton se dio cuenta de que el software podía ser tratado como un componente en sí mismo, y creó el primer sistema operativo.

Grace Hopper, Robert Bemer, Jean Sammet y otros crearon Cobol, un lenguaje imperativo centrado en las necesidades de las empresas. System/360 de IBM hizo posible escribir software para más de una máquina específica, y surgieron organizaciones como SHARE.

Auge de la Guerra Fría

La Guerra Fría entre los Estados Unidos y la Unión Soviética generó una serie de fuerzas importantes que empujaron a la ingeniería de software a alcanzar la mayoría de edad, incluido el aumento del software comercial como un producto en sí mismo, y el aumento del software críticopara los humanos según lo exigido por el programa espacial de los Estados Unidos.

En la era de las computadoras con tarjetas perforadas, los programadores ideaban algoritmos y pasaban sus programas a los keypunch-ers, que luego perforaban las tarjetas.

La economía de las computadoras cambió con el auge de las minicomputadoras y microcomputadoras, y la realización de la idea de Christopher Strachey de compartir el tiempo. Esto llevó a un cambio en la contracultura, y la introducción de la computación personal cambió la naturaleza de la ingeniería de software.

De los años sesenta a los ochenta: maduración

Larry Constantine introdujo el concepto de programación modular, Edsger Dijkstra nos dio la idea de la programación estructurada, y Robert Floyd y Tony Hoare idearon formas formales de expresar y razonar sobre los programas.

La introducción de la informática personal cambió la ingeniería de software.

Winston Royce introdujo la idea de un proceso formal de desarrollo de software. Esto fue seguido por David Parnas, Barbara Liskov, Peter Chen, Doug Ross, Larry Constantine, Ed Yourdon, Tom DeMarco, Chris Gane, Trish Sarson y Michael Jackson, quienes desarrollaronla primera generación de metodologías de ingeniería de software.

Los años ochenta y en adelante: Edad de Oro

Sin embargo, se necesitaban nuevos enfoques para hacer frente a los problemas de la calidad del software, la globalización y los sistemas distribuidos, y así nació la segunda edad de oro de la ingeniería de software.

Ada, la solución del Departamento de Defensa de los Estados Unidos a la proliferación de lenguajes de programación, trajo nuevas ideas al campo, y Booche, el autor de estas ideas, se unió con otros científicos para producir el Lenguaje de Modelado Unificado y el Proceso Unificado.

Software engineering entró en juego con el trabajo de Philippe Kruchten, Barry Boehm, Vic Basili, Capers Jones, Harlan Mills y Watts Humphrey.

Simultáneamente, estos conceptos de ingeniería de software influyeron en el desarrollo de una generación completamente nueva delenguajes programmi ng, incluidos C11, Visual Basic, Objective-C y OLE / COM.

Los años noventa y el milenio: era de disrupciones

Internet era una nueva plataforma, donde la distribución era la predeterminada, los consumidores eran lasnuevas partes interesadas y los participantes no eran necesariamente confiables o dignos de confianza.

En ese momento, la comunidad de ingeniería de software era relativamente estable y económicamente vibrante. La Banda de los Cuatro nos dio el patrón de diseño y Jim Coplien aplicó las ideas a los patrones organizativos.

En esta época, Eric Raymond desarrolló un importante marco legal para el código abierto, y Kiran Karnik estableció los primeros contratos de subcontratación entre General Electric e India.

Internet estaba bien instalado y las organizaciones comenzaban a aprovechar sus posibilidades cuando losd ispositivos móviles llegaban a la escena. Internet se convirtió en la plataforma informática de facto y los ecosistemas específicos de la empresa se elevaron como catedrales amuralladas.

La era del marco estaba sobre nosotros, y luchamos por marcos de código abierto como Bootstrap, jQuery, Apache, NodeJS, MongoDB, Brew, Cocoa, Caffe, Flutter. Los métodos ágiles se han convertido en el método dominante, en el nombre, si no necesariamente perfectamente en la práctica.

La ingeniería de software había entrado en otra edad de oro, y muchas personas aprendieron a codificar. El SWEBOK y el Cuerpo de Conocimiento de Ingeniería de Sistemas fueron creados para codificar las mejores prácticas.

La década por delante: Big Data y la nueva temporada de IA

La ingeniería de software está a punto de sufrir otro cambio. Los fundamentos de la IA han existido durante décadas, pero la ola actual de avances está en la “IA de señal”: el uso de redes neuronales para hacer coincidencias de patrones complejos en imágenes, video y señales de audio.

No hemos construido suficientes sistemas de IA para comprender completamente cómo podrían afectar el proceso de ingeniería de software. El desafío para la próxima generación de mujeres y hombres será diseñar sistemas cuyo funcionamiento no podamos explicar o confiar plenamente.

En la historia dela cooperación, hemos visto la progresión de los sistemas de las realidades matemáticas, a las simbólicas, a las imaginarias. Los fundamentos de la ingeniería de software de sonido siempre se aplicarán, sin importar el medio, la tecnología o el dominio.

Los ingenieros de software sonescritores invisibles que susurran las historias de posibilidad a nuestro hardware.

Conclusiones

Ya hemos visto varios puntos de vista de cómo evolucionó la computación y cómo esto llevó a la concepción de la ingeniería del software. Me llama la atención que hay varios puntos claves que se repiten en todas las apreciaciones, como que es una ingeniería que todavía está evolucionando y cambiando, que es difícil de formalizar ya que aún no hemos encontrado todos los posibles tipos de software que podemos generar (como por ejemplo ahora estamos en el boom de la inteligencia artificial), y que todos los autores que hemos leído han hecho énfasis en que la computación y el boom del software sigue vigente gracias a hombres y mujeres por igual.

También, me parece poderoso uno de las ideas que comparte Booch al final, donde declara que “Los ingenieros de software son los escritores invisibles que susurran las historias de posibilidades a nuestro hardware.” Estas palabras ponen a los ingenieros de software en los mismos zapatos que los grandes inventores del renacimiento, o los impulsadores de la era industrial.

Somos los ingenieros de software los responsables de llevar adelante a la humanidad en este momento, ya que gran parte del progreso humano en estos momentos depende meramente de lo que podamos hacer con computadoras y los componentes electrónicos que usan las bases de nuestro conocimiento para aportar valor a la sociedad.

--

--

Fernando Rojas

Computer Scientist — Software Development Engineer @ Amazon