1ª actualización: septiembre de 2015.
2ª actualización: oct de 2016.
AngularJS es quizá el framework más popular para el desarrollo de aplicaciones de lado cliente con JavaScript. Es gratuito y Open Source, y está creado y mantenido por Google. Y este último es, precisamente, uno de los motivos que más ha contribuido a su popularidad: al estar detrás el gigante de las búsquedas se asume que habrá predictibilidad y soporte.
En los últimos años habían surgido infinidad de frameworks MVC (basados más o menos estrictamente en el patrón Modelo-Vista-Controlador) para crear aplicaciones web de tipo SPA con JavaScript. Todos ellos son de código abierto, gratuitos y en muchos casos verdaderamente potentes. Apostar por uno de ellos en concreto es una decisión difícil. Ten en cuenta que si necesitas invertir tiempo en aprender el escogido, desarrollar tus aplicaciones con él y mantenerlas en el futuro, debes elegir una opción que te asegure una trayectoria futura predecible y estable. Si de repente se deja de mantener, no se actualiza o cambia tanto que no puedes adaptarte, tienes un problema grave si has creado aplicaciones grandes con él (esta tira de CommitStrip.com lo ilustra muy bien).
Por eso el hecho de que AngularJS estuviese creado y mantenido por Google era como un faro en el horizonte. Lo que mucha gente pensó fue que Angular era la respuesta a todas sus dudas: una plataforma potente, gratuita y mantenida en constante evolución por una de las mayores empresas de Internet. Un sueño hecho realidad. Y de repente AngularJS estaba en todas partes.
Actualmente está ya en su versión 1.5.x y se usa en multitud de aplicaciones reales en todo el mundo. Es decir, es una plataforma estable y probada. Mucha gente la ha definido como "lo que debería haber sido HTML si se hubiese diseñado para crear aplicaciones". Casi nada...
Y de repente... un extraño
Pocos factores podrían empañar el éxito rotundo que es AngularJS. Una de estas pocas cosas es amenazar esa supuesta estabilidad de la plataforma y que, de repente, el futuro no parezca tan claro...
Y eso es precisamente lo que hizo el equipo de Angular e noviembre de 2014. Durante una sesión en la conferencia europea de AngularJS (ng-Europe) dos desarrolladores del equipo, Igor Minar y Tobias Bosch, dejaron caer la bomba: el equipo estaba preparando AngularJS 2.0 y esta nueva versión sería incompatible hacia atrás y no habría una ruta de migración desde 1.x.
Esta nueva versión dinamitará 4 de los 5 pilares del actual AngularJS, no soportará navegadores relativamente recientes (como Internet Explorer 10 por ejemplo, solo la 11), define un nuevo lenguaje de programación por encima de JavaScript (AtScript, inspirado en TypeScript y que luego compila a Dart y a JavaScript TypeScript de Microsoft)...
En realidad Angular 2 no es una nueva versión: es un nuevo framework construido desde cero.
Este anuncio produjo un efecto Osborne de manual. Internet ardió en comentarios, la mayoría de ira. En este asunto no hay término medio: o te encanta la idea o la odias. Y mi sensación es que la mayor parte de la gente repudió la idea precisamente porque va en contra de todo lo que AngularJS representaba: una plataforma estable y de futuro que podías aprender y usar durante años sin preocuparte. Hay quien opina todo lo contrario.
Lo cierto es que la reacción más generalizada fué la de "F*ck Angular!", ahora nos pasaremos a a cualquier otro framework diferente. Y es que si eres un programador con un trabajo real, en el que el mantenimiento y la compatibilidad hacia atrás de las aplicaciones son importantes, un cambio como este te echa tus principios abajo.
La importancia de comunicar bien
Te presento a Rob Eisenberg. Rob es muy conocido porque fue uno de los creadores de Durandal.js, otro framework similar a AngularJS que también tiene mucha aceptación. En abril de 2014 el equipo de AngularJS anunció que Rob dejaba Durandal y se incorporaba a Google para trabajar con ellos en el proyecto. Todo un fichaje. La idea era traer lo mejor de Durandal a Angular y que todavía quedaran menos dudas acerca de cuál era la plataforma preponderante.
Tras varios meses de trabajo, y después del anuncio en ng-Europe, Rob publicó en su influyente blog un artículo sobre AngularJS 2.0 (muy interesante lectura) en el que explicaba con bastante detalle las nuevas funcionalidades que se estaban gestando para Angular 2.0. Además también daba algunas opiniones personales al respecto. A pesar de que el post era muy correcto, se podía intuir que Rob no estaba del todo contento con algunas de las implementaciones. De hecho, 11 días después anunció que abandonaba Angular y regresaba a Durandal.
Bien, hace solo un par de semanas Rob anunció el nuevo framework que está construyendo Durandal: Aurelia.
Aurelia podría considerarse como "Durandal 2.0". Es un nuevo framework creado por la misma gente que Durandal pero tratando de implementar las nuevas ideas y conceptos que sus creadores tenían en la cabeza para mejorar lo existente. O sea, lo mismo que pretendía AngularJS 2.0 pero con las ideas de otra gente. Si tienes interés nuestro tutor Eduard Tomás ha escrito un post presentando Aurelia con algunos ejemplos.
Lo que han hecho en Durandal es lo mismo que han hecho en Google, pero lo han comunicado muchísimo mejor
Fíjate que en lugar de hablar de un hipotético "Durandal 2.0" y tratar de vendértelo como una versión muy mejorada -pero incompatible- del framework actual, han hablado de un nuevo producto, Aurelia, y de cómo ambos van a coexistir durante varios años.
Ahora imagina por un momento que Google en lugar de anunciar AngularJS 2.0 hubiese anunciado "CircularJS 1.0", y que te hubiese dicho que a partir de ahora tendrás Angular y Circular, y que ambos van a coexistir durante varios años y serán soportados y actualizados por la empresa. Con esto las cosas hubiesen cambiado radicalmente, y la recepción por parte del público hubiera sido mucho mejor ¿no crees?.
De ahí la importancia de comunicar bien. En mi opinión el equipo de Angular debería haberse asesorado y haber comunicado esto de otro modo diferente. Algo más parecido a lo de Durandal/Aurelia: mucho mejor comunicado.
¿Y ahora qué hago de mi vida?
Por cierto, se me "olvidaba" comentar un detalle importante: de momento AngularJS 2.0 está en pañales. Es un diseño y algunos desarrollos previos, pero no se espera que liberen la primera versión antes de finales de 2015 mediados de 2016. De hecho la fecha de su lanzamiento no está asegurada ni mucho menos. Y probablemente cuando salga no tendrá el nivel de estabilidad que tiene la actual versión 1.x. Es decir, para poder sacar partido en serio a Angular 2.0 queda al menos un año y medio. O sea, ahora mismo aprender AngularJS 2.0 no es una opción realista de trabajo. Angular 2 ya es una realidad desde septiembre de 2016. Les ha costado más de 2 años de trabajo (casi 2 desde su anuncio y otros 6 meses de desarrollo interno previo estimado), pero por fin está aquí y es estable y listo para producción. En el enlace anterior puedes ver qué trae y qué esperar de ella en el futuro.
Por otro lado, las actuales versiones 1.x seguirán apareciendo en paralelo y tenemos la garantía del equipo de que se van a mantener por lo menos durante dos años más desde que salga la 2.0. Es decir, como mínimo hasta finales de 2017 finales de 2018. Es más, debemos tener en cuenta que Google tiene cientos de aplicaciones web en las que utiliza Angular 1.x, así que ellos mismos están interesados en que esa versión siga actualizada. De hecho llevan varios meses trabajando en la versión 1.4 que verá la luz "en primavera" (sic). De hecho, desde el anuncio de Angular 2, han sacado las versiones 1.3, 1.4 y 1.5, y están trabajando en la 1.6 que saldrá en breve. Tenemos Angular 1.x para rato.
Si quieres aprender un framework para desarrollo de lado cliente tienes varias opciones. Vamos a ver sus pros y sus contras:
Opción 1: Aprender AngularJS 1.x
Si necesitas crear ahora (hasta septiembre de 2016) una aplicación web avanzada o de tipo SPA no hay nada de malo en aprender la versión actual de Angular. Es una plataforma estable, robusta y probada, y muchos de los conceptos que aprendas vas a poder sacarles partido con otros frameworks e incluso con Angular 2.0.
Antes de un año y medio como mínimo tampoco tendrás opción de usar la versión 2.0 de AngularJS, y tienes el soporte asegurado para 1.x durante mucho tiempo.
En mi opinión además si trabajas con AngularJS deberás conocer en cualquier caso las versiones 1.x puesto que probablemente te toque mantener y/o ampliar aplicaciones actuales creadas con esta versión del framework, por lo que no te quedará más remedio que lidiar con él tarde o temprano.
Pros: aprenderás un framework estable y robusto que te servirá para programar aplicaciones ahora mismo y durante varios años.
Contras: dentro de unos años seguramente te verás en la obligación de cambiar de framework. En cualquier caso, esto te pasará casi con cualquier framework existente: es imposible en este mundillo aprender algo y pretender que te sirva para toda la vida, y menos en desarrollo web Front-End
Opción 2: Esperar para Aprender AngularJS 2.0
Si no necesitas crear una aplicación real ahora puedes esperar un año y luego aprender AngularJS 2.0. Ten en cuenta que no está asegurada una fecha de lanzamiento y que, viendo cómo actualizan ahora las versiones 1.x y que esta supone un cambio tan grande, probablemente durante las primeras versiones va a haber muchas incompatibilidades.
Pros: aprenderás una plataforma que te servirá durante más tiempo que la 1.x ya que empezó más tarde. Va a ser más elegante y más apropiada para móviles y tendrá otras aplicaciones más allá de la web.
Contras: Tienes que esperar un año y medio por lo menos para poder usarla en real, probablemente no esté estabilizada hasta que pase un tiempo, y tendrá una curva de aprendizaje más pronunciada que la de 1.x (esto ya hemos comprobado que en la versión definitiva no es cierto). Además, en tu trabajo probablemente tendrás que mantener aplicaciones creadas con la versión 1.x durante mucho tiempo.
Opción 3: Aprender un framework diferente
Por supuesto esta es una opción muy razonable. El problema es el de siempre: ¿por cuál apuesto?. No hay un claro ganador. Durandal es muy bueno pero en el fondo le pasa lo mismo que a Angular, así que quizá sería mejor apostar por Aurelia, que ya está en un punto bastante avanzado. Por otro lado hay frameworks "clásicos" muy interesantes (como Ember.js por ejemplo) que merecen mucho la pena, y otros emergentes que están tomando la cabecera (como Aurelia o incluso React.js de Facebook, aunque no es comparable a Angular pues no es un framework MVC completo sino una biblioteca de UI).
Pros: están ya disponibles y tienen comunidades muy activas. Son tan buena apuesta como cualquier otro.
Contras: nadie te asegura que no te quedes en la cuneta en cualquier momento o que saquen versiones incompatibles también.
Opción 4: Micro-frameworks y buenos fundamentos
Otra tendencia muy marcada últimamente (con la que, la verdad, me identifico bastante personalmente) es la de no utilizar un framework completo, sino coordinar el uso de múltiples bibliotecas pequeñas y especializadas que entre todas te den la funcionalidad que necesitas (micro-framework). Es otra buena opción a considerar.
Pros: La principal ventaja de esta estrategia es que no dependes en exceso de ninguna biblioteca y aunque alguna pieza se caiga o cambie es muy fácil de sustituir por otra similar. Además puedes escoger exactamente qué funcionalidad vas a utilizar en tu aplicación y cuál no, resultando en aplicaciones más ligeras y rápidas de descargar.
Contras: tienes que navegar en un océano de opciones, escoger la apropiada para cada tarea, aprender múltiples bibliotecas y conseguir que funcionen bien entre sí. Todo esto es también un reto. Necesitas dominar más los fundamentos de JavaScript, controlar ECMAScript y sus cuestiones avanzadas y, en definitiva, poner más de tu parte.
En cualquier caso, escojas el framework que escojas, debes poseer siempre una buena base conceptual y práctica tanto de JavaScript como de ciertos patrones y pautas de arquitectura para construir aplicaciones. Así que digamos que esta opción 4, en realidad, es transversal a cualquier otra opción que puedas escoger.
En resumen
El hecho de que la gente de Angular haya decidido sacar la mal llamada "versión 2.0" no significa que debas abandonar la idea de usar AngularJS tal y como está actualmente. Todo dependerá de tus necesidades actuales.
Si tu intención es crear una aplicación JavaScript avanzada o una SPA, AngularJS 1.x sigue siendo una opción muy buena, con soporte asegurado para varios años. Además en cualquier trabajo de desarrollador Front-End acabarás topándote tarde o temprano con esta versión del framework.
Si lo tuyo es más curiosidad y no tienes una aplicación ya en ciernes, quizá puedas esperar un año o así hasta que AngularJS 2.0 esté listo y aprenderlo para entonces. De hecho puedes ir aprendiendo ya ahora.
Otra opción en cualquiera de los casos es aprender otra biblioteca como Ember.js, Durandal o Aurelia. No solo de Angular vive el hombre, ni mucho menos.
Finalmente, y sea cual sea el framework que decidas aprender, debes asegurarte de tener previamente unos buenos conocimientos de JavaScript y de ECMAScript con este lenguaje. Esto te resultará muy útil independientemente de que uses un framework, un conjunto de bibliotecas especializadas (micro-framework) o cualquier otra opción.