Eficiencia Informática, software inflado y Ley de Wirth
Esto es una de esas cosas de la Informática que nunca entenderé:
Ley de Wirth
La Ley de Wirth podría considerarse tanto una parodia de la ley de Moore, como una descripción dura pero muy acertada de la realidad informática:
El software se ralentiza más deprisa de lo que se acelera el hardware.
O sea que los programas en sus versiones más nuevas hacen que tu compu recién comprada ande peor que la anterior con los programas viejos. A veces cuando veo que en mi compu un programa tarda unos segundos más de lo que quisiera en hacer lo que le pido, no puedo evitar pensar en esto. «Esta mierda tarda más que mi vieja PC con Windows 98». Y me gustaría saber qué cosas tiene de más (que no significa necesariamente mejor) este Firefox 5 que el 1 no tenía, o qué tendrá el messenger live que el messenger de hace 10 años no tenía. Miro el explorador de carpetas tardar en abrirse y pienso «esto debería ser instantáneo» después de 15 años de sistemas windows. El Sistema Operativo tendría que bootear en 5 segundos, no en 55 (y encima cuando decimos que tarda «sólo» 55 segundos, lo decimos como si fuera la gran maravilla).
Me pregunto cuánto tardará en bootear un windows 98 instalado en una computadora de hoy día. Obvio que tiene mucho menos MB que «levantar», pero también es cierto que seguramente no está optimizado para aprovechar el hardware actual.
Reconozco que hay partes de ese código agregado a través de los años, que son mejoras. Me viene a la mente el ejemplo de las mejoras de seguridad. Pero también pienso en esas capas tras capas tras capas de boludeces que pueden llegar a tener algunos programas. Pienso en ese explorador de carpetas de windows 7 que realmente no hace gran cosa en comparación con el explorador de windows 98; con la diferencia de procesador y de ram, debería a esta altura poder leerme la mente y abrir instantáneamente los archivos que quiero, tenes 200 opciones de ordenamiento y visualización y cosas así. A veces miro este botón «Enviar» que tiene un degradé en color, puntas redondeadas, «efecto glow»… sombra esfumada!!! y pienso que preferiría un simple rectángulo blanco con borde linear negro, si eso hace que no tarde ni consuma tanto.
Software Inflado
Este fenómeno se conoce como bloatware o «software inflado«, y si justo ahora están pensando en Nero o iTunes tienen razón. La culpa es, como no, del Marketing (cosa odio con toda mi alma, y que algún día les contaré por qué). La idea de las empresas de software de que sí o sí cada tanto deben sacar una nueva versión de su programa, y si no tiene mejoras apreciables, no importa. O se inventa cosas, o se agregan cosas inútiles o simplemente se le da una lavada de cara. Se le agrega funcionalidad innecesaria, El resultado es que el programa, para hacer lo mismo de siempre, ocupa más RAM, más procesador y más espacio en disco. El problema ya comienza a la hora de programar, pues justamente los programas de desarrollo de sofware sufren este defecto y lo traspasan a cualquier software que programes usándolos. «Hagamos que el lenguaje sea interpretado en vez de compilado, total… tenemos ram y procesador de sobra». «Hagamos que este objeto herede de un enorme árbol de objetos anteriores, aunque no comparta casi nada de sus procedimientos.»
Luego los programadores hacen lo mismo, y así, hay casos absurdos como el Open Office, que en la práctica evitás tener que abrirlo para redactar documentos pequeños porque te aburrís de esperar a que abra. O programas que se supone que deberían hacer una sola cosa (grabar un CD) pero que vienen llenos de «features» indeseables.
Pero esto también ocurre en otros ámbitos de la informática. Una vez hablando con un amigo, se quejaba de que las baterías de notebooks duraran apenas unas horas. «Ojalá inventaran una batería que dure 30 días». Y yo le contesté «Si la inventaran, inmediatamente harían unas notebooks con tantas porquerías agregadas que consumiría toda esa energía de 30 días en 5 horas».
Y en todos los aspectos es así la informática, me asombra lo ineficiente que se ha vuelto con los años. Encontrás ejemplos en todos lados. Conozco muchas páginas web que cambian una o dos veces por día como mucho, pero están hechas con complejos CMS, sin sistema de cacheo de páginas, que usan quién sabe cuántos objetos en php y cuántas llamadas sql y cosas en javascript, para mostrar la misma página una y otra vez. O que en vez de usar un programa de correo electrónico, usamos un programa navegador web, para usar adentro un programa web de correo electrónico. Y ni hablar de la tendencia de los nuevos sistemas operativos a hacer que ciertas partes en vez de programas ejecutables sean, pequeñas aplicaciones web corriendo en pequeños intérpretes de html5 y javascript. Es que ya el concepto de página web es un uso ineficiente de la informática. Piensenlo, están en una página web cualquiera, por ejemplo, este mismo blog, y quieren pasar a la siguiente página para leer los siguientes artículos, y ¿qué viaja desde mi servidor hasta sus computadoras? ¿El texto del nuevo artículo? ¡No! Viaja la página entera, el código HTML entero de la nueva página, que es exactamente igual a la anterior, salvo por el texto del nuevo artículo. No viaja sólo la información, viaja toda la página, salvo alguna imagen o pequeña cosita que está en tu caché. (creo que ni en sitios que hacen uso intensivo de ajax como Gmail te salvás de esto). ¡Un desperdicio!
¿Cómo se soluciona?
Por ahora, mientras la informática no vuelva a necesitar priorizar la eficiencia como en sus orígenes de pocos recursos, la única que te queda es comprar más RAM. Luego, con mejores diseños de software compilado. Con software que haga una sola cosa y bien. Con sistemas de plugins que te permitan elegir qué funcionalidad extra querés tener disponible y cuál no. Incluso filtrando esas características extras en el momento de compilar el software. Manejando sistemas de cacheo. Y por qué no, cambiando de paradigma.