> Manuales > Manual de AngularJS

Cómo los frameworks Javascript en general y AngularJS en concreto nos sirven para solucionar las necesidades actuales de la informática, en cuanto a desarrollo multiplataforma de aplicaciones grandes o enormes que se asemejan a las de...

Cómo los frameworks Javascript en general y AngularJS en concreto nos sirven para solucionar las necesidades actuales de la informática, en cuanto a desarrollo multiplataforma de aplicaciones grandes o enormes que se asemejan a las de escritorio.

Con este artículo comenzamos una serie dedicada a AngularJS, el framework Javascript MV* que nos permite un desarrollo rápido y potente de aplicaciones web basadas en Javascript del lado del cliente. AngularJS es un conjunto de librerías apoyadas por Google que tiene un futuro muy prometedor y que en estos momentos se encuentra en boca de todos. No se trata de una moda pasajera, sino de una tecnología que por su utilidad y características ha venido para quedarse.

A lo largo de varios artículos nos iremos introduciendo en este framework, de una manera bastante práctica. Sin embargo vamos a comenzar con una introducción más teórica y retrospectiva que nos haga entender el porqué de la proliferación de frameworks Javascript y el motivo por el que Angular es una apuesta segura entre sus competidores.

Nota: Esta es una transcripción libre de la charla de Alberto Basalo que nos ofreció en abierto en un webinar de DesarrolloWeb.com / EscuelaIT. El título de esta primera parte que ahora te resumimos es "Desarrollo de aplicaciones de negocio y los retos y soluciones de 2014". Al final del artículo podrás ver el vídeo de la charla.

Un poco de historia

"El software sigue al hardware". Esta es una afirmación que nos indica que programamos para aquellas máquinas en las que vamos a ejecutar los programas. Puede resultar obvio, pero como ejemplo se puede señalar que no vamos a programar para las "Google Glass" si aun no las han creado, o si aun no han liberado el SDK. Cuando empezó la informática en los años 60 existían ordenadores arcaicos y como programadores estabas limitado a las posibilidades de éstos.

Conforme avanzó el desarrollo de la informática aparecieron otros ordenadores. Al principio no estaban conectados entre sí ya que no existían las redes locales, ni mucho menos Internet. Como no había redes estabas limitado a lo que ocurría dentro de esa máquina y quizás los programadores tenían una vida más sencilla: estas limitaciones provocaban que no tuvieran que preocuparse por ciertas cosas. Incluso las opciones para crear los programas -tecnologías y lenguajes- no eran demasiadas, al contrario, quizás en tu sistema operativo estabas obligado a trabajar con un lenguaje o un par de ellos nada más.

Luego aparecieron las redes, apareció Internet y los ordenadores comenzaron a conectarse entre sí. Existen servidores y terminales que ya no son tontos, pero estamos trabajando con lenguajes sencillos, como HTML -al principio ni existía CSS- y ya acercándose al final del milenio aparecen lenguajes como Javascript capaces de hacer algunas cosas sencillas.

El reto hoy

Hoy la situación ya no es la que se describe anteriormente, sino que el panorama ha cambiado mucho. Por un lado el abaratamiento de las comunicaciones hace que aparezcan grandes centros de proceso de datos que nos facilitan el acceso a tecnología de primer orden, lo que se llama la nube. Ahora cualquier empresa, incluso las más pequeñas, tienen la posibilidad de acceder a servidores de aplicaciones.

Se ha acabado la "tiranía de Windows": hoy existen varios sistemas operativos y se usan para todo tipo de cosas. Los Mac ya no los usan solamente los diseñadores, los Linux no son terreno exclusivo de los desarrolladores, sino que cualquier persona usa esos sistemas para todo tipo de tareas. Los desarrolladores no pueden centrarse en un único sistema y limitar el servicio a las personas de determinada plataforma.

La cosa no queda ahí, puesto que ya no solo hablamos de ordenadores de escritorio y portátiles, además tenemos la tecnología móvil y los dispositivos como tablets. Yendo todavía un poco más allá tenemos los televisores inteligentes, las Google Glass y al final de todo, el "Internet of Things".

Esta es la foto actual, que es muy distinta a la de las últimas décadas. Tenemos la nube con sus innumerables posibilidades y tenemos una infinita gama de ordenadores y dispositivos a los que atender.

¿En qué programar?

A toda la situación relatada anteriormente le tenemos que sumar una interminable lista de necesidades en el campo de la informática y, por supuesto, tecnologías y lenguajes que nos sirven para resolverlas.

¿Programo para la web o para el escritorio? ¿realizo desarrollo nativo o multiplataforma? La industria te da soluciones y aporta todo tipo de alternativas, Java, .net, Python, RoR, Objective-C y otros más arcaicos como Cobol, pero es inevitable plantearse cuál de ellos es más adecuado para resolver los problemas.

HTML5 + JS

Si quieres realizar un desarrollo que se adapte a todo tipo de sistemas y dispositivos que puedan llegar a aparecer, una solución es buscar algo que sea común a todos los sistemas y buscar algo que tengas seguridad que lo van a entender todos.

Existe un consenso en el mundo de la tecnología de dar soporte a HTML5 y Javascript. La situación actual y la industria nos hace pensar que estos lenguajes estarán disponibles en todo sistema donde circule un bit. Por ello, podemos ver a estas tecnologías de estándares abiertos como un caballo ganador.

Eso sí, HTML5 + Javascript compiten con las soluciones nativas y en términos de rendimiento es muy difícil que puedan llegar a equipararse. El lenguaje nativo, además, siempre tendrá mayor facildad de acceso a las características específicas y funcionalidades del dispositivo.

También compite con los lenguajes más clásicos como C, PHP, Java donde hay ya muchísimo trabajo ya realizado en forma de librerías disponibles para los programadores. Esta situación está cambiando, pero hay que observar que hasta hace poco era complicado hacer grandes programas con Javascript, pues el lenguaje servía para bien poco. Con la llegada de HTML5 y las diversas API se ha extendido mucho y se ha hecho mucho más poderoso, pero todavía faltaba mucho terreno para que Javascript se considerase un lenguaje robusto, capaz de cumplir las necesidades de aplicaciones grandes.

AngularJS y otros frameworks

Recientemente han aparecido una oleada de sistemas que han situado Javascript en otro nivel. AngularJS es uno de ellos, pero están otros muchos como BackboneJS o EmberJS. Son los frameworks que vienen a aportar herramientas y patrones de diseño con los que Javascript se convierte en un lenguaje capaz de servir como motor de aplicaciones enormes.

Y tiene todo el sentido que sea así. Hoy los ordenadores modernos, por muy modestos que sean, son capaces de procesar con velocidad ciertas cosas. Son capaces de recibir simples datos y "cocinarse" ellos mismos el HTML para visualizarlos a base de plantillas. Antes el servidor era el que tenía que enviar el HTML completo al cliente, ahora la tendencia es que solo envíe los datos y que el cliente (navegador o cualquier otro sistema donde desees ver esos datos) sea el que los trate y los muestre debidamente.

Esto ha producido que una parte de la lógica de maquetado y de presentación de la información se haya trasladado del servidor hacia los clientes. La ventaja obvia es que el servidor se ha descargado de trabajo, puesto que simplemente tiene que enviar los datos a través de JSON al cliente y es éste el que se encargará de producir el HTML que sea necesario. Pero no es solo una mejora en relación al servidor en términos de procesamiento, también en términos de bits, porque es más ligero transferir datos simples que el HTML completo para mostrarlos.

En definitiva, el servidor ha repartido la carga de trabajo que solía recaer sobre él entre todos los clientes que se conectan a su servicio. Pero la mejora no se queda solamente en el servidor, sino que el usuario también percibe un mejor desempeño, puesto que las acciones que realiza contra el servidor tienen una respuesta más rápida. Con ello poco a poco las aplicaciones cliente/servidor tienen un desempeño más parecido a las aplicaciones de escritorio. El usuario es el rey y demanda aplicaciones que sean rápidas y no le hagan esperar y eso se lo dan los frameworks como AngularJS.

Al programador además le facilitan las cosas, no solo por disponer de un conjunto de librerías, sino porque los frameworks nos traen un conjunto de paradigmas y patrones que facilitan el desarrollo del software y sobre todo su mantenimiento. Nos referimos principalmente al llamado MVC, que es la separación del código en diferentes responsabilidades. Ahora cada parte del código debemos situarlo en un lugar determinado, y ese orden nos facilita que los desarrollos sean más manejables. Sobre todo esa mejora permite que en un futuro puedas "meter mano" al software para mantenerlo cuando sea necesario. Todo redunda en la calidad del código, lo que es indispensable para los proyectos y los programadores.

Potente, sencillo y extensible

Además hay un ecosistema de herramientas alrededor de los frameworks y no solo aquellas que están incorporadas en las librerías del propio AngularJS o cualquiera de sus competidores, sino una serie de servicios web y librerías de terceros que nos facilitan una enorme gama de objetivos.

Por poner dos ejemplos tenemos Apache Cordova, que es una librería para servir de puente a HTML5/JS hacia las características y funcionalidades de los dispositivos móviles. O sistemas como AngularFire que es un "backend as a service", que permite crear tu propia API y que ellos se ocupen de crear todos los sistemas para la persistencia de la información y la entrega de los JSON.

AngularJS mejora el HTML para crear aplicaciones web

AngularJS y otros frameworks tienen además la característica de mejorar el HTML existente, facilitando el desarrollo de aplicaciones. En este punto cabe recalcar la palabra "aplicaciones" puesto que este tipo de herramientas son adecuadas para realizar las llamadas "aplicaciones de gestión" o "aplicaciones de negocio".

Es importante esta mención porque AngularJS no es adecuado para resolver todo tipo de proyectos, o al menos no te facilitará especialmente ciertos desarrollos. Incluso por sus características habrá necesidades que ni siquiera sea adecuadas realizar en HTML5, como posiblemente un videojuego con gráficos avanzados, donde sería más adecuado una aplicación nativa (aunque esto en el futuro pueda cambiar).

Otro ejemplo es la realización de una aplicación intensiva de SEO. En cuanto a posicionamiento orgánico en buscadores el desarrollo con AngularJS, u otros frameworks Javascript, no es muy interesante porque el HTML que reciben los clientes -o los bots del motor de búsqueda- está prácticamente vacío de contenido y solo se rellena a posteriori por medio de solicitudes Ajax. Parece que Google está haciendo esfuerzos para que esta situación cambie y existen diversas soluciones a nivel de programación que pueden paliar en parte la carencia de SEO, pero lo cierto es que el desarrollo de la aplicación se complica al aplicarlas.

En fin, AngularJS nos ofrece muchas facilidades para hacer aplicaciones web, aplicaciones de gestión o de negocio, aplicaciones que funcionan en dispositivos y que tienen un rendimiento muy similar a las nativas e incluso aplicaciones de escritorio con un frontal web, cada vez más habituales.

Por qué Angular JS y no otros frameworks

En este sentido podría haber mucho que discutir entre partidarios de uno y otro framework, pero si dejamos a un lado las preferencias personales de cada uno, por aquella tecnología en la que haya apostado en el pasado, AngularJS es objetivamente mejor en muchos sentidos.

Primero y más importante es que con AngularJS requieres escribir menos código que con otros frameworks. Por ejemplo con respecto a BackboneJS hay muchas mejoras que son realmente críticas como el "doble bindign" que te permite que los distintos componentes de tu aplicación estén al tanto de los cambios para modificar su estado automáticamente, sin necesidad de suscribirse a eventos y realizar otro tipo de acciones por medio de líneas de código. En este sentido hay tests objetivos que nos permiten ver que la misma aplicación hecha con AngularJS tiene sensiblemente menos código que en BackboneJS y quizás con otros frameworks pase lo mismo.

Segundo la comunidad. AngularJS tiene el apoyo de Google y una gran comunidad detrás. Las búsquedas de AngularJS se han disparado mientras que las de otros frameworks no han mejorado o han caído. Esto quiere decir en definitiva que encontrarás más documentación y más componentes de otros desarrolladores para basar tu trabajo en ellos.

Hasta aquí el primer artículo de AngularJS, que ha sido un tanto general. Solo esperamos que te hayas quedado con ganas de más. En el siguiente post te explicaremos qué es AngularJS.

A continuación encuentras la charla que ha servido de base para escribir este artículo, de Alberto Basalo. Muy entretenida e interesante, capaz de abrirnos la mente y motivarnos a aprender AngularJS.

Alberto Basalo

Alberto Basalo es experto en Angular y otras tecnologías basadas en Javascript,...

Manual