Caridy Patiño: “Si no quieres aprender JS, mantente lejos de la web”

caridy

A 48 horas del comienzo de StarTechConf muchos de los expertos invitados han empezado a tocar suelo chileno. La organización trabaja frenéticamente para que todo salga según lo planeado y nosotros, por nuestra parte, seguimos contactando y entrevistando a algunos charlistas para presentarlos al público y dejar que hagan una pequeña introducción a su campo de especialidad.

Caridy Patiño es uno de los ingenieros senior de Front End en Yahoo Search. Como  ingeniero de frontend desde luego es experto en HTML, CSS y JS, pero en los últimos años se ha ido especializando en tecnologías server-side, de entre las cuales su fuerte hoy son SSJS y Node.Js. Este último será el tema de su charla en Chile pero para los que no lo sepan, Node.Js es un entorno de programación javascript del lado del servidor (a diferencia del javascript corriente que corre en el browser, netamente del lado del cliente). La gracia de este sistema es que se maneja un lenguaje homogéneo a ambos lados del flujo y que es altamente escalable, lo cual es importantísimo para servir aplicaciones web hoy en día en que los webservers tradicionales sufren como chinos procesando PHP, Python o Java según corresponda.

Justamente respecto de Node.js conversamos con él hace poco, resultando la presente entrevista.

Caridy, esto se lo hemos preguntado a todos y también te toca responder: ¿Cómo te convencieron de venir a StarTechConf?

Rey Bango, otro de los conferencistas, me recomendó con los organizadores y acepté casi de inmediato.  En mi caso, el español es mi lengua materna, yo vengo de un país latinoamericano, y a pesar que llevo varios años en Yahoo! teniendo la oportunidad de participar con la vanguardia de nuestra rama, siento que los países latinoamericanos, especialmente Brasil y Chile tienen un enorme potencial.

Cualquier iniciativa que ayude a consolidar la rama en estos países va a ayudar, eventualmente, a los demás países de la región, creando un sinnúmero de oportunidades para profesionales de nuestra rama. Desgraciadamente no he tenido el tiempo y la oportunidad de participar en eventos en la región anteriormente, pero pretendo hacerlo siempre que pueda, como ocurrió ahora.

Háblanos de Node.js, de sus principales fortalezas.

En principio, creo que la escalabilidad es el factor más importante, y será definitivamente un factor decisivo a la hora de decidir si usar node.js o no para cualquier empresa. Decidirse por una tecnología u otra es, muchas ocasiones, derivado de un factor subjetivo, pero la posibilidad de crear un sistema sobre una plataforma que fue diseñada para escalar en términos de concurrencia y trafico, es para nada subjetivo, y estoy seguro será un factor decisivo para muchos.

Ryan (Dahl) creó node.js con la idea de ofrecer una API simple que fuera verdaderamente asincrónica en todos los sentidos, esto se traduce en desempeño. En segundo lugar como JS es el lenguaje más popular, que es inherente a la web, que corre en millones de dispositivos, desde los mas simples smartphones hasta las browsers más potentes, creo que hará de node.js una plataforma muy atractiva para desarrollar aplicaciones de todo tipo.

Otro detalle un poco más subjetivo es el hecho de que hoy por hoy la mayoría de los frontend developers pasan sus días escribiendo en JS y PHP al mismo tiempo, a veces en forma alternada y otras teniendo que replicar funcionalidades en ambios lenguajes. Eso atenta contra la productividad. Qué distinto es escribir un programa que  pueda correr, indistintamente, en el servidor o en el browser del usuario. Imagínate un sistema que  sea capaz de determinar cuando un servidor está bajo stress y pueda decidir aliviar parte de la carga delegando el procesamiento de manipulación de templates para generar codigo HTML hacia el navegador de cada usuario. Este tipo de esquema es impensable con otros plataformas. Es por esto que node.js abre las puertas a un nuevo mundo.

 

Bueno, pero algunas limitaciones o defectos debe tener…

Hay varias limitaciones hoy por hoy. Primero que nada, esta por salir la versión 0.6 de node.js. Esto quiere decir que oficialmente no ha alcanzado la categoria de “GA” y por consiguiente, la API sigue sujeta a cambios, ya hemos visto cambio entre releases. Pero eso no es impedimento para seguir sumando usuarios de node.js.   Los cambios siempre han sido para bien, y han tratado de mantener la compatibilidad cuando ha sido posible.

La otra limitación que hemos encontrado, al menos en Yahoo!, es la posibilidad de debuggear código complejo. Hay algunas herramientas para debuggear, pero aun esta muy lejos de ser ideal ,y siendo node.js/javascript un lenguaje dinámico, es mucho mas complicado debuggear un crash, o simplemente analizar la cola de eventos, etc.

Otra de los detalles que sobresaltan a la vista es la necesidad de cuidar la forma en que se escribe el código, y la lógica que se usa, especialmente porque la ejecución asincrónica hace necesaria la utilización de muchos callbacks, y como resultado, se puede terminar con muchos niveles de profundidad en el código. Esto puede evitarse si  se siguen pautas y reglas esenciales, justo como lo hacemos para el javascript que escribimos hoy en día.

Por ultimo, hacer ajustes del servidor requiere tiempo y conocimiento, especialmente si se quiere utilizar al máximo la potencia  del servidor, aunque las ultimas versiones de node.js han mejorado considerablemente el manejo de multi-cores y el balance de cargas entre estos procesos, mi predicción es que eventualmente tener un servidor de node.js corriendo en una infraestructura elástica será bien sencillo en un futuro cercano.

 

Por lo que me cuentas, a medida que avanza node.js los desarrolladores de front van sumando responsabilidades que antes eran de los ingenieros de sistemas

No, no creo. En los últimos años hemos visto como el nuevo concepto de cloud-computing se masificó, y eso impactó en el trabajo de los desarrolladores de front.  Ya nadie quiere manejar transacciones en los servidores de frontend, preferimos usar una API robusta que este respaldada por una nube. La mayoria de las compañías han tratado de hacer una reingeniería de sus infraestructuras internas para adaptarse al concepto de datos centralizados. Amazon es un gran ejemplo de esto, Yahoo! también ha invertido mucho esfuerzo en convertir a tecnologías como YQL y Hadoop en estándares que cualquiera puede utilizar para infinidad de procesos y funciones.

Creo que, hoy por hoy, la distinción entre frontend developers, backend engineers y service engineers está más clara que nunca. Ahora bien, hay muchos ingenieros que no quieren utilizar javascript, por un motivo u otro, yo no los juzgo, y lo mismo pasa con otros lenguajes, siempre hay detractores, y siempre hay quien lucha a capa y espada por una determinada tecnología; creo que PPK lo resumió magistralmente diciendo algo así:

“Si quieres trabajar con la web, aprende JavaScript. Si no quieres aprender JS, mantente lejos de la web”.

Creo que esto es aún más importante desde el momento que nuestros servidores de frontend puedan entender que sucede en el otro extremo (en el browser), y node.js promete cerrar (de alguna manera) esa brecha.

 

¿Tú has visto alguna desventaja en rendimiento a la hora de comparar node.js con webservers tradicionales?

Yo no veo ningúna desventaja. En  mi equipo, e incluso a nivel de la compañía, hemos invertido meses   analizando cada arista, haciendo infinidad de pruebas, replicando sistemas para poder hacer una comparación racional (pruebas reales, con tráfico genuino) entre node.js y otras tecnologías como apache/php, java-tomcat, etc.

Hasta el momento, node.js los ha dejado atrás en todos los factores analizados, en algunos casos por una diferencia abrumadora.  Estamos hablando de sistemas que han sido diseñados por gente muy capaz, y más que todo, sistemas ajustados cuidadosamente a lo largo de mucho tiempo para obtener de ellos el máximo rendimiento.

Por otra parte, node.js es aun muy joven, y sabemos que hay un largo camino por recorrer, y que muchas cosas podrán ser ajustadas y optimizadas. Gran parte de mi charla se va a enfocar en el tema del desempeño y los análisis que hemos hecho. Ahora bien, es un hecho que no existe una comunidad de expertos como existe hoy para apache/php, y otros webservers, pero node.js esta arrastrando a mucha gente, gente experimentada, gente que conoce muy bien esos otros sistemas, y están creando las diferentes piezas necesarias para tener una infraestructura robusta, mucho más avanzada que esas que tenemos hoy en día.

Toma por ejemplo el caso de npm, el manejador de  paquetes para node.js creado por Isaac Schlueter. Ese es un ejemplo muy claro. Isaac, un ex Yahoo! y pionero de node.js, fue capaz de crear algo trascendental, algo que reúne las ventajas de muchos de los manejadores de paquetes para otros sistemas, pero llevado a otro nivel. Lo mismo esta pasando con las demás piezas de esta nueva infraestructura.

 

Leave a Reply