Historia de la ingeniería en sistemas

Compartir Imprimir Citar

La ingeniería en sistemas computacionales comenzó en la década de 1960, como respuesta al desarrollo de máquinas de cómputo comerciales, y originalmente se centró en el desarrollo del software necesario para operarlas. Esta profesión ha evolucionado significativamente a lo largo de los años, y se ha enfocado en optimizar la calidad y eficiencia de programas, sistemas y la arquitectura informática.

La calidad del software se mide en varios aspectos. Entre ellos, se destacan la mantenibilidad, estabilidad, velocidad, facilidad de uso, capacidad de prueba, legibilidad, y tamaño. También se consideran factores como el costo, la seguridad, y la minimización de errores o "bugs". Además, hay cualidades más subjetivas pero igualmente importantes, como la elegancia, concisión y la satisfacción del cliente.

Por otro lado, la metodología para desarrollar software de alta calidad es un tema de debate continuo. Este incluye los principios de diseño de software y las denominadas "mejores prácticas" en la escritura de código. Asimismo, abarca aspectos de gestión más amplios, como determinar el tamaño óptimo de un equipo de trabajo (scrum, agile, etc.), los procesos de desarrollo más efectivos, y las estrategias para entregar el software de manera oportuna.

Adicionalmente, la cultura del lugar de trabajo y las prácticas de contratación juegan un papel crucial en el éxito de los proyectos de ingeniería de sistemas. Estos elementos contribuyen a la eficiencia y calidad del software, así como a la satisfacción general del equipo de desarrollo. Por lo que la historia de la ingeniería de sistemas no solo refleja la evolución de las técnicas de programación y gestión de proyectos, sino también la adaptación a las cambiantes necesidades del mercado y las expectativas de los usuarios.

Término "Ingeniería en sistemas"

En el mundo hispanohablante, existen varios nombres para denominar la especialidad técnica dedicada a la creación de software y arquitectura informática. Esta variedad de nombres se debe a que el término software fue originalmente un anglicismo, y aunque ahora se admite como un exónimo, los currículos universitarios se crearon en torno a su traducción o interpretación funcional.

Software, abarca todo aquello que ejecuta órdenes dentro de una máquina de cómputo, y se suele traducir como "programa informático" o "aplicación informática" pero el lenguaje de bajo nivel que controla la interacción del lenguaje binario y la arquitectura informática básica también es software.

En México, por ejemplo, se utiliza comúnmente el término "Ingeniería en Sistemas Computacionales". Esta denominación pone énfasis en el aspecto computacional de la disciplina, abarcando tanto el desarrollo de software como el entendimiento de los sistemas de hardware. Por otro lado, en España, se prefiere el término "Ingeniería del Software" o "Ingeniería Informática". Estas expresiones tienden a enfocarse más directamente en el aspecto del desarrollo y gestión de software, aunque también cubren aspectos más amplios de la informática.

En otros países de América Latina, como Argentina y Colombia, se encuentran términos como "Ingeniería de Sistemas" o "Ingeniería en Sistemas de la Información". Estas variantes reflejan un enfoque más integrador, que no solo considera el desarrollo de software, sino también la gestión de la información y los sistemas de información en las organizaciones. A pesar de las diferencias en la nomenclatura, todas estas denominaciones comparten el núcleo fundamental de la ingeniería de software, enfocándose en la creación, mantenimiento y gestión de sistemas de software eficientes y efectivos.

HSD

Evolución

La evolución de la ingeniería de software es notable en varias áreas:

1945 a 1965: Orígenes

Los orígenes putativos del término ingeniería de software incluyen una carta de 1965 del presidente de ACM, Anthony Oettinger, conferencias de Douglas T. Ross en el MIT en la década de 1950. Margaret H. Hamilton "es la persona a la que se le ocurrió la idea de nombrar la disciplina, ingeniería de software, como una forma de darle legitimidad".

El Comité Científico de la OTAN patrocinó dos conferencias sobre ingeniería de software en 1968 (Garmisch, Alemania; consulte el informe de la conferencia) y 1969, que le dio al campo su impulso inicial. Muchos creen que estas conferencias marcaron el inicio oficial de la profesión de ingeniería de software.

1965 a 1985: Crisis del software

La ingeniería de software fue impulsada por la llamada crisis del software de las décadas de 1960, 1970 y 1980, que identificó muchos de los problemas del desarrollo de software. Muchos proyectos superaron el presupuesto y el cronograma. Algunos proyectos causaron daños a la propiedad. Algunos proyectos causaron la pérdida de vidas. La crisis del software se definió originalmente en términos de productividad, pero evolucionó para enfatizar la calidad. Algunos utilizaron el término crisis del software para referirse a su incapacidad para contratar suficientes programadores calificados.

