Introducción de rigor

Hace ya unos días escribí un post sobre estrategias de desarrollo web en el que recomendaba escoger diferentes tecnologías de desarrollo web en función del tipo de proyecto al que nos enfrentamos: CMS, frameworks, templates, static site generators… Y mencionaba, de pasada, alguna de las aplicaciones más populares en cada campo.

Por suerte para el consumidor, cada vez es más sencillo y barato desarrollar sitios webs estándar: gracias a los miles de templates y decenas de CMS disponibles no es necesario tener prácticamente ningún conocimiento técnico para producir casi cualquier tipo de web habitual (portales de noticias, foros, blogs, e-shops, etc.). De hecho, existen proyectos de AI que prometen diseñar y generar sitios webs automáticamente, sin intervención humana más allá de ir agregando contenidos, al respecto véase TheGrid.

El mundo del desarrollo web, por fuerza, se ha visto empujado o bien hacia el desarrollo de apps, plugins, extensiones o templates para aquellos CMS, o bien hacia áreas mucho más técnicas o especializadas, como por ejemplo:

  • Desarrollo de UI sobresalientes, en el menor tiempo posible y con componentes reutilizables.
  • Desarrollo de web services intermediarios entre aplicaciones existentes o nuevas aplicaciones web para startups o empresas con necesidad de herramientas a medida.

Y como es natural, durante los últimos años han venido surgiendo herramientas para agilizar y normalizar el desarrollo en esas áreas de trabajo. Mejor dicho: no es que hayan venido surgiendo herramientas ¡es que se están reproduciendo como conejos! De ahí lo que yo he venido a llamar…

La invasión de los frameworks

Ya sea para aplicar al mundo del front end las buenas maneras, abstracción y modularidad típicas del desarrollo back end, como para agilizar el desarrollo web en general y evitar lo de “reinventar la rueda”, los frameworks han venido para hacernos la vida más fácil. A cambio, sólo nos piden el esfuerzo de estudiar sus particularidades y diferencias (casi na’).

Existen frameworks de todos los tamaños: desde full-stack frameworks para desarrollar íntegramente cualquier tipo de aplicación web hasta microframeworks destinados a correr servicios web con la mayor velocidad y el menor consumo de recursos posible. Algunos frameworks se centran solamente en el front end o el manejo de las vistas, mientras que otros te permiten el desarrollo integral back y front, a menudo procurando disciplinarte en el uso de arquitecturas Modelo-Vista-Controlador.

También podemos clasificar los frameworks según los lenguajes de programación en que están escritos o el lenguaje en que debemos escribir nuestras aplicaciones cuando los usamos: PHP, Ruby, Python, Java, Groovy, Scala, JavaScript, CoffeeScript, Perl… you name it.

La cuestión del lenguaje podría parecer importante a primera vista, pero el hecho es que las webs más populares (wikipedia, youtube, facebook, github, ebay, twitter, netflix…) están escritas usando diferentes lenguajes y por tanto, dejando al margen las preferencias personales, el lenguaje de programación subyacente a los frameworks debería ser un dato en principio irrelevante a la hora de elegir cuál de ellos usar. Mucho más importante es, en cambio, la naturaleza del proyecto que debemos afrontar, por ejemplo: ¿se trata de una nueva aplicación que hay que desarrollar íntegramente, hay que trabajar con grandes bases de datos, es principalmente una app interactiva, es un web service o sólo hay que mejorar una interfaz con problemas de rendimiento?

Una vez respondidas ese tipo de preguntas y realizada la primera criba de frameworks, nos hemos de enfrentar al hecho de que existen montones de alternativas ¡incluso sin salirnos de un mismo lenguaje de programación!.

A modo de referencia rápida, estos son algunos de los frameworks más conocidos a día de hoy, clasificados según el lenguaje de programación o la tecnología subyacente. Ni mucho menos se trata de una lista exhaustiva:

  • PHP frameworks:
    Zend, CodeIgniter, CakePHP, Laravel y Lumen (micro), Nette, Yii, Slim (micro), Kohana, Typo3 Flow, FuelPHP…

  • Python frameworks:
    Django, CherryPy, TurboGears, Flask (micro), Pyramid, Bottle (micro)…

  • JavaScript UI/client-side/web components frameworks/libraries/others:
    AngularJS, jQuery (lib), MooTools, KnockoutJS, ReactJS, Dojo Toolkit (lib), Underscore.js (lib), Prototype, Spry Framework, AuraJS (components wrapper), X-Tag (components dev), Polymer (components dev), Handlebars (templating)…

  • JavaScript/CoffeeScript/Node.JS frameworks:
    Express, BackboneJS, Ember.js, Meteor, Sails.js, Koa, Flatiron, Batman.js, Total.js, SpineJS, Hapi, DerbyJS…

  • Java/Groovy/Scala frameworks:
    Spring Framework, Stripes, Struts, Play, Tapestry, Grails, Wicket, Vaadin, DropWizard (micro)…

  • Perl frameworks:
    Catalyst, Dancer, Mojolicious…

  • Ruby frameworks:
    Ruby on Rails, Sinatra, Cramp, Padrino, Ramaze (micro), Cuba (micro), Camping (micro)…

No hay que olvidar tampoco los frameworks tipo “propietario” como Adobe ColdFusion o Microsoft ASP.NET, o rarezas como Seaside escrito en Smalltalk.

Otras tecnologías que merecen mención son los UI frameworks basados en Java como JavaServer Faces (JSF) y PrimeFaces, Google Web Toolkit (GWT), o curiosidades como Babel, un “traductor” o trans-compiler (de ES6 a ES5) para poder usar versiones punteras de JavaScript en proyectos no tan futuristas.

A mi modo de ver, en ausencia de condicionantes externos el mejor criterio para decantarse por el uso de uno u otro framework es la popularidad presente y futura de la herramienta. En primer lugar, porque en un mundo tan competitivo como el del desarrollo web, la popularidad suele correlacionarse con la utilidad/calidad. Y en segundo lugar porque a mayor popularidad se sigue que habrá una mayor comunidad de desarrolladores, mejor documentación, más ayuda a la hora de solventar problemas y mayor cantidad de plugins.

Por eso me ha parecido una buena idea realizar una comparativa de los frameworks, librerías y herramientas de desarrollo de aplicaciones, en lo que respecta a la popularidad y su tendencia en el tiempo. Y teniendo en cuenta que todo el mundillo de los web frameworks se mueve a través de internet: ¿qué mejor herramienta para valorar su popularidad que Google Trends?

Interpretando los gráficos

Antes de bombardearte con gráficos creo que es conveniente recordar que Google Trends compara de forma relativa la búsqueda de términos o temas, lo que significa que los ejes verticales de los gráficos son una escala 0% a 100% y no un número de búsquedas determinado. Esto tiene la ventaja de que podemos comparar el interés entre las diferentes entradas de un mismo gráfico, pero no tendría ningún sentido comparar entradas entre dos gráficos distintos.

Otro dato a tener en cuenta es que Google Trends no asocia con precisión las búsquedas de palabras con los diferente temas que representan, o dicho con un ejemplo: herramientas con nombres “comunes” como Django, Cuba o Express, que además de software son una película, un país o un adjetivo, arrojan resultados “contaminados”, mucho menos fiables que los de herramientas con nombres “únicos” como Laravel o AngularJS. En la medida de lo posible he tratado de “depurar” los resultados para hacerlos comparables agregando o excluyendo términos de búsqueda.

En cualquier caso, no olvides que es tan importante la popularidad relativa entre herramientas como la tendencia que sigue esa popularidad, lo que nos permite identificar nuevas herramientas que están ganando terreno a otras más viejas y que están cayendo en desuso.

PHP frameworks

PHP frameworks

Haz click aquí para ver el gráfico interactivo

En una encuesta realizada en Marzo del año pasado (ver aquí) Laravel se situaba a la cabeza de los frameworks PHP más usados, seguido de Nette, Yii (1 y 2), CodeIgniter, Zend (1 y 2) y CakePHP. Este gráfico parece confirmar los datos de la encuesta, pero además nos ofrece una perspectiva temporal interesantísima:

Laravel, en tan sólo tres años, se ha hecho con el liderazgo de los frameworks PHP y, no sólo eso, sino que todo ellos parecen estar perdiendo popularidad al mismo tiempo que Laravel la gana. En cuestiones de frameworks PHP, por tanto, apostar por Laravel sería la apuesta más segura.

Python frameworks

Python frameworks

Haz click aquí para ver el gráfico interactivo

En el mundillo python, en cambio, no parece haber tanta competencia por los primeros puestos de liderazgo entre los frameworks full-stack. Sí que podríamos dudar entre qué microframework elegir, aunque Flask parece ir a la cabeza, pero a la hora de desarrolar apps hechas y derechas sólo deberíamos tener un nombre en mente: Django.

JavaScript client-side frameworks/libraries

JavaScript client-side frameworks/libraries

Haz click aquí para ver el gráfico interactivo

Del lado cliente tengo la sensación de que durante muchos años se han venido haciendo las cosas de la misma manera: escribir código JavaScript y utilizar jQuery para agilizar el trabajo y hacerlo compatible con la mayoría de browsers.

jQuery sigue siendo la tecnología JavaScript más usada como soporte al desarrollo del front end, pero eso está empezando a cambiar: desde dentro del propio mundillo JavaScript podemos apreciar como AngularJS y la filosofía framework empiezan a hacer mella en el liderazgo de la famosa librería.

Aunque no se aprecia en este gráfico, es sensato suponer que el declive de jQuery también tiene mucho que ver con la reciente aparición de nuevas tecnologías para desarrollo de UI basados en Java o la incipiente amenaza de las tecnologías basadas en el desarrollo de Web Components.

Es difícil saber qué ocurrirá en el mundillo estrictamente front end, pero una cosa está clara: jQuery tiene los años de liderazgo contados. Como apuesta de futuro yo me quedo con AngularJS y recomiendo seguir de cerca a tecnologías como ReactJS, sin perder de vista al resto de librerías.

Javascript/CoffeeScript/server-side JS frameworks

Javascript/CoffeeScript/server-side JS frameworks

Haz click aquí para ver el gráfico interactivo

Hace unos años no me hubiese podido creer que JavaScript sería la base para tecnologías del lado servidor como mínimo tan buenas como cualquier otra. Habría sido inimaginable leer posts como éste en los que se habla de Node.JS (un JS runtime environment, una plataforma de ejecución de código JS del lado servidor) como la gran panacea del desarrollo web.

A primar vista la gráfica sugiere que en este relativamente nuevo mundillo de los full-stack frameworks basados en tecnologías JavaScript/Node.JS parece haber una competencia feroz por hacerse con el primer puesto.

A estas alturas es difícil mojarse y apostar por algún framework en concreto, pero una cosa está clara: casi todos ellos afirman tener rendimientos increíblemente mejores con respecto a tecnologías más tradicionales como PHP.

En este sentido no es que haya que estar pendientes de Backbone o Ember o Meteor… Es que hay que estar pendientes de todo este nicho tecnológico porque podrían revolucionar el futuro inmediato y desbancar al resto de tecnologías.

Ruby frameworks

My helpful screenshot

Haz click aquí para ver el gráfico interactivo

Con el mundillo Ruby ocurre algo muy parecido a con Python. No hay pelea, no hay color, hay un ganador, sólo un ganador y nada más que un ganador, así que lo único que podemos analizar es la propia tendencia en la popularidad del líder indiscutible: Ruby on Rails.

Nacimiento y boom del 2005 al 2008, declive hasta el 2010 y maduración hasta ahora. RoR tiene ya más de 10 años pero se conserva bastante bien: no se aprecia un tendencia a la baja especialmente fuerte, aunque nada auspicia un aumento de su popularidad en los próximos años.

Como teoría de la conspiración: ¿no es casualidad que la etapa de decadencia 2008-2010 coincida con el crecimiento en popularidad de los nuevos frameworks basados en PHP en la misma etapa? *musiquilla de X-Files*.

Java/Groovy/Scala frameworks

Java/Groovy/Scala frameworks

Haz click aquí para ver el gráfico interactivo

Creo que esta gráfica, donde se aprecia caída generalizada en la popularidad de los frameworks basados en Java, podría inducir a extraer conclusiones precipitadas y erróneas. El mundillo del desarrollo web en Java está fuertemente influenciado por el desarrollo de apps para móviles y teniendo en cuenta que el desarrollo para dispositivos portátiles no hace más que crecer, lo más sensato es suponer que los web frameworks basados en Java o intermediarios entre Java y tecnologías más próximas a las tradicionales tienen aún mucha pelea que dar.

Yo creo que lo más prudente será estar al tanto respecto a las novedades en esta categoría.

Full-stack web frameworks cross-tech

Full-stack web frameworks cross-tech

Haz click aquí para ver el gráfico interactivo

No sería decente despedirme sin una comparativa entre los líderes full-stack de cada una de las categorías anteriores. He de confesar que he hecho un poquito de trampa a la hora de añadir en la comparativa a Node.JS en lugar de a algún framework basado en JavaScript o que corra sobre Node.JS, pero creo que Node.JS, como tecnología subyacente, puede ser un buen indicador de vanguardia sobre la evolución futura de frameworks basados en server-side JS.

Creo que de acuerdo a la gráfica podríamos agrupar a los líderes en dos tipos de tendencias: los que se mantienen en popularidad o presentan una ligera tendencia a la baja y los que tienden a crecer de forma lineal, más o menos estable, durante los últimos años.

En resumen:

  • Apuestas de futuro: Laravel y frameworks basados en JavaScript
  • Apuestas seguras: Django, RoR y Spring.