El software debe ser desarrollado por especialistas en software
El software debe ser desarrollado por especialistas en software. Esta afirmación no es un mero capricho, sino una necesidad fundamental para garantizar la calidad, eficiencia y seguridad en el desarrollo de aplicaciones y sistemas informáticos.
Muchas veces me encuentro con gente que una y otra vez me expresa la misma opinión, "cualquiera puede programar" o "todos los ingenieros saben programar" y es que no puedo estar más en desacuerdo. Eso "no es programar".
Los programadores profesionales, ya sean informáticos con grados universitarios o técnicos en formación profesional, o autodidactas con miles de horas de experiencia, han dedicado años de estudio y práctica a especializarse y comprender los intrincados detalles de la programación, las estructuras de datos, los algoritmos, la arquitectura de software y de las comunicaciones, la seguridad, las metodologías y por su puesto la gestión de proyectos de desarrollo. Estos conocimientos no se adquieren superficialmente, sino que requieren una formación especializada y continuada, algo que va más allá de un curso de programación incluido en el currículo de cualquier otra ingeniería.
La seguridad del software es una de las áreas donde la especialización es crucial. Los desarrolladores de software entrenados comprenden los principios de diseño seguro, conocen las vulnerabilidades comunes y están al tanto de las mejores prácticas para mitigarlas. Según un informe de Verizon de 2020, el 43% de las brechas de datos estuvieron vinculadas a vulnerabilidades en aplicaciones web . Este dato subraya la importancia de contar con profesionales que tengan un profundo conocimiento en seguridad para minimizar riesgos.
Además de la seguridad, la experiencia en pruebas de software es otro campo que distingue a los especialistas en software de los ingenieros con conocimientos generales de programación. Las pruebas de software no se limitan a verificar que una aplicación funcione correctamente; incluyen pruebas unitarias, de integración, de sistema y de aceptación, entre otras. Los especialistas en software están familiarizados con diversas metodologías y herramientas de pruebas, lo que les permite garantizar un producto final de alta calidad. Según un estudio de Capgemini y Sogeti, el 31% de los fallos en producción se podrían haber evitado con pruebas más exhaustivas y adecuadas .
El conocimiento de múltiples alternativas tecnológicas también es una característica distintiva de los programadores especializados. Elegir el mejor lenguaje de programación, el framework más adecuado o la infraestructura óptima requiere un entendimiento profundo de las ventajas y limitaciones de cada opción. Los especialistas en software están actualizados con las tendencias tecnológicas y las mejores prácticas de la industria, permitiéndoles tomar decisiones informadas que impactan directamente en la eficiencia y escalabilidad del software. Un informe de Stack Overflow de 2023 muestra que el 75% de los desarrolladores profesionales aprenden continuamente nuevas tecnologías para mantenerse al día en un campo en constante evolución .
Lo sé, los ingenieros de otras disciplinas pueden tener conocimientos básicos o incluso intermedios en programación, pero no tienen el mismo nivel de profundidad y especialización que los profesionales del software. Su formación principal se centra en áreas específicas de su disciplina, y aunque puedan aplicar conocimientos de programación a sus proyectos, no están equipados para abordar problemas complejos de software de la misma manera que un especialista en informática.
Recomendado por LinkedIn
Deben entender que los programadores no solo escriben código; diseñan sistemas robustos, optimizan el rendimiento, aseguran la escalabilidad y, sobre todo, piensan creativamente para resolver problemas y mejorar procesos. Su capacidad para "salir de la caja" y pensar de manera innovadora es esencial para la evolución tecnológica. Un informático puede no solo seguir las directrices de un ingeniero, sino que puede ser quien aporte mejoras significativas en los procesos industriales y de ingeniería mediante la automatización, la optimización de recursos y la implementación de soluciones avanzadas que luego sabrá trasladar al ordenador.
Los escépticos argumentan que cualquier ingeniero con formación en programación puede desarrollar software de calidad. Sin embargo, esta visión subestima la complejidad del desarrollo de software profesional. Suelo decir, que no es lo mismo un pintor "de brocha gorda" que un Rubens; del mismo modo, no es lo mismo un ingeniero con conocimientos básicos de programación que un programador profesional. La calidad, la eficiencia y la innovación que puede aportar un especialista en software son insustituibles.
Ahora, últimamemente, para el despiste de estos 'escépticos', la irrupción de las IAs generativas está haciendoles creer que cualquiera puede programar, y es posible que en un periodo más breve de lo que a algunos 'nos' gustaría, esto se convierta en una realidad. Sin embargo, hasta la fecha son muchos los programadores que tienen que "corregir" el "consejo" de una IA, algo que un profano dejaría tal como le llega, un experto es capaz de detectar como mejorarlo. Las herramientas de IA actuales, aunque potentes, no son infalibles y a menudo generan código que puede ser subóptimo, inseguro o simplemente incorrecto. Los especialistas en software están capacitados para identificar estos problemas y ajustar el código para cumplir con los estándares de calidad y seguridad requeridos.
Por ejemplo, un estudio de GitHub Copilot reveló que, aunque la herramienta puede aumentar la productividad de los desarrolladores, el código generado necesita una revisión cuidadosa. Según un artículo de ZDNet, aproximadamente el 40% del código sugerido por Copilot es aceptado tal cual, lo que indica que el 60% restante requiere ajustes significativos por parte de programadores experimentados. Esta necesidad de revisión y corrección pone de manifiesto la importancia de contar con expertos en software que puedan evaluar y mejorar las recomendaciones generadas por las IA.
Los ingenieros de otras disciplinas que utilizan herramientas de IA para programar pueden no tener la experiencia necesaria para identificar las sutilezas y posibles fallos en el código generado. Esta falta de expertise puede resultar en software que no solo es ineficiente, sino también vulnerable a ataques y fallos. Además, la capacidad de un programador especializado para elegir el mejor lenguaje de programación, framework o arquitectura no puede ser replicada por una IA sin una profunda comprensión del contexto y los requisitos específicos del proyecto.
Por otro lado, además de todo esto, conceptos avanzados de desarrollo de software como la Programación Orientada a Objetos (POO), los principios SOLID, el diseño de patrones, la gestión de dependencias y las arquitecturas de microservicios son áreas que solo los especialistas en software conocen en profundidad y saben aplicar correctamente. La Programación Orientada a Objetos, por ejemplo, permite la creación de sistemas más modularizados y fáciles de mantener. Los principios SOLID (Responsabilidad Única, Abierto/Cerrado, Sustitución de Liskov, Segregación de Interfaces y la Inversión de Dependencias) son fundamentales para diseñar software robusto, escalable y fácil de refactorizar. El uso correcto de patrones de diseño, como el patrón de fábrica o el patrón singleton, facilita la resolución de problemas recurrentes en el desarrollo de software y mejora la reutilización de código. La adecuada gestión de dependencias y la implementación de arquitecturas de microservicios permiten crear sistemas altamente escalables y con menor acoplamiento, lo que facilita la actualización y despliegue de nuevas funcionalidades sin afectar al sistema global. Estos conocimientos avanzados no solo incrementan la calidad del software producido, sino que también aseguran su sostenibilidad y adaptabilidad a largo plazo, algo que solo puede garantizar un profesional con una formación especializada en el campo del desarrollo de software.
La habilidad de los programadores para interpretar y aplicar correctamente las recomendaciones de las IA es un testimonio de la importancia de su especialización. Mientras que las IA pueden ser una herramienta valiosa en el proceso de desarrollo, no pueden sustituir el juicio y la experiencia de un profesional cualificado. Los programadores no solo siguen instrucciones; lo más importante es que comprenden el porqué que hay detrás de cada decisión de diseño, lo que les permite crear soluciones más robustas y eficaces. Y eso es algo que a los especialistas de otras áreas, se les escapa, puede que funcione, pero no saben porqué y no son capaces de 'optimizarlo', asegurarlo, hacerlo escalable, etc etc...
Es evidente que la colaboración interdisciplinaria es fundamental, pero debe respetar las áreas de especialización de cada profesional. Los ingenieros pueden aportar su conocimiento específico del dominio, pero el desarrollo de software debe estar en manos de aquellos que han dedicado su formación y carrera a este campo. El software debe ser desarrollado por especialistas en software.
CEO en OutBox Design Persianas.
5 mesesQue bien Juan Ra, un abrazo gigante.
Arquitecto de soluciones : Spain & Portugal, Core Enterprise and zCloud Practice
5 mesesMuy interesante, sobretodo me encanta la "Profesionalización" del oficio de Programador que haces, últimamente hasta la "Pipera de la calle Goya" sabe hacer programas. Programar es algo muy serio y especializado y no cualquiera puede/sabe/debe hacerlo. Sería muy interesante en otra ocasión profundizar más entre la POO y la Programación basada en los procesos de negocio. Enhorabuena por el Articulo JuanRa.!!!!