Peter G. Neumann ha mantenido una lista contemporánea de problemas y desastres de software. La crisis del software se ha ido desvaneciendo porque es psicológicamente extremadamente difícil permanecer en modo de crisis durante un período prolongado (más de 20 años). Sin embargo, el software, especialmente el software integrado en tiempo real, sigue siendo riesgoso y omnipresente, y es crucial no ceder a la autocomplacencia. Durante los últimos 10 a 15 años, Michael A. Jackson ha escrito extensamente sobre la naturaleza de la ingeniería de software, ha identificado la fuente principal de sus dificultades como la falta de especialización y ha sugerido que sus marcos de problemas proporcionan la base para una "práctica normal". de ingeniería de software, un requisito previo para que la ingeniería de software se convierta en una ciencia de la ingeniería.

1985 a 1989: Intentos de estandarización

Durante décadas, resolver la crisis del software fue primordial para los investigadores y las empresas que producían herramientas de software. El costo de poseer y mantener el software en la década de 1980 era el doble que el de desarrollar el software.

Proyectos de software

Aparentemente, cada nueva tecnología y práctica desde la década de 1970 hasta la década de 1990 se anunció como una panacea para resolver la crisis del software. Las herramientas, la disciplina, los métodos formales, el proceso y la profesionalidad se promocionaron como balas de plata:

En 1986, Fred Brooks publicó su artículo No Silver Bullet, argumentando que ninguna tecnología o práctica individual lograría una mejora de 10 veces en la productividad en 10 años.

El debate sobre las balas de plata prosiguió durante la década siguiente. Los defensores de Ada, los componentes y los procesos continuaron argumentando durante años que su tecnología favorita sería una panacea. Los escépticos no estuvieron de acuerdo. Eventualmente, casi todos aceptaron que nunca se encontraría una bala de plata. Sin embargo, las afirmaciones sobre balas de plata aparecen de vez en cuando, incluso hoy.

Algunos interpretan que ninguna bala de plata significa que la ingeniería de software falló. Sin embargo, con lecturas adicionales, Brooks continúa diciendo: "Seguramente lograremos un progreso sustancial en los próximos 40 años; un orden de magnitud de más de 40 años no es mágico..."

La búsqueda de una clave única para el éxito nunca funcionó. Todas las tecnologías y prácticas conocidas solo han logrado mejoras incrementales en la productividad y la calidad. Sin embargo, tampoco hay balas de plata para ninguna otra profesión. Otros no interpretan la panacea como prueba de que la ingeniería de software finalmente ha madurado y reconocen que los proyectos tienen éxito gracias al trabajo duro.

Sin embargo, también podría decirse que, de hecho, hoy en día existe una variedad de balas de plata, que incluyen metodologías livianas (ver "Gestión de proyectos"), calculadoras de hojas de cálculo, navegadores personalizados, motores de búsqueda en el sitio, generadores de informes de bases de datos, diseño integrado -Editores de codificación de prueba con memoria/diferencias/deshacer, y tiendas especializadas que generan software de nicho, como sitios web de información, a una fracción del costo del desarrollo de sitios web totalmente personalizados. Sin embargo, el campo de la ingeniería de software parece demasiado complejo y diverso para que una sola "solución mágica" mejore la mayoría de los problemas, y cada problema representa solo una pequeña parte de todos los problemas de software.

1990 a 1999: Protagonismo de la Internet

El auge de Internet condujo a un crecimiento muy rápido de la demanda de sistemas internacionales de visualización de información/correo electrónico en la World Wide Web. Se requería que los programadores manejaran ilustraciones, mapas, fotografías y otras imágenes, además de animaciones simples, a una velocidad nunca antes vista, con pocos métodos bien conocidos para optimizar la visualización/almacenamiento de imágenes (como el uso de imágenes en miniatura).

El crecimiento del uso de navegadores, que se ejecutan en el lenguaje de marcado de hipertexto (HTML), cambió la forma en que se organizaba la visualización y recuperación de información. Las conexiones de red generalizadas condujeron al crecimiento y la prevención de virus informáticos internacionales en computadoras con MS Windows, y la gran proliferación de correo electrónico no deseado se convirtió en un problema de diseño importante en los sistemas de correo electrónico, inundando los canales de comunicación y requiriendo una revisión previa semiautomática.. Los sistemas de búsqueda por palabra clave se convirtieron en motores de búsqueda basados ​​en la web, y muchos sistemas de software tuvieron que ser rediseñados para la búsqueda internacional, dependiendo de la optimización del motor de búsqueda (SEO). Se necesitaban sistemas humanos de traducción de lenguaje natural para intentar traducir el flujo de información en múltiples idiomas extranjeros, y muchos sistemas de software se diseñaron para uso en varios idiomas. basado en conceptos de diseño de traductores humanos. Las bases típicas de usuarios de computadoras pasaron de cientos o miles de usuarios a, a menudo, muchos millones de usuarios internacionales.

