La Importancia de los Packages Manager en el desarrollo moderno

Primera Parte: El descubrimiento de los Modulos y Bibliotecas

Rafael Zamora
3 min readJan 23, 2023

Si usted se encuentra en la situación de aprender a programar con un Lenguaje que cuenta con un Package Manager Estandarizado(Python, Rust, JS, Go) mi amigo felicidades no sabe que tan afortunado es y pude saltarse hasta la Tercera Parte, por el contrario antes que nada lo lamento y le recomiendo que tenga un poco de paciencia. Cuando aprendemos a programar, normalmente nuestros programas son archivos individuales los cuales compilamos o interpretamos, pero hay un momento en el que comenzamos a crear programas más grandes cada vez y aprendemos que el código puede separarse en varios archivos(Módulos) los cuales se llaman unos a otros y esto ya es un gran avance, pero en ocasiones nuestros programas crecen tanto que nos damos cuenta que hay partes del código que hacen tareas genéricas las cuales no necesariamente solo se pueden utilizar en el problema que nuestro programa soluciona(Caso de Uso), estas secciones de código pueden ser separadas aun más que en archivos y así creamos nuestra primera Biblioteca(Library), ahora las modificaciones de código pueden ser trabajadas individualmente como proyectos distintos, pero unidos uno a otro.

Segunda Parte: La colaboracion y el uso de Codigo Existente

Tiempo después de aprender a programar nos damos cuenta de que inventar la rueda en cada proyecto que hacemos no es nada rentable en la Industria en la que nos desarrollamos así que comenzamos a usar Código ya existente; así que nos disponemos a buscar el código que necesitamos, después de minutos o talvez horas de búsqueda logramos encontrar la biblioteca que soluciona justo lo que queremos, pero en ese momento surge la pregunta ¿Y ahora como uso ese Código?

La forma más obvia es copiar todos los archivos al mismo directorio de nuestro proyectó e intentar Compilar o Ejecutar nuestro programa y no es una mala idea, pero dudo que quiera hacer esto cada vez que necesite una nueva Biblioteca, este problema pueden solucionarlo los Build System.

Tercera Parte: Los Build System y lo necesario que son para el uso de Bibliotecas

En los Años 70s y 80s las aplicaciones que se desarrollaban eran Monolitos así que cada programa tenía su propia forma de compilarse y empaquetarse además que el uso de Bibliotecas externas no era tan común, pero con el aumento en la complejidad de los programas y la colaboración entre desarrolladores fue necesario encontrar una forma genérica de realizar esta tarea con ello surgieron los primeros Build Systems(GNU Make, Gradle, Maven, Ninja, etc.). Esto solucionaba el uso y distribución de Bibliotecas, pero aun había un problema ¿Cómo podemos saber cuando sale una nueva versión de la Biblioteca o se solucionan Bugs?, claramente podemos estar revisando cada cierto tiempo ¿pero no podrá hacerse esto de forma automática?

Cuarta Parte: Packages Manger, La Distribución del Codigo

Con el surgimiento de Internet una de las primeras cosas para las que se usó fue el compartir Código, pero se necesitaba una forma de administrarlo así que a mediados de la década de los 90s Surgieron los primeros Build System los cuales descargaban Paquetes desde un repositorio junto con sus dependencias lo cual facilita mucho la instalación, desinstalación y actualización de software, estos fueron usados primero para la actualización de Sistemas Operativos(Pacman, APT, Dnf, etc.) aunque después surgieron distintos Packages Manger para la Distribución de Bibliotecas(Pip, NPM, Packagist, etc.) Ahora con estos programas que se encargan de la distribución de las Bibliotecas los programadores podemos centrarnos en el desarrollo de nuestros programas sin preocuparnos por la gestión de las dependencias o solución de bugs de las mismas, llegando al punto de solo distribuir el código de nuestro programa sin las dependencias y haciendo uso de unos simples comandos de la terminal descargar las dependencias correspondientes y ejecutar el programa.

Conclusión

Así como las aplicaciones y programas han ido aumentando su complejidad las herramientas que utilizamos para crearlas lo han hecho solucionando nuevos problemas a los cuales nos enfrentamos los Packages Manger son solo un ejemplo así como los Sistemas de control de versiones, el PaaS o los empaquetadores de código.

Fuentes

--

--

Rafael Zamora
0 Followers

Software Engineer with a passion for Systems Programming and Data Science