Hay un viejo chiste que decía que la diferencia entre el hardware y el software era que, el primero, con el tiempo tendía a ser más pequeño, rápido y económico, mientras que el software, con el tiempo, tendía a ser más grande, lento y caro.
Este podía ser el inicio de nuestro debate semanal.
El hardware evoluciona a un ritmo muy acelerado, haciendo cumplir desde 1965 la ley de Moore, en la que cada dos años se duplica el número de transistores de un ordenador.
¿Quién podía imaginar que podíamos ver hoy en día una película en color en un aparato reproductor MPEG4, de menos de 100 gramos y que tiene un tamaño inferior a una tarjeta de crédito?. ¿Quién podía imaginar que en apenas 20 años hemos pasado de un ordenador casero de 4 Mhz (Spectrum, Amstrad, MSX...) a uno de con tecnología CORE Duo e incluso de 8 núcleos, de varios gigaherzios?. ¿Quién podía imaginar que podía tener una cámara de fotos y de vídeo de alta resolución dentro de un teléfono que ocupa menos que la palma de la mano?. ¿Quién podía imaginar el almacenamiento de cientos de gibabytes en dispositivos sin elementos mecánicos como una memoria Flash?. ¿Quién podía imaginar tener un ordenador multimedia en la palma de la mano, gracias a las PDA's?. ¿Y unir la tecnología PDA, con la multimedia y la telefonía móvil a través de smartphones?. ¿Quién podía imaginar que una simple consola de mano tiene un procesador con más potencia que un ordenador de sobremesa?. La lista de ingenios hardware es muy extensa, y día a día sigue sorprendiéndonos la aparición de un nuevo gadget, un nuevo producto con más y más funcionalidades. Claramente se ve una evolución en el hardware.
Pero, ¿y qué pasa con el software?. ¿Está evolucionando realmente el software?
Cuando uno hace un repaso, ve que el software parece estancado y poco dado a evolucionar. Hubo una época que pasamos de las pantallas de texto a las gráficas, y que la multimedia empezaba a sacar provecho de un hardware más humano e intuitivo. Pero aquellas ideas florecientes se han quedado estancadas. Acaso se añaden nuevos plug-ins con algún efecto más, o alguna funcionalidad más.
Los sistemas operativos gráficos apenas han evolucionado. El sistema de ventanas sigue ahí desde hace 20 años, con algún efecto que otro, pero sigue siendo el mismo sistema.
Los lenguajes de programación tampoco han evolucionado. Tienden a añadir librerías y frameworks que a veces suponen capas de cebolla innecesarias en muchos casos. A veces usamos tecnologías con frameworks para ir a la última, no porque la aplicación lo necesite. La mayor parte de las veces tienden a engordar innecesariamente los programas, que se ven penalizados por la velocidad y el uso de memoria. Pero eso ya no importa: nos sobra memoria y además es muy barata.
Ya no se realizan algoritmos que exprimen la potencia del lenguaje, haciendo en menos líneas y en menos tiempo, un complicado proceso. No me refiero a algoritmos ya establecidos, como los de ordenación o de búsqueda. No es necesario reinventar la rueda y se pueden reaprovechar librerías que ya lo hacen. Me refiero a la hora de programar procesos, estamos inmersos en la productividad, no en la calidad. Apenas nos detenemos para reutilizar aún más el código creando librerías versátiles, o para crear algún algoritmo que potencie la eficacia de nuestro software.
Los lenguajes de programación, así como los programas, poco han evolucionado. Java causó un furor, cuando lo que hizo fue recopilar lo mejor del C y lo mejor de la programación orientada a objetos, automatizar los procesos de limpieza de memoria y de punteros, y agregarle el uso de un runtime, como hacía el GWBasic y otros lenguajes muy anteriores. La capacidad de reutilización de librerías, ya venía de muy atrás con C y Pascal, por lo que poco se inventó.
Las aplicaciones Web son básicamente aplicaciones de terminal tonto, tal y como se hacían en los albores de Cobol y del RPG, sólo que ahora un navegador web se encarga de pintar las interfaces de usuario, y poder pintar algún gráfico.
Las aplicaciones RIA, como puedan ser las de AJAX o de Flex, vienen a sumarse a lo que ha habido siempre, pero con la posibilidad de crear algún efecto espectacular y de consultar y actualizar información desde el servidor sin necesidad de repintar de nuevo. Pero la esencia sigue siendo la misma.
Cierto es que ha habido algunos framework que han salido victoriosos, tales como CrossFire, Spring o Struts. Pero, analizando estos framework, lo único que han hecho realmente útil es facilitar al programador su trabajo, y que éste se concentre en lo realmente útil para él: ser productivo y despreocuparse del trabajo duro.
Creo, sinceramente, que la evolución debe ser interpretada también como la satisfacción de las necesidades. Conocemos de infinidad de innovaciones que han caído en el olvido precisamente porque las necesidades ya estaban cubiertas y dichas innovaciones, brillantes e ingeniosas, no eran necesarias. Recordemos el caso del sistema Beta de vídeo o de algunas consolas que fueron muy superiores a lo que el público esperaba de ellas.
El hardware evoluciona sin frenos, muy por delante de la evolución del software. Pero, ¿realmente esa evolución está al nivel de satisfacción de las necesidades del consumidor? ¿O está muy por delante de dichas necesidades?.
El usuario medio utiliza su teléfono móvil únicamente para guardar una agenda, llamar, recibir llamadas, escribir y leer mensajes SMS, y, opcionalmente, sacar alguna foto. El resto de funcionalidades apenas son utilizadas, salvo para probarlas y ver que existen y que funcionan. No necesita de un teléfono 3G y aún menos un 4G.
El usuario medio de un ordenador casero, navega por internet, chatea, escribe documentos, descarga películas o música, y se echa alguna que otra partidita con algún juego, no necesariamente novedoso. Es un ordenador de ocio, y para trabajar le sobra con un paquete de oficina medio. No necesita un ordenador de varios núcleos. De hecho, el mercado de segundamano es una opción interesante para un usuario medio.
Por otro lado, asistimos, desde hace tiempo, a una congelación de evolución del software. No aparecen importantes novedades en las características de un programa informático. De hecho, el versionado se extiende en el tiempo (antiguamente había varias versiones por año, y ahora pueden pasar varios años para una nueva versión de un producto), y las diferencias reales van más por la apariencia que por nuevas funcionalidades ingeniosas.
Pero esta involución del software quizá sea realmente una evolución. Quizá haya realmente una madurez en el software, que todo esté ya inventando, y que lo que se hace es mejorar y perfeccionar lo que ya existe, al igual que en el mercado del automóvil. Lejos de la innovación, se asiste a un perfeccionamiento y a una mejora de la calidad de lo que ya existe.
Hace poco, un importante jefe de software de IBM, adujo que el software no ha evolucionado, y que está muy lejos de las últimas novedades del hardware, abriéndose una brecha enorme entre el hardware y el software. Es posible que el software no haya evolucionado con respecto al hardware, pero sí ha evolucionado con respecto a la satisfacción de las necesidades de los usuarios.
Las innovaciones del hardware son buenas y necesarias, y todo lo último sólo satisface a aquellos que se dan el capricho de satisfacer su afán de posición, no sólo sus necesidades. Google, al ser la empresa de mayor calado mundial, podría utilizar supermegaordenadores usando la tecnología de los "petas" (el concepto de Giga ya no existe aquí), con superservidores como el del centro de energía atómica de Francia. Pero Google basa su negocio en una red de ordenadores PC de segunda mano, que satisfacen plenamente sus necesidades y a un coste muy inferior.
¿Y tú?. ¿Crees que hay evolución en hardware o en software?. ¿Crees que si hay una evolución real, ésta es realmente útil?. ¿Conoces casos o tienes experiencias al respecto?. ¿Qué opinión tienes?.
Tu opinión es importante y bienvenida. Los comentarios son moderados, por lo que se omitirán aquellos comentarios con descalificativos a personas, organizaciones o empresas.