“Lo pequeño es hermoso” es el título de un
libro publicado en 1973 por F Schumacher.
Su nombre completo es “Lo pequeño es
hermoso: Economía como si la gente importara”
y defiende el uso adecuado de los recursos, procurando utilizar
opciones sencillas y recursos lo más limitados posibles.
Este
criterio, que siempre ha sido válido, se hace cada vez más
necesario en el mundo de la tecnología. Parafraseando el título,
podría decirse “Lo pequeño es
hermoso: TECNOLOGÍA como si la gente importara”.
Si observamos la tecnología que utilizamos
habitualmente, veremos que las páginas Web aumentan cada año su
tamaño (peso) medio ( http://httparchive.org/index.php
), de forma que aunque las comunicaciones han mejorado mucho y el
ancho de banda disponible para descargar una página se ha
multiplicado por 1000 en 20 años, el tiempo de espera en algunos
casos es el mismo que cuando se utilizaba un modem a 33k.
Algo equivalente puede decirse de las
aplicaciones. La mayoría de los móviles actuales, y desde luego
cualquier ordenador, tiene mucha más potencia, memoria y velocidad
que ordenadores de hace 20 o 30 años (recordemos que una memoria RAM
de 4 megas y un disco de 200 Megas eran “un buen equipo”, por no
hablar del PC inicial, con 640K y un disco de 10M). Sin embargo,
muchas aplicaciones que utilizamos no parece que vayan mucho más
rápidas que hace años, e incluso algunas van más lentas
claramente. Además, muchas tienen unos tamaños “monstruosos”
para lo (poco) que hacen.
En algunos casos se puede decir que las
aplicaciones modernas “hacen más” (se revisa la ortografía y
gramática en tiempo real, se presentan gráficos de diverso tipo, se
ubica la posición y se hacen cálculos en base a la misma, etc.)
pero no tanto para justificar esos rendimientos.
Creo que hay varios motivos que
podemos agrupar en personales y tecnológicos:
Personales:
Uno importante sería la despreocupación de
algunos desarrolladores (“ahora los equipos son rápidos”, “hay
memoria suficiente”, “Todo el mundo tiene mucho ancho de banda”),
que provoca que no se intente optimizar el código, ahorrar memoria o
ahorrar ancho de banda.
A ello se une la falta de programadores con
experiencia, que es otro factor importante. Programadores veteranos
que han aprendido trabajando con ordenadores y herramientas con pocos
recursos se han acostumbrado a optimizar y ser ahorradores y tienden
a diseñar los programas de forma “austera”.
Si
a eso se añade la necesidad de cumplir los plazos y las
especificaciones, no de cumplirlas “óptimamente”, se comprende
que en muchos casos la eficiencia queda en último lugar.
Tecnológicos:
Muchos de los lenguajes de programación se
“encargan de gestionar la memoria” (como ocurre con java) un
desarrollador, aunque sepa con total seguridad que ya no necesita un
elemento, no puede borrarlo y debe esperar a que “se borre cuando
se pueda”. No bastante creo que el
principal motivo son la “herramientas de
ayuda al desarrollo”, entre las que podríamos incluir el uso de
diversas librerías, framework de desarrollo y herramientas para
generación de código. Dado que los lenguajes y herramientas de
programación no incluyen todas las funciones posibles para todas las
necesidades, se suele acudir a librerías de funciones
que contiene diversas funciones (manejo de sonido, imágenes,
cálculo, gráficos, etc.) que permiten realizar operaciones sin
tener que desarrollar desde cero ese código. El problema es que en
muchos casos, el utilizar unas pocas funciones implica arrastrar toda
la librería de funciones completa. Es decir, necesitamos, por ejemplo convertir una imagen de formato, o recortarla, pero las librerías incluyen funciones para todos los formatos, para girar, recortar, alterar el color, etc.
Con los framework de desarrollo, que a diferencia de las librerías no ofrecen conjuntos de
funciones sino esqueletos de desarrollo sobre los que se encaja
nuestro proyecto, pasa algo similar. Están planteados para un modelo
de trabajo con una serie de relaciones y comportamientos, de los
cuales es posible que muchos elementos sobren para el programa que se desea
desarrollar. De nuevo se arrastra una enorme estructura y cimientos
planteados para un edificio de 5 plantas cuando lo que se desea una
casa unifamiliar (o quizá una casa de 5 plantas pero con otra
distribución).
Por último, hay muchas herramientas que para
facilitar la vida, permiten generar código fuente. pero ese generación, aunque cómoda,
al ser genérica no siempre suele ser demasiado eficaz, con lo que
se gana en velocidad de desarrollo (y en ocasiones en calidad y
normalización) no se gana (o se pierde) en eficiencia.
El resultado es que con bastante frecuencia
tenemos una gran cantidad de programas de dimensiones desmesuradas,
peleando por los recursos y consumiéndolos inútilmente. Al igual
que ocurre con la contaminación, la emisión de un coche no es
demasiado significativa, la de miles, sí. Y todos sufrimos ese
exceso de consumo de recursos sufriendo programas lentos y enormes. La memoria, o el ancho de banda de comunicaciones, al igual que los recursos naturales, no son infinitos y es mejor usarlos razonablemente.
Los anglosajones utilizan la expresión “Keep It Simple, Stupid” (K.I.S.S.: "Mantenlo simple, estúpido")
también expresada como : “Keep It Short and Simple” ("Mantenlo
corto y simple") o “Keep It Simple and Safe” ("Mantenlo simple y
seguro") que puede considerarse una especie de Navaja de Occam, pero aplicada, no al análisis o interpretación, sino al diseño y
construcción.
Ejemplos prácticos:
Habrá quien piense que esto es algo teórico y
que un programa “serio” necesariamente es grande y complejo. Para
demostrar que es posible voy a citar algunos ejemplos:
-
Base de datos: HSQLDB es un gestor de base de datos Open Source que además de cumplir todos los requerimientos de una BBDD relacional y ser extremadamente rápida (http://www.h2database.com/html/performance.html), incluye las siguientes funciones:
-
java puro que funciona en cualquier sistema operativo
-
Emula funciones y sintaxis de otras bases de datos
-
Puede trabajar como base de datos en memoria
-
Puede configurarse para trabajar de modo portable
- Un fichero jar de 1,5 M incluye el servidor de BBDD, el cliente JDBC y un interfaz de usuario gráfico.
-
-
-
Motor de indexación por texto completo: El proyecto Open Source Lucene es el motor de indexación y búsqueda por texto completo más utilizado en el mundo, tanto directamente como a través de recubrimientos como Solr o ElasticSearch. Su núcleo, que permite indexar y buscar, ocupa solo 5M.
-
Gestor Documental: OpenProdoc es un gestor documental Open Source completo que incluye todas las funciones de cualquier gestor documental, junto con un gestor de tesauros. Dispone de una versión portable, que gracias al uso de las tres herramientas antes citadas, así como a seguir el principio KISS, ocupa 80M completo, lo que para un gestor documental, teniendo en cuenta que incluye servidor de BBDD, servidor de aplicaciones más el propio Gestor, es poco comparado con algunos clientes de gestor documental que ocupan 700M, o instalaciones de servidor de 1G
-
-
Calculadora científica
-
Linterna
-
Conversor de unidades,
-
Temporizador/cuenta atrás
-
Cronómetro multi-vueltas
-
Brújula
-
Nivel
-
Lupa
-
Espejo
-
Regla (cm/pulgadas)
-
-
Gestión de imágenes: El programa Irfanview en solo 2M incluye visualización de prácticamente todos los formatos de imágenes existentes, conversión de formatos, manipulación completa de imágenes (profundidad de color, resolución, filtros, etc.), procesos de conversión en lotes, creación de miniaturas, etc.
Colibrí Mdf [GFDL (http://www.gnu.org/copyleft/fdl.html) CC-BY-SA-3.0 |
La conclusión es que “sí se puede”, por
tanto creo que es importante que como usuarios o como desarrolladores
o diseñadores sigamos el principio de : “Lo
pequeño es hermoso: TECNOLOGÍA como si la gente importara” a la hora de crear herramientas o de utilizarlas. El "medio ambiente tecnológico" y nuestro paciencia o nervios lo agradecerán.
No hay comentarios:
Publicar un comentario