Llevo desarrollando en javascript casi exclusivamente 2 años y pico, posiblemente sea el lenguaje que más he usado de continuo en mi vida profesional. A pesar de ello no conozco cada detalle del lenguaje, cuando eres más jóven te entretienes en conocer cada aspecto y uso de cada cosa que usas, quizá pensando que eso es saber programar.
En este tiempo sin embargo me he intentado centrar en mejorar la arquitectura y organización de las aplicaciones. Hay cosas que son comunes a todos los lenguajes pero es inevitable aprender ciertos patrones concretos del lenguaje que estás usando, y javascript tiene unos cuantos.
Javascript no tiene un sistema de gestión de módulos. Eso es un gran problema, ya que no hay una forma de importar módulos, de hacer sandboxing (de una forma coherente), etc. Casi todos los lenguajes lo tienen, mejores o peores, pero todo el mundo usa la misma forma y simplifica mucho las cosas. Y esto parece una gilipollez suprema, pero modula muchísimo el uso del lenguaje.
Cuando haces una aplicación javascript grande, la organización del código, de módulos, la separación y todas esas cosas que todos sabemos que hay que hacer bien pasan a ser fundamentales. Por esa razón la mejor forma de hacerlo bien es coger ideas de otras aplicaciones que ya están funcionando. He visto algunas presentaciones y librerías donde te explican como modularizar todo, organizarlo con un buses, eventos, patrones, pero en general, no se basan en experiencia real.
Algunas de las aplicaciones que uso como referencia para coger ideas son las siguientes (todas ellas en producción, con millones de usuarios en algunos casos):
- DocumentCloud: es posiblemente la primera aplicación hecha con Backbone (por los creadores obviamente) y es interesante por dos razones: 1) la organización de la aplicación 2) el uso de Backbone. Como nota adicional, conocí a Jashkenas y además de ser un tío inspirador me quedó bastante sorprendido de algunas decisiones tomadas en Backbone.js, sobretodo relacionadas con cambios a lo largo de su historia.
Se ha quedado un poco obsoleta (usa backbone 0.4 o algo así)
- prose: posiblemente no lo conozcas, es un editor de contenidos basada en github. Usa Backbone también, pero esta está mucho más actualizada y tiene algunas cosas interesantes que cuentan los magos de mapbox en su blog.
- iD: es el nuevo editor por defecto de OpenStreetMap. Tiene la peculiaridad de que está construido todo con d3, no usan jQuery y tienen un sistema modular para los widgets algo diferente. Tom MacWright lo explica en su blog con detalle (este post es un must). Muy bueno el documento de arquitectura en su repo.
- CartoDB: vale, esta aplicación es la que desarrollamos en Vizzuality, pero que la hagamos nosotros no significa que no tenga cosas interesantes. Seguramente haga un post detallado de la arquitectura frontend de CartoDB, pero hay algunas cosas interesantes que puedes ver, por ejemplo la gestión de vistas, o como organizamos las diferentes partes de la app
Seguro que hay muchas más, pero estas son las que me han parecido más realistas, interesantes y por supuesto en producción. Nunca me fio de algo que no está en producción