2000 a 2015: Auge del Software ligero

Con la creciente demanda de software en muchas organizaciones más pequeñas, la necesidad de soluciones de software económicas condujo al crecimiento de metodologías más simples y rápidas que desarrollaron software en ejecución, desde los requisitos hasta la implementación, de manera más rápida y sencilla. El uso de prototipos rápidos evolucionó a metodologías ligeras completas, como Extreme Programming (XP), que intentó simplificar muchas áreas de la ingeniería de software, incluida la recopilación de requisitos y las pruebas de confiabilidad para la creciente cantidad de pequeños sistemas de software. Los sistemas de software muy grandes todavía usaban metodologías muy documentadas, con muchos volúmenes en el conjunto de documentación; sin embargo, los sistemas más pequeños tenían un enfoque alternativo más simple y rápido para administrar el desarrollo y mantenimiento de cálculos y algoritmos de software, almacenamiento/recuperación de información y visualización.

Tendencias actuales en ingeniería de software

La ingeniería de software es una disciplina joven y todavía se está desarrollando. Las direcciones en las que se está desarrollando la ingeniería de software incluyen:

Aspectos

Los aspectos ayudan a los ingenieros de software a lidiar con los atributos de calidad al proporcionar herramientas para agregar o eliminar código repetitivo de muchas áreas en el código fuente. Los aspectos describen cómo deben comportarse todos los objetos o funciones en circunstancias particulares. Por ejemplo, los aspectos pueden agregar control de depuración, registro o bloqueo en todos los objetos de tipos particulares. Los investigadores están trabajando actualmente para comprender cómo usar aspectos para diseñar código de propósito general. Los conceptos relacionados incluyen programación generativa y plantillas.

Experimental

La ingeniería de software experimental es una rama de la ingeniería de software interesada en diseñar experimentos sobre software, recopilar datos de los experimentos y diseñar leyes y teorías a partir de estos datos. Los defensores de este método defienden que la naturaleza del software es tal que podemos avanzar en el conocimiento del software solo a través de experimentos.

Líneas de productos de software

Las líneas de productos de software, también conocidas como ingeniería de familias de productos, son una forma sistemática de producir familias de sistemas de software, en lugar de crear una sucesión de productos completamente individuales. Este método enfatiza la reutilización extensa, sistemática y formal del código para tratar de industrializar el proceso de desarrollo de software.

La conferencia Future of Software Engineering (FOSE), celebrada en ICSE 2000, documentó el estado del arte de SE en 2000 y enumeró muchos problemas que se resolverán durante la próxima década. Las pistas de FOSE en las conferencias ICSE 2000 e ICSE 2007 también ayudan a identificar el estado del arte en ingeniería de software.

Ingeniería de software hoy

La profesión está tratando de definir su límite y contenido. El cuerpo de conocimientos de ingeniería de software SWEBOK se presentó como un estándar ISO durante 2006 (ISO/IEC TR 19759).

En 2006, Money Magazine y Salary.com calificaron a la ingeniería de software como el mejor trabajo en Estados Unidos en términos de crecimiento, pago, niveles de estrés, flexibilidad en los horarios y ambiente de trabajo, creatividad y cuán fácil es ingresar y avanzar en el campo.

Subdisciplinas

Inteligencia artificial

Una amplia variedad de plataformas ha permitido el desarrollo de diferentes aspectos de la IA, que van desde sistemas expertos como Cyc hasta marcos de trabajo de aprendizaje profundo y plataformas robóticas como Roomba con interfaz abierta. Los avances recientes en redes neuronales artificiales profundas y computación distribuida han llevado a una proliferación de bibliotecas de software, incluidas Deeplearning4j, TensorFlow, Theano y Torch.

Un estudio de McKinsey Global Institute de 2011 encontró una escasez de 1,5 millones de profesionales y administradores de datos e inteligencia artificial altamente capacitados, y una serie de bootcamps privados han desarrollado programas para satisfacer esa demanda, incluidos programas gratuitos como The Data Incubator o programas pagos como General Assembly.

Idiomas

La IA simbólica temprana inspiró a Lisp y Prolog, que dominaron la programación temprana de IA. El desarrollo moderno de IA a menudo usa lenguajes convencionales como Python o C++, o lenguajes de nicho como Wolfram Language.

Personajes destacados en la historia de la ingeniería de software