martes, 23 de febrero de 2010

Evolución de los desarrollos de software

La ingeniería informática, a pesar de ser joven (en comparación con las ingenierías más clásicas), es la que más cambios ha sufrido, sabiéndose adaptar a los tiempos y a las necesidades. Hoy en día disfrutamos de un vergel de tecnologías, y aparecen nuevos e interesantes conceptos.

Recuerdo cuando comencé a programar en Basic y en Ensamblador, a principios de los años 80. Eran lenguajes secuenciales, no estructurados. Antes existían otros lenguajes más concretos y especializados, como Cobol, RPG o Fortan, que vivieron décadas de expansión y aplicación. También estaba el C y el Pascal, lenguajes estructurados de uso general, que aún hoy se siguen aplicando y que sirvieron como base de los lenguajes actuales. Con la programación orientada a objetos se produjo un hito en cuanto a los conceptos de la programación, a cómo organizar y entender el código. Este hito se popularizó con C++, y más adelante con Java, lenguaje que también marcó un hito gracias a Internet, y a que supo captar lo mejor de algunos lenguajes de programación (especialmente C++), agregando facilidades como el garbage collector, el bytecode o el poder prescindir de los punteros. Estos conceptos fueron adoptados por otros lenguajes de programación, como C#. Sobre esa época volvieron a evolucionar los scripts, especialmente para Internet, y en el desarrollo dinámico de páginas web, como JavaScript, PHP, etc. Otro hito importante lo marcó Flash, donde evolucionó los applets de Java (que quedaron en una buena idea), agregando rapidez, dinamismo y experiencia de usuario a un navegador. Gracias a Flash, hoy evolucionan las RIA's y surgen nuevos lenguajes de programación orientados a interfaces ricas. Por otro lado, de forma muy discreta y casi anónima, está la programación funcional, con lenguajes como Miranda, Haskell, Lisp, Erlang...

En cuanto a código, recordemos que al principio se codificaba con hojas perforadas, que contenía los códigos en binario. Después, RPG empezó con hojas de codificación, compuesta por columnas y códigos específicos. Cobol agregó más alto nivel a la codificación, pero seguía cercano a la máquina. Basic se codificaba con líneas numeradas. C contenía bloques de llaves que englobaban funciones, sentencias condicionales o bucles. En la actualidad, el código está basado principalmente en declaraciones con tags en XML, apoyado por detrás con código tradicional, tal y como usa Flex (con MXML y ActionScript) o Visual Studio (con Windows Presentation Foundation y VB, C#, ASP.NET). Algunos lenguajes experimentales fueron usados para evitar escribir código, organizando todo por árboles y flujos, y se parametrizaban con cajas de diálogo. Recuerdo que en NCR se desarrolló un lenguaje específico así para el desarrollo de cajeros automáticos. Si bien es buena idea, su gestión, su entendimiento y mantenimiento podrían ser un poco complicados y tediosos.

La evolución de la programación también ha tenido connotaciones de ingeniería orientada a la escalabilidad. Al principio, los programas estaban en un único fichero, y eran completamente secuenciales. Luego los condicionales y los bucles añadieron inteligencia y automatización de procesos repetitivos. Las funciones y las librerías añadieron el concepto de "divide y vencerás", de forma que se pueden crear procesos complejos y repetitivos, que pueden ser invocados cuando se necesitan. después llegaron los componentes, que permitían crear aplicaciones a modo de Lego, despreocupándonos de los detalles de los mismos. Después llegaron los frameworks, que ampliaban las funcionalidades de un desarrollo, y que permitían a los desarrolladores economizar código, ser más productivos y agregar calidad en la parte especializada del framework. Después se avanzó a los servicios Web, permitiendo a las aplicaciones ejecutar remotamente procesos y programas.

Pero el software y la programación no han evolucionado porque sí. Ha habido factores que han permitido generar nuevos conceptos y lenguajes, así como la evolución de los existentes. Uno de ellos ha sido las bases de datos como repositorios de información, ya que en el inicio se desarrollaba en ficheros que se mantenían desde código. Luego aparecieron las primeras bases de datos (qué recuerdos me trae dBASE y Clipper), que luego evolucionaron para ser relacionales (Oracle, Informix, Sybase, SQLServer), que añadieron SQL como un estándar para hacer consultas, o los triggers y los procedimientos almacenados. Desde hace unos años, no hay importantes revoluciones en las bases de datos relacionales, que han permanecido en su concepto, y que han mejorado en cuanto a velocidad o en añadir capas, como tablespaces o esquemas, o el concepto de alta disponibilidad. En la actualidad están apareciendo bases de datos no relacionales (MongoDB, CouchDB, Voldemort, Cassandra, Hypertable...), principalmente orientadas a documento y a absorber ingentes cantidades de datos y procesarlas en tiempos irrisorios. Este tipo de bases de datos están implantándose principalmente en grandes desarrollos Web, como las de Google o Facebook.

Otro factor importante ha sido la evolución del hardware, que ha ido multiplicando su velocidad y sus capacidades. Así, el aumento de la memoria y los dispositivos de almacenamiento, han permitido el crecimiento de las aplicaciones y de la cantidad de datos y funcionalidades a soportar, así como la velocidad de acceso. El aumento de velocidad de los microprocesadores, permiten desarrollar aplicaciones más rápidas y más complejas. El aumento de la velocidad y la potencia de las tarjetas gráficas, han permitido pasar de pantallas monocromo y de texto a pantallas con mayor resolución que un TV de alta de definición, y a gestionar fotografías y vídeos.

Uno de los factores más determinantes en esta evolución ha sido Internet y su creciente popularidad. Al principio eran simples textos o documentos almacenados. Luego HTML permitió publicar documentos con formato. Los navegadores permitieron añadir algo de funcionalidad a las páginas gracias a los scripts. Java permitió añadir más posibilidades de interfaz gracias a los applets. Y con las RIA's, la comunicación asíncrona de datos entre servidor y cliente permite que un navegador ejecute aplicaciones como si de una aplicación de escritorio se tratase. Asmismo, las RIA's añaden elementos de interfaz de usuario que enriquece la experiencia gracias a efectos, a elementos multimedia, a la interacción usuario-ordenador, eventos, etc. Ahora podemos desarrollar en dispositivos móviles (teléfonos, smartphones, PDA's), e incluso hay dispositivos de todo tipo con su API correspondiente.

¿Y qué no decir del software libre? El software ha sido un bien de lujo en sus inicios. Tan sólo grandes multinacionales y bancos podían acceder a él, y poder beneficiarse de sus servicios. También podían utilizarlos pocas personas, generalmente ingenieros con poder adquisitivo y/o con buenos amigos. En su crecimiento, se ha ido socializando con todas las clases, tanto ricas como pobres, así como en todos los países y culturas. Las licencias y las patentes han sido (y siguen siendo) una lacra para la penetración del software. El software libre, comenzó como una loca idea de algún gurú (como Richard Stallman), y poco a poco fue expandiéndose como una cultura universal. Gracias al software libre, se han creado desarrollos para fines inimaginables, donde millones de programadores del mundo han contribuido con su granito de arena y mejorando la calidad del mismo, lo que ha permitido abaratar de forma importante el software y así hacerlo accesible para todo el mundo. Gracias al software libre podemos tener un sistema operativo por el que no hay que pagar licencias (como Linux, BSD, Android....) y abaratar el coste de un equipo informático, o utilzar bases de datos con un coste mínimo (como PostgreSQL o Firebird), o utilizar aplicaciones ofimáticas sin licencias (con OpenOffice, AbiWord o gNumeric), o incluso retocar imágenes (con Gimp), o para cualquier cosa que podamos imaginar. Las Pymes ya disponen de software que pueden usar sin desembolsar mucho dinero.

Otro factor importantísimo ha sido la oportunidad y la visión, gracias a lo cual es posible desarrollar aplicaciones para sectores inimaginables. En un principio estaba enfocado a la investigación, luego a los gigantes financieros, especialmente contabilidad e informes. Después se ha ido, poco a poco, implantando en nichos cada vez más detallistas y nuevos, hasta llegar los hogares. Esto también ha propiciado la creación de tecnologías que después han sido útiles para integrarlos otros desarrollos, como los workflows (flujos de trabajo), los BPM (Business Process Management), los gestores documentales, la firma electrónica, directorios activos, etc.

¿Cuáles son los siguientes pasos en esta fantástica historia de la programación?. Habrá que seguir de cerca la evolución de Inernet. Ahora estamos viendo el crecimiento de la Web 2.0, donde las aplicaciones son sociales, y en donde cualquier usuario puede conectarse y colaborar. ¿Cómo puede esto ayudarnos en una empresa? Bueno, no es raro encontrar empresas que utilizan Blogs para publicar noticias y conocer los comentarios de sus clientes, o su propio espacio en Facebook o en Linkedin. Es otra forma de hacer negocios, y estas ideas nos podrían despertar otras aplicaciones, haciendo partícipes a los clientes y empleados. La Web 3.0 será el siguiente paso, y consistirá en añadir semántica a Internet. Sobre esto aparecerán nuevas e interesantes ideas.

Las RIA's están tomando un importante papel en este escenario. Los usuarios han estado mucho tiempo olvidados, y han tenido que aprender a utilizar interfaces creadas por informáticos para informáticos. Los creativos asumirán un papel importante en este mundo, creando interfaces intuitivas, fáciles y sorprendentes. ¿Os imagináis la diferencia entre usar una página web de una aplicación de gestión y usar cualquier aplicación desde un iPhone? Al usuario le parece mucho más agradable y sencillo usar la del iPhone. Tendrá mucho más éxito de negocio una tienda virtual en la que todo es atractivo, rápido y sencillo, que una página web tradicional.

El CloudComputing será un referente muy a tener en cuenta, si el modelo de negocio se basa en el uso de aplicaciones Web. Esta tecnología permite a los usuarios utilizar aplicaciones en cualquier parte (algo así como Google Docs). A las empresas les supone un ahorro muy importante de servidores, de recursos manteniendo los sistemas y los programas. Tan sólo necesita conectarse y usarlo.

Las bases de datos relacionales seguirán siendo usadas, y las no relacionales irán ocupando un nicho específico, el cual irá ganando más importancia y relevancia.

El software libre será clave para la reducción de costes de los proyectos. No creo que exista un mundo con software totalmente libre, ni tampoco totalmente propietario. En la actualidad, empresas como Microsoft u Oracle, están apoyando las iniciativas de software libre, ya que la contribución altruista de desarrolladores permiten crear nuevos productos a un menor coste, y así ser competitivos. Casi el 70% del software libre que existe está promocionado y pagado por empresas que creen y están convencidas por este movimiento. El resto es la contribución altruista de desarrolladores. El software libre se está convirtiendo en un modelo competitivo para generar negocio y ganar presencia en el mercado. Asimismo, las empresas que innoven con tecnologías nuevas, es muy posible que patenten o licencien estas tecnologías, para aprovecharse de la escasez y de la exclusividad durante algunos años, y en cuanto empiecen a tener competidores serios, liberarán dichas tecnologías para aprovecharse el movimiento.

Los dispositivos móviles serán productos más que cotidianos. Actualmente tienen una gran penetración en nuestras vidas, pero evolucionarán convergiendo sinergias. El iPad ha iniciado esa senda, concentrando en un dispositivo un ordenador portátil, un eBook, un reproductor de vídeo, de MP3, de fotos y teléfono. Android ha iniciado una revolución en cuanto a sistema operativo e interfaz de estos dispositivos, abaratando mucho el producto final. Creo que habrá un dispositivo que haga todo y no ocupe mucho, y cuyo precio final sea un gran atractivo. El que pueda ser un ordenador donde se puedan instalar todo tipo de gadgets, plugins y aplicaciones será determinante.

Tras este repaso a los desarrollos software, el vaticinio de nuevas y excitantes tecnologías será una realidad en breve. Ante estas oportunidades, no queda si no actualizarse y vivirlas.