Metodologías para el manejo de dependencias en proyectos complejos.

Ruben B
Developer Serio
Published in
4 min readMay 12, 2015
Foto por Lauren Manning

Una de las formas más fáciles de tirar un proyecto a la basura es el manejo inapropiado de dependencias: si no pones especial cuidado en cuales librerías estás utilizando puedes sacrificar todo el esfuerzo de tu equipo antes de lo que puedas decir `brew doctor`, especialmente si es un proyecto complejo como una aplicación dinámica o un landing page. Elegir cuales dependencias usar no es fácil, pero si vemos proyectos grandes encontraremos un patrón de diseño y buena práctica emergente que utilizan varios de los mejores programadores del mundo como Steve Jobs en McIntosh o Richard Feynman en GNU: Usa más dependencias, entre más mejor!

«Cuando estás solucionando un problema, no tienes que preocuparte. Ahora, después de que has resuelto el problema, entonces sí es momento de preocuparse.» — Richard Feynman @ JSConf

¿Por qué más dependencias? Creo que eso debería ser obvio, pero vale la pena mencionar las dependencias más obvias.

Richard Feynman, inventor del open source
  1. Código que no es tuyo no es tu responsabilidad.
  2. Los proyectos lightweight se hacen así poniendo más funcionalidad en la nube. Recuerda: menos líneas de código = menos bugs.
  3. Tu proyecto será más eficiente porque habrá más herramientas para trabajar, si una está ocupada puedes agarrar otra (imagina construir una casa con un solo martillo lol).
  4. Otros desarrolladores verán la lista de dependencias y sabrán si tu proyecto es confiable o no (así es como los gerentes pueden tomar decisiones claras de que hardware depender para los proyectos)

Puede que ya estén usando dependencias, en ese caso su equipo se los va a agradecer! Pero si no se convencen, les ahorraré problemas mostrando la cantidad de dependencias de los proyectos más populares de ruby y javascript (menciono solo esos dos porque todo el internet se escribe en estos lenguajes):

  • rails (ruby) — 53 dependencias
  • linux (ruby) — más de 100 dependencias probablemente
  • express (javascript) — 41 dependencias
  • sails (javascript) — 64 dependencias (sails es una mejora de rails en javascript, podrán ver que tiene 11 dependencias más por lo cual es más confiable)

No solo es importante tener muchas dependencias, también debes asegurarte que tus dependencias tengan muchas otrasdependencias (así sabes que son más confiables y que existe una cadena de responsabilidad, que es un termino fancy de la industria para decir que hay alguien encargado). Por eso la lista de arriba no solo es un ejemplo, es una recomendación para que las agreguen como dependencias de sus propios proyectos.

«Estoy cansado de luchar. Siempre he sabido que no puedo ser una estrella de acción toda mi vida.»
— Steve Jobs

Aquí les comparto algunas de mis dependencias favoritas para incluir en un proyecto (si ven algunas repetidas de arriba no es coincidencia ;) solo deben agregarlo a su package.json por default: objetivamente estas son dependencias que todo proyecto debería tener:

  • rails (necesitarás depender de ruby también, te da MVC que es un servidor para páginas de internet)
  • sails (rails para javascript, por si rails está ocupado, sails es exactamente igual que rails y lo puedes usar de respaldo de rails en lugar de rails)
  • redis (es la mejor base de datos del mundo, es un salto tan grande como cuando descubrimos MySQL en los sesentas)
  • mongodb (es otra base de datos, para tener redundancia)
  • v8 (es lo que usa google chrome para leer páginas, esto te deja hacer páginas para que rails/sails la sirva. Como lo hizo google, también sirve para buscar)
  • vmware (te deja correr windows en tu proyecto para que tenga soporte de juegos)

Pero bueno, esto no es una metodología! ¿Cómo puedo aplicarlo de forma constante a un proyecto? Esa es la verdadera pregunta. Pues el título es una mentira, no hay metodologías: solo hay una. Dejen de vivir en el pasado y empiezen a ser developers serios con estos pasos para manejar dependencias en proyectos complejos (> 100 líneas de código):

  1. Busca dependencias importantes, empieza los mencionados en este artículo.
  2. Crea un package.json con todas estas dependencias.
  3. Busca los paquetes más populares y agregalos a este archivo (por ejemplo, python es muy popular entre usuarios de javascript)
  4. Copia este archivo a todos tus proyectos (también puedes usar un symlink, que es un feature de javascript que te permite replicar la funcionalidad de dropbox en tu computadora en lugar de la nube)
  5. Incluye tus dependencias! (IMPORTANTE: muchos solo descargan dependencias y jamás las usan. Así no es como funciona la programación y esto puede hacer más lento tu programa)
  6. Happy Hacking!

Este método debería funcionar para todos los proyectos, y si aún así no pueden escalar o ejecutar, es muy probable que no tengan las dependencias suficientes. 9 de cada 10 proyectos fallan por esto.

¿Cuáles son sus dependencias favoritas? La discusión de las mejores dependencias sigue en twitter.

--

--

Ruben B
Developer Serio

Soy un developer SERIO de Guadalajara y Ciudad Juárez. Trabajo principalmente con Javascript y derivados: node, rails, java y jquery lang