Ya que este blog está enteramente dedicado a la difusión de la ingeniería de software y disciplinas relacionadas pensé en hacer este artículo para difundir y entender realmente qué es una ingeniería, qué hace que una disciplina sea considerada una ingeniería y responder a la pregunta si, en primer lugar, es la ingeniería de software una ingeniería de verdad? Un desarrollador de software es un ingeniero de software? Comencemos!
Qué es la Ingeniería?
La ingeniería es una disciplina que aplica principios científicos, matemáticos y prácticos para resolver problemas y diseñar soluciones que satisfacen necesidades humanas. Abarca una amplia variedad de campos, cada uno enfocado en diferentes aspectos de la tecnología y la ciencia.
Resalté la palabra prácticos ya que su enfoque es resolver problemas prácticos, es decir de la vida real y cotidiana, a diferencia por ejemplo de la física que se concentra en la comprensión de fenómenos naturales o de la matemática que estudia la teoría y herramientas para análisis.
Toda disciplina es ingeniería?
No. Una disciplina es considerada una ingeniería cuando cumple con ciertos criterios que la definen como tal. Estos criterios giran en torno a la aplicación de principios científicos y matemáticos, la resolución sistemática de problemas complejos, y la creación de soluciones que beneficien a la sociedad.
A continuación te listaré los aspectos que hacen que una disciplina sea ingeniería, y te diré cómo se aplican a la ingeniería de software:
1. Aplicación de principios científicos y metamáticos
La ingeniería implica el uso de teorías, principios y conocimientos derivados de ciencias fundamentales como la física, química y matemáticas para resolver problemas prácticos. Esto significa que la ingeniería no es solo la creación de productos o soluciones, sino que estas soluciones están basadas en una comprensión profunda de los fenómenos naturales y en principios probados.
La ingeniería de software aplica principios de la ciencia de la computación, matemáticas y lógica. Estos principios incluyen la complejidad computacional, teoría de autómatas, álgebra booleana (aquí te dejo un artículo donde hablo de esto), teoría de bases de datos, criptografía, y algoritmos avanzados, entre otros.
Ejemplos: En el diseño de algoritmos eficientes, como un algoritmo de búsqueda u ordenamiento, los ingenieros de software utilizan teorías matemáticas y computacionales para optimizar el rendimiento del software.
En el caso de un ingeniero civil 👷♂️, éste usa principios de física y matemáticas para calcular la resistencia estructural de un puente.
2. Enfoque en resolver problemas prácticos
Los ingenieros aplican su conocimiento científico para resolver problemas del mundo real. La ingeniería no es puramente teórica; su propósito es generar productos, procesos o soluciones que funcionen de manera efectiva y eficiente en escenarios prácticos. Esta resolución de problemas implica creatividad, innovación y un enfoque estructurado.
Los ingenieros de software se enfocan en resolver problemas del mundo real mediante el desarrollo de sistemas que automatizan procesos, mejoran la eficiencia, facilitan la toma de decisiones y permiten la interacción entre personas y tecnología.
Ejemplo: Un ingeniero de software crea un sistema de gestión de inventarios para una empresa, solucionando el problema de seguimiento de productos y evitando pérdidas por falta de control.
También te puedo mencionar el ejemplo en el caso de la ingeniería mecánica, cuando se diseña un sistema turbo acoplado al motor de un automóvil para dotarlo de más potencia cuando lo requiera en las calles.
Por otro lado, para analizar el flujo de trabajo en una línea de producción, un ingeniero de sistemas o un ingeniero informático puede identificar cuellos de botella y proponer cambios que aumenten la eficiencia incluyendo un sistema de información de medición.
3. Enfoque sistemático y estructurado
La ingeniería sigue un enfoque metódico y organizado para resolver problemas. Este enfoque incluye etapas como el análisis de requisitos, el diseño, la implementación, la prueba y el mantenimiento. Las decisiones se basan en análisis rigurosos y la aplicación de metodologías estándar.
Ejemplo: En un proyecto de desarrollo de una aplicación web, se definen claramente los requisitos del cliente, se diseña la arquitectura, se implementa el código, se prueba exhaustivamente y se realiza un mantenimiento continuo (CICD) después del lanzamiento considerando también un acuerdo de servicio SLA con los usuarios o clientes... estoy seguro que esto te es familiar 😉.
En el caso de la ingeniería mecánica, se sigue un proceso riguroso para diseñar un motor, desde los cálculos iniciales hasta las pruebas de seguridad considerando unos estándares de seguridad establecidos por organismos multinacionales.
4. Diseño y construcción de soluciones
Los ingenieros crean productos o sistemas físicos o digitales que satisfacen necesidades humanas. Estas soluciones deben ser funcionales, seguras, eficientes y sostenibles. Además, deben ser capaces de resistir fallos y operar bajo ciertas condiciones específicas.
Ejemplo: Un ingeniero de software diseña un sistema de banca en línea que debe ser seguro, escalable y capaz de manejar millones de transacciones al día, también te suena familiar dev? 🐿️
Te pongo otro ejemplo: un ingeniero eléctrico diseña circuitos eléctricos que cumplan con los estándares de seguridad y eficiencia energética.
5. Optimización y eficiencia
Una característica fundamental de la ingeniería es la optimización. Los ingenieros buscan soluciones que no solo funcionen, sino que sean las más eficientes en términos de costo, recursos, tiempo y calidad. Esto implica hacer concesiones y encontrar el equilibrio adecuado entre diferentes factores.
Ejemplo: Un ingeniero de software optimiza un algoritmo de búsqueda en grandes conjuntos de datos, reduciendo el tiempo de búsqueda de minutos a segundos, lo cual mejora significativamente la experiencia del usuario.
Un ingeniero industrial optimiza los procesos de manufactura para reducir costos y tiempos de producción sin sacrificar la calidad, esto es muy común entre ingenieros industriales.
6. Evaluación y gestión de riesgos
Los ingenieros deben anticipar y mitigar posibles riesgos en sus diseños y soluciones. Esto implica un análisis profundo de los posibles fallos y la implementación de medidas preventivas y correctivas. Los ingenieros son responsables de la seguridad y confiabilidad de sus soluciones.
La ingeniería de software incluye la evaluación y gestión de riesgos tanto en el desarrollo como en el mantenimiento del software. Esto incluye prever posibles fallos, gestionar la seguridad, manejar excepciones y asegurar la continuidad del servicio.
Ejemplo: En el desarrollo de software crítico para la aviación, los ingenieros de software implementan redundancia y pruebas exhaustivas para mitigar el riesgo de errores catastróficos, sí, los aviones y sus sistemas tienen código, millones de líneas...
Un ingeniero aeroespacial calcula los riesgos asociados con el lanzamiento de un cohete y diseña mecanismos de seguridad para reducir la probabilidad de fallos de la nave.
7. Contribución a la sociedad
La ingeniería busca beneficiar a la sociedad proporcionando soluciones que mejoren la calidad de vida. Estas soluciones pueden ir desde la creación de infraestructuras hasta el desarrollo de tecnologías que permitan avances en salud, transporte, energía y más.
La ingeniería de software tiene un impacto directo en la sociedad a través de la creación de tecnologías que mejoran la calidad de vida, la eficiencia en los negocios, la educación, la salud, la comunicación, y prácticamente todas las áreas de la vida moderna.
Ejemplo: Un ingeniero de software desarrolla una plataforma de comunicación a distancia enfocada a la medicina que permite a los pacientes acceder a consultas médicas desde lugares remotos, mejorando el acceso a la atención médica, vamos que un zoom pero enfocado a la telemedicina, que luego se podría integrar con sistemas mecatrónicos para intervenciones quirúrgicas a distancia... vaya... interesante no?
Los ingenieros ambientales desarrollan sistemas de tratamiento de agua para garantizar el acceso a agua potable en comunidades y los ingenieros químicos hacen lo mismo en una planta embotelladora de agua de mesa comercial.
8. Rigor y estándares éticos
Los ingenieros deben adherirse a estándares y códigos de ética estrictos. Estos estándares aseguran que los productos y soluciones sean seguros, eficientes y respeten el medio ambiente y los derechos de las personas.
Los ingenieros de software deben adherirse a estándares de calidad, seguridad y ética. Existen normas internacionales (como ISO/IEC 25010) que definen los estándares de calidad del software. Además, los ingenieros de software tienen la responsabilidad ética de garantizar la privacidad de los datos, evitar sesgos en los algoritmos y minimizar los riesgos de seguridad.
En este artículo te hablo de estándares de calidad en el software por si te interese el tema.
Ejemplo: Un ingeniero de software se asegura de que una aplicación de procesamiento de datos personales cumpla con las regulaciones de protección de datos, como el GDPR, para proteger la privacidad de los usuarios.
Un ingeniero químico sigue estrictas regulaciones medioambientales al desarrollar un nuevo proceso industrial para minimizar el impacto ecológico.
Por qué hay entonces confusión con la Ingeniería de Software?
Una diferencia clave con otras ramas de la ingeniería (como la civil o mecánica) es la naturaleza del producto. En lugar de trabajar con materiales físicos como cemento o acero, los ingenieros de software trabajan con código, que es abstracto y no tangible. Sin embargo, el enfoque estructurado y la responsabilidad por el rendimiento, calidad y seguridad del producto final sigue siendo la misma.
En pocas palabras, la ingeniería de software es de hecho una forma de ingeniería. Esto se debe a que utiliza principios científicos y matemáticos, sigue un proceso organizado y metódico para crear sistemas complejos y confiables. Que el resultado final sea software no significa que se deje de aplicar la rigurosidad y los estándares que se deben seguir en su desarrollo.
Es la ingeniería de software una ingeniería de verdad entonces? Sí, of course.
Qué no es ingeniería?
Por otra parte, existen disciplinas o habilidades que podrían resultar útiles y pueden ser complejas, nadie niega eso, sin embargo debido a que incumplen algunos o todos los puntos que describí antes, estas disciplinas o términos no podrían ser considerados como ingeniería, aunque lo lleven en el nombre, por ejemplo:
- Ingeniería social
- Ingeniería comercial
- Ingeniería financiera
- Ingeniería del conocimiento
- Ingeniería del 'prompt' o prompt engineer
- Ingeniería corporal o fitness
- Ingeniería política, etc...
La 'ingeniería' comercial y financiera son consideradas disciplinas de administración, gestión y negocios, pueden llegar a ser muy complejas y útiles en la sociedad, mas no son ingenierías en el sentido estricto.
La programación y el desarrollo de software por sí solos no son ingeniería, sin embargo son disciplinas técnicas, complejas y además parte fundamental del software 😉 por supuesto. Próximamente escribiré sobre este tema...
Si te preguntas de dónde saqué esos criterios, no es que me los inventé, puedo darte algunas referencias serias como ASEE y ABET que es Accrediting Engineering Technology Programs el cual describe por ejemplo una serie de criterios para acreditar programas de ingeniería, no es que coincida exactamente con los 8 puntos que te describí pero sí que nos da una pista clara de qué debería cumplir una ingeniería para ser considerada como tal en el ámbito profesional y práctico.
Espero haberlos ayudado a aclarar sus dudas estimados devs y este tema da para más así que más adelante hablaré también de la ingeniería de sistemas, la cual es precisamente mi profesión.
Saludos y hasta la próxima, ya sabes comparte este artículo, eso ayuda un montón 🥳
Créditos de imagen de portada: Foto de ThisisEngineering en Unsplash