Mi experiencia con node.js
Hace un par de días me pidieron que escribiera un poco de mi experiencia e interés para Maestros de la Web, el texto salio muy corto y tuvieron que cortarlo para que se integrara con el articulo que escribieron. Entonces aquí publico todo lo que escribo.
Node.js me resulto atractivo por una librería llamada Faye, la cual permite crear un servidor de Comet (long-polling) en unas cuantas líneas, a diferencia de su implementación que de otra manera implica instalar APE o CometD. Poco a poco he empezado a usarlo para más y más cosas, principalmente para jugar con websockets (usando Socket.io y Juggernaut), páginas de Internet en tiempo real y scrapping de páginas de Internet con selectores de jQuery. Mi siguiente proyecto será hacer un juego que sea un mash-up entre tetris y canaval usando canvas y web sockets.
Una de las más grandes ventajas que he encontrado es que puedes programar toda tu aplicación en el mismo lenguaje. La base de datos que me agrada usar con node.js, CouchDB, entrega json, nativo de javascript, mi servidor está escrito con javascript y mi aplicación está escrita en HTML, CSS y javascript. Lo cual es una gran diferencia a utilizar SQL, un lenguaje del lado del servido y después javascript del lado del cliente.
Al usar node.js he tenido algunos inconvenientes, pero cada uno me ha hecho mejorar mucho mis skills como programador:
- Por el momento la versión estable de node.js es 0.2.4 y la versión que se encuentra en desarrollo es 0.3. Yo llevo usándolo desde el 0.1.94 y me ha tocado ver cambios en la semántica, en la comunidad y poco a poco verlo crecer. Ha sido una gran experiencia, pero también es complicado trabajar en un lenguaje donde muchas veces las librería y tutoriales no funcionan por conflictos de versiones.
- Usar node.js para hacer aplicaciones web es el equivalente de tomar Apache sin ningún modulo, me ha permitido entender lo que sucede cuando un http request llega a nuestro servidor. Si no les interesa aprender esto, usen Express.js o Meryl desde el día uno.
- La documentación es escasa y existen pocos tutoriales al respeto. Me ha acercado a leer código en github, chats de IRC y Google groups, lo cual ha sido bastante ameno después de darme golpes con la pared las primeras semanas.
- Aprendí jQuery primero y javascript después. El usar node me ha permitido mejorar mucho mi javascript. Node.js y javascript están basado en eventos y el aprender que es un evento del lado del servidor no es algo completamente obvio. Node.js es asíncrono, por lo cual hay que entender muy bien el concepto de callback de una función como sucede cuando hacemos AJAX.
Después de 4 meses usándolo para desarrollo en mi tiempo libre, después de todos los topes en la cabeza que me he dado usándolo, me ha servido para ser mejor programador, para entender la complejidad que implica desarrollar algo a gran escala, mejorar mi uso de git y mi habilidad para leer el código de otras personas. Se los recomiendo ampliamente, en especial a todos los estudiantes de algo similar a “computer science” que tienen mucho más tiempo libre que yo.
Como parte de aprender node.js he escrito unos cuantos posts que me gustaría compartirles:
- Instalar CouchDb 1.0 y node.js en Ubuntu nos servirá para generar nuestro ambiente de trabajo. Hoy ya no es tan complicado pero en un momento lo fue. El proceso es muy similar en Mac con home brew y en Windows es posible con cygwin, pero no lo he logrado.
- HTML scrapping con jQuery y node.js. Este es un muy buen primer ejercicio. Es sencillo pero nos muestra un poco del poder de node.js.
- Node.js para WebDevelopers. En este post explico los primeros pasos que hay que tomar cuando empiecen a usar node para desarrollar una aplicación web. Está ligado a un pequeño Shell que tengo en github, el cual ya tiene log in por default, pero aún le hace falta mucho trabajo.
- Faye, node.js y aplicaciones tiempo real y Chat 101: con node.js y Faye muestran como implementar Comet con Faye hasta crear el chat más básico posible.
Espero que esto les sirva para empezar a aprender node.js y no duden en contactarme si tienen alguna duda. Me pueden contactar en @siedrix