Las demandas del desarrollo de software moderno significan que a los programadores se les pide que escriban más código y entreguen nuevas funciones más rápido que nunca. El dicho de “no reinventar la rueda” les ha dado a muchos los atajos que necesitan para entregar código de manera rápida y, en la mayoría de los casos, confiable.
En lugar de escribir algo desde cero, un desarrollador de software seguramente encontrará algo adecuado en una biblioteca de programación o en un repositorio de código fuente. Hoy en día, los desarrolladores también tienen la opción de aprovechar el poder de los microservicios.
Los microservicios alteran radicalmente la relación entre el desarrollador de software y el código necesario para lograr la funcionalidad deseada, como explica Shaun O’Meara, director de tecnología de Mirantis: “En el pasado, normalmente había un desarrollador o un pequeño equipo de desarrolladores que desarrollaban cada componente del sistema, cada uno acordando trabajar en diferentes componentes”.
El equipo tuvo que construir todo desde cero, dice, pero cuando las bibliotecas de software estuvieron disponibles, el desarrollador pudo aprovechar la funcionalidad prediseñada. El gran cambio con los microservicios es que la mentalidad de los desarrolladores de software ha cambiado: ahora pueden consumir el trabajo desarrollado por otras personas y pueden lograr enormes ganancias en productividad al hacerlo.
El impacto, afirma, es que el código que utiliza microservicios tiende a consumir una mayor cantidad de infraestructura de TI que el código desarrollado de forma más tradicional.
El aumento de la ineficiencia en la codificación
La ineficiencia es ahora un lugar común en el desarrollo de software. “Las herramientas modernas han hecho que la gente sea perezosa”, dice Andy Powell, director de tecnología de la Universidad Christ Church de Canterbury. “Cuando escribía sitios web, esto fue antes de que apareciera .Net y en ASP clásico [active server pages] – tenías que escribir todos tus propios objetos”.
Cuando la gente visitaba sitios web a través de una conexión de módem de acceso telefónico de bajo ancho de banda, dice: “Había que ser consciente del tamaño de la imagen, las hojas de estilo y los tamaños de página; Tenías que ser consciente de la cantidad de datos que enviabas porque el tiempo de carga era importante”.
Para Powell, desde la perspectiva del desarrollo de aplicaciones, esto significaba que los desarrolladores consideraban la eficiencia del código. “Tenías que ser realmente eficiente con la capa de base de datos y tu API [application programming interface] capa”, dice.
Las consultas a los sistemas transaccionales se escribieron de manera que devolvieran el conjunto mínimo de datos viables, mientras que ahora, dice: “Obtienes 100.000 registros o tuplas y listo, selecciona lo que quieres de este [dataset] en la memoria porque la memoria se ha vuelto muy barata”.
Abordar el exceso de código
Hoy en día, los desarrolladores tratan el ancho de banda casi como un recurso y una potencia de procesamiento ilimitados, y la memoria y el almacenamiento son baratos y abundantes. Esto ha llevado a una sobrecarga de código, donde los desarrolladores ya no se centran en escribir software que se ejecute de la forma más eficiente posible y utilice el menor espacio de almacenamiento, memoria y potencia de procesamiento.
Mav Turner, director de estrategia y productos de Tricentis, señala que la sobrecarga de código generalmente proviene de varias fuentes, como una sintaxis demasiado detallada, funciones redundantes o no utilizadas y falta de optimización durante el desarrollo. Además, dice que las bases de código heredadas pueden acumular deuda técnica con el tiempo, lo que lleva a implementaciones infladas y complicadas.
Sin embargo, como explica Turner: “Al adoptar prácticas de codificación limpias, principios de diseño modular y refactorización periódica, los desarrolladores pueden mitigar la sobrecarga del código y mantener bases de código más ágiles y manejables”.
Los líderes de TI deben considerar los factores y factores que hacen que los desarrolladores de código escriban de manera menos eficiente. “Nadie tiene la intención de que el código se infle. Los desarrolladores no intentan destruir el medio ambiente”, afirma Maurice Kalinowski, director de producto de Qt.
Sin embargo, como señala Kalinowski, existen numerosos factores que causan ineficiencias no intencionales. Como ejemplo, dice: “Muy a menudo, los prototipos terminan en un producto debido a presiones de tiempo que obligan a los equipos de desarrollo a ciclos de entrega cortos. Esto conduce a una deuda técnica más adelante en el ciclo de vida del desarrollo y esto, a su vez, tiene el efecto colateral de perjudicar la eficiencia”.
Según Kalinowski, es importante considerar el área de aplicación y el caso de uso del código que se está desarrollando. “Si estás desarrollando código para ‘fines generales’, ¿los datos de entrada necesitan verificación semántica? ¿El código cubre todos los escenarios potenciales, incluidos aquellos que tal vez nunca sucedan?
Incluso el código altamente eficiente puede estar expuesto a casos de uso adicionales que necesitan una verificación y un procesamiento diferentes. Esto, advierte Kalinowski, lleva a que cada vez haya más casos en los que se escribe código para admitir estas excepciones. A medida que estos se acumulan, el código llega a un punto en el que es posible que se hayan perdido los beneficios de rendimiento que se diseñaron originalmente.
Kalinowski dice que los líderes de TI deberían considerar refactorizar aquellas partes del código que están infladas. “Por supuesto, primero necesitas saber cuáles de tus proyectos están inflados. Aquí es donde entran en juego muchas herramientas de desarrollo, como análisis de código estático y dinámico, creación de perfiles y muestreo mejorado”, añade.
Ineficiencias en las pruebas
Turner, de Tricentis, insta a los responsables de la toma de decisiones de TI a adoptar el desarrollo basado en pruebas (TDD) como metodología de TI sostenible. Según su experiencia, TDD ofrece una técnica poderosa que puede contribuir significativamente a la creación de un código ecológico, caracterizado por una mayor calidad y eficiencia.
“Al enfatizar la creación de pruebas antes de escribir código, TDD garantiza que los desarrolladores tengan una comprensión clara del comportamiento esperado y la funcionalidad de su código desde el principio”, dice Turner.
Al analizar las pruebas durante el desarrollo de aplicaciones, Ved Sen, jefe de innovación de TCS Reino Unido e Irlanda, dice que los líderes de TI también deberían considerar el impacto ambiental de las pruebas de regresión.
“Cuando ejecutas pruebas de regresión, terminas probando muchas cosas una y otra vez, sólo para ver si el programa falla”, dice. “Pero cada vez que haces una prueba de regresión, estás consumiendo más recursos, y cada uno de ellos genera una pequeña huella de carbono”.
Según Sen, debería ser posible crear formas más inteligentes de realizar pruebas, para que los desarrolladores no tengan que seguir probando el mismo caso de uso una y otra vez.
Sen señala que si los desarrolladores de software evitan realizar pruebas de fuerza bruta, pueden reducir la huella del entorno de desarrollo y pruebas de TI en una cantidad pequeña, pero significativa, lo que acumulativamente equivale a un impacto mayor en hacer que la TI sea más ecológica y menos intensiva en carbono.
Más allá de la codificación, los líderes de TI también pueden abordar el impacto ambiental general del desarrollo de software y los entornos de prueba que requieren sus desarrolladores.
En su intervención en KubeCon + CloudNativeCon en París en marzo, Gualter Barbas Baptista, consultor principal para la habilitación y estrategia de plataformas en Deutsche Bahn, analizó los esfuerzos continuos del operador ferroviario para monitorear y minimizar el impacto ecológico de sus aplicaciones basadas en la nube. Baptista habló sobre el empoderamiento de los desarrolladores y describió a los desarrolladores de software como “efectivamente quienes toman las decisiones cotidianas” en términos de lo que se incluye en el software.
“Si no involucramos a los desarrolladores y les damos las herramientas, no podremos realizar cambios en la forma en que desarrollamos código y en la forma en que administramos la infraestructura”, afirma.
En los últimos años, Deutsche Bahn se ha centrado en hacer converger filiales enteras para hacer cumplir la estandarización. Esto, afirma, significa que “podemos aprovechar los efectos y proporcionar un mayor nivel de estandarización”.
Kubernetes es la herramienta de construcción de plataformas utilizada en Deutsche Bahn. La supervisión permite a los administradores de TI ver la utilización del procesador y ajustar automáticamente las cargas de trabajo del contenedor, optimizándolas según las necesidades de las cargas de trabajo.
La programación también se utiliza para ayudar a Deutsche Bahn a garantizar que los entornos de pruebas y desarrolladores puedan suspenderse cuando los desarrolladores no estén trabajando, lo que ahorra potencia de procesamiento.
IA ecológica
El panorama de TI está en constante evolución, lo que significa que la sostenibilidad de TI es un objetivo en movimiento. En un panel de discusión en el evento KubeCon + CloudNativeCon, Chuck Dubuque, jefe de marketing directo de productos para OpenShift en RedHat, advirtió que la inteligencia artificial (IA) está llevando a Kubernetes a un lugar donde nunca antes había estado.
“Cuando agregas IA a una aplicación, aumentas su uso de energía 10 veces”, dijo.
Al analizar los enfoques para hacer que la IA sea más ecológica, Oliver King-Smith, director ejecutivo de SmartR AI, dice que los investigadores están desarrollando métodos eficientes para crear y utilizar IA, como la reutilización de modelos, ReLora, modelos de Mezcla de Expertos (MoE) y cuantificación.
Al hablar de la reutilización de modelos, King-Smith dice que la técnica implica volver a entrenar un modelo ya entrenado para un nuevo propósito, ahorrando tiempo y energía en comparación con entrenar desde cero. “Este enfoque no sólo conserva recursos, sino que a menudo también da como resultado modelos de mejor rendimiento”, afirma. “Tanto Meta como Mistral han sido buenos lanzando modelos que pueden reutilizarse”.
Al observar ReLora y Lora, King-Smith dice que están diseñados para reducir la cantidad de cálculos necesarios al volver a entrenar modelos para nuevos usos. Esto ahorra energía y permite el uso de computadoras más pequeñas y que consumen menos energía. “Esto significa que, en lugar de depender de sistemas grandes que consumen mucha energía, como el DGX de Nvidia, una tarjeta gráfica modesta a menudo puede ser suficiente para volver a capacitarse”, afirma.
Los modelos MoE, como los lanzados recientemente por Mistral, tienen menos parámetros que los modelos convencionales. Esto, afirma King-Smith, da como resultado menos cálculos y reduce el consumo de energía. “Los modelos MoE sólo activan los bloqueos necesarios cuando están en uso, de forma muy parecida a apagar las luces en habitaciones no utilizadas, lo que lleva a una reducción del 65% en el uso de energía”.
King-Smith describe la cuantificación como una técnica que reduce el tamaño de los modelos de IA. “Al cuantificar un modelo, se reduce el número de bits necesarios para representar cada parámetro. Esto reduce el tamaño del modelo, lo que permite el uso de hardware menos potente y más eficiente energéticamente”, afirma.
Si bien la cuantificación puede tener un pequeño impacto en la precisión del modelo, King-Smith afirma que para muchas aplicaciones prácticas esta compensación no es perceptible.
Abordar la sobrecarga de código y los niveles innecesarios de pruebas de regresión ayuda a que la codificación sea más ecológica. También existen opciones para utilizar microservicios o algoritmos más eficientes. Pero el consenso general entre los expertos de la industria es que es muy difícil cambiar algo a lo que los desarrolladores de software se han acostumbrado.
O’Meara, de Mirantis, ve una oportunidad para abordar la TI ecológica en el desarrollo de software desde la perspectiva de la infraestructura de TI. “Si podemos eliminar la complejidad y ofrecer sólo los componentes de infraestructura de TI que sean necesarios, entonces podremos crear una capa delgada en toda la infraestructura de TI”, afirma.
Kubernetes también se puede utilizar para garantizar que los entornos de prueba y desarrollo de software no utilicen recursos de TI innecesariamente.
Estas técnicas permiten que la infraestructura de TI sea liviana y energéticamente eficiente. Una técnica similar, como señala Kalinowski de Qt, se puede utilizar en la codificación para reducir el número de escenarios diferentes que conducen a excepciones que el código que se está desarrollando debe manejar.