Historia de la ingeniería en sistemas
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:
- Surgimiento como profesión: a principios de la década de 1980, la ingeniería de software ya había surgido como una profesión de buena fe. , para estar al lado de la informática y la ingeniería tradicional.
- Rol de la mujer: antes de 1970, los hombres que ocupaban los puestos de ingeniería de hardware más prestigiosos y mejor pagados a menudo delegaban la escritura de software en mujeres, y leyendas como Grace Hopper o Margaret Hamilton ocuparon muchos puestos de programación informática.Hoy en día, menos mujeres trabajan en ingeniería de software que en otras profesiones, situación cuya causa no está claramente identificada. Muchas organizaciones académicas y profesionales consideran esta situación desequilibrada y se esfuerzan por solucionarla.
- Procesos: Los procesos se han convertido en una gran parte de la ingeniería de software. Son aclamados por su potencial para mejorar el software, pero muy criticados por su potencial para restringir a los programadores.
- Costo del hardware: el costo relativo del software frente al hardware ha cambiado sustancialmente en los últimos 50 años. Cuando los mainframes eran caros y requerían mucho personal de soporte, las pocas organizaciones que los compraban también tenían los recursos para financiar grandes y costosos proyectos de ingeniería de software personalizados. Las computadoras ahora son mucho más numerosas y mucho más poderosas, lo que tiene varios efectos en el software. El mercado más grande puede respaldar grandes proyectos para crear software comercial listo para usar, como lo hacen compañías como Microsoft. Las máquinas baratas permiten que cada programador tenga una terminal capaz de compilar bastante rápido. Los programas en cuestión pueden usar técnicas como la recolección de basura, que los hace más fáciles y rápidos de escribir para el programador. Por otro lado,
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.
- Excesos de costos y presupuesto: El sistema operativo OS/360 fue un ejemplo clásico. Este proyecto de una década de la década de 1960 finalmente produjo uno de los sistemas de software más complejos en ese momento. OS/360 fue uno de los primeros grandes proyectos de software (1000 programadores). Fred Brooks afirma en The Mythical Man-Month que cometió un error multimillonario al no desarrollar una arquitectura coherente antes de comenzar el desarrollo.
- Daños a la propiedad: los defectos del software pueden causar daños a la propiedad. La mala seguridad del software permite a los hackers robar identidades, lo que cuesta tiempo, dinero y reputación.
- Vida o muerte: Los defectos de software pueden matar. Algunos sistemas integrados utilizados en máquinas de radioterapia fallaron tan catastróficamente que administraron dosis letales de radiación a los pacientes. El más famoso de estos fracasos es el incidente Therac-25.
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.
- Durante la década de 1990, el costo de propiedad y mantenimiento aumentó en un 30 % con respecto a la década de 1980.
- En 1995, las estadísticas mostraron que la mitad de los proyectos de desarrollo encuestados estaban operativos, pero no se consideraban exitosos.
- El proyecto de software promedio excede su cronograma a la mitad.
- Las tres cuartas partes de todos los grandes productos de software entregados al cliente son fallas que no se usan en absoluto o no cumplen con los requisitos del cliente.
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:
- Herramientas: se hizo especial hincapié en las herramientas: la programación estructurada, la programación orientada a objetos, las herramientas CASE como el sistema CADES CASE de ICL, Ada, la documentación y los estándares se promocionaron como balas de plata.
- Disciplina: algunos expertos argumentaron que la crisis del software se debió a la falta de disciplina de los programadores.
- Métodos formales: algunos creían que si se aplicaban metodologías formales de ingeniería al desarrollo de software, la producción de software se convertiría en una industria tan predecible como otras ramas de la ingeniería. Abogó por probar que todos los programas son correctos.
- Proceso: muchos abogaron por el uso de procesos y metodologías definidos como el modelo de madurez de la capacidad.
- Profesionalismo: Esto llevó a trabajar en un código de ética, licencias y profesionalismo.
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
- Charles Bachman (1924-2017) es particularmente conocido por su trabajo en el área de las bases de datos.
- Laszlo Belady (nacido en 1928), editor en jefe de IEEE Transactions on Software Engineering en la década de 1980.
- Fred Brooks (nacido en 1931) mejor conocido por gestionar el desarrollo de OS/360.
- Peter Chen (nacido en 1947) conocido por el desarrollo del modelado entidad-relación.
- Edsger Dijkstra (1930–2002) desarrolló el marco para una forma de programación estructurada.
- David Parnas (nacido en 1941) desarrolló el concepto de ocultación de información en la programación modular.
- Michael A. Jackson (nacido en 1936), metodólogo de ingeniería de software responsable del método de diseño de programas JSP; método JSD de desarrollo de sistemas (con John Cameron); y el enfoque Problem Frames para analizar y estructurar problemas de desarrollo de software.
- Richard Stallman Creó las utilidades del sistema GNU y defendió el software libre
Contenido relacionado
Red troncal
PDP-1
Documentación del software