Si eres programador o desarrollador, independientemete del lenguaje de programacion que uses, o independientemente del area a la cual te dediques, o los años de experiencia que tengas, hay algunas herramientas de software que todo programador va a estudiar en algun punto de su carreara.
Así que he creado una lista de herramientas de software que sin importar tu nivel de experiencia o tu area de desarrollo, creo que tarde o temprano te lo encontraras y que puedes considerar estudiar desde ahora, de a pocos.
Lista de Herramientas de Software
Si tienes prisa esta es la lista completa de Herramientas que voy a mencionar:
- Consola/Terminal
- Git
- Bash/Shell Scripting
- Base de datos
- Maquinas Virtuales y Contenedores
- Herramientas de Documentación
Y Muchas de estas herramientas de software no son completamente necesarias para crear programar, pero usarlas nos ayudan a crear sofware de calidad.
empecemos con Git.
Git
Cuando escribimos código en nuestro lenguaje de programacion, lo que estamos haciendo continuamente es haciendo modificaciones, y no siempre estas modificaciones que hacemos tienden a ser beneficiosas, es decir a veces puede que nuestras modificaciones hagan nuestro programa más lento, o generemos un bug; o si queremos trabajar con otras personas como nos aseguramos que cada persona haga su modificacion sin que afecte a la del resto.
Bueno aqui estamos hablando de cambios constantes y trabajo colaborativo en código, dos tareas que se pueden llevar a cabo muy facilmente gracias a programas que se denominan Software de control de versiones.
Entre esto el más ampliamnente usado Git. este es un programa, te permite controlar las distintas versiones de tu codigo, es como añadir un historial de cambios a tu proyecto, te permite ir a cualquier cambio si ya lo has guardado, y es una herramienta esencial para trabajar con otros desarrolladores y poder desplegar aplicaciones continuamente (CI/CD)
Y es que Actualmente trabajar con multiple desarrolladores en un mismo código es algo completamente normal, y requerido para obtener un trabajo, sin importar el lenguaje que uses. Y aun si eres un desarrollador que trabaja solo este software es muy importante para que puedas crear distintas versiones de tu codigo sin que tengas que copiar carpetas y archivos una y otra vez.
Git llama a estas multiples versiones Ramas, a tu codigo se le denomina repositorio, y puedes tener distintas etapas de trabajo llamadas Stages, ademas que puedes ver todos los cambios que otros desarrolladores hicieron a lo largo del tiempo, y en que parte del codigo lo hicieron.
Incluso hay metodologías al rededor de Git que muchas empresas usan, para poder controlar el avance que hacen sus desarrolladores en un proyecto. Aqui estarian Gitflow, Github Flow o Gitlab Flow, Trunk-based development.
Desde que se creo Git, esta que ha revolucionado la forma en que los desarrolladores colaboran en proyectos de software. Creado por Linus Torvalds (El creador del kernel de Linux), desde su lanzamiento en 2005, Git se ha convertido en uno de los sistemas de control de versiones más populares del mundo, y se utiliza en una amplia variedad de proyectos, desde pequeños scripts hasta proyectos de software complejos y a gran escala.
y si bien tambien estan software como Mercurial, Subversion (SVN), Perforce, Bazaar, al final Git es el más popular y el que vale la pena aprenderlo.
Las Terminal o Consola
La consola o terminal a pesar que es una interfaz que ya no es usada por un usuario final, como si lo serian las interfaces graficas web o de escritorio, esta si sigue siendo de las más usadas por programadores y desarrolladores.
Por dar algunos ejemplo, un desarrollador puede usar la terminal o consola tipicmanete para:
- Compilar o Ejecutar algun interprete
- Buscar archivos
- Conectarse remotamente a otro computador (usando SSH, FTP, Telnet, entre otros protocolos)
- Ejecutar comandos de Git
- conectarse a una base de datos
E incluso algunos programadores usan programas de terminal para poder editar código. Programas como Vim, NeoVim,o Emcas son populares en este ambito.
Y cuando hablo de conocer la terminal en realidad me estoy refiriendo a conocer esos comandos basicos que siempre vamos a llegar a usar como:
- ls para listar archivos
- cd, para cambiar de directorios
- cat para ver el contenido de archivos
- mkdir, para crear carpetas
- rm: se utiliza para eliminar archivos y directorios.
- cp: se utiliza para copiar archivos y directorios.
- mv: se utiliza para mover archivos y directorios.
ambos comandos los podemos encontrar en Windows, Linux y Mac, asi que estos son muy importantes entender para que sirven. Aunque tambien hay otros comandos y progrmas de terminal que nos permiten hacer tarea más complejas:
- grep, que se usa para filtrar archivos y carpetas
- awk, que se usa para manipular datos de archivos
- ssh, para poder comunicarnos con otro computador
- sed: se utiliza para editar y transformar texto en archivos de texto.
- find: se utiliza para buscar archivos y directorios en el sistema.
- curl: se utiliza para realizar solicitudes HTTP desde la línea de comandos.
- tar: se utiliza para comprimir y descomprimir archivos y directorios.
Todos estos comandos eventualmente te los puedes encontrar y aprenderlos te pueden dar una herramienta rapida para ejecutar tareas sin las interfaces lentas.
Bash y Shell Scripting
Relacionado a dominar los comandos de terminal, tambien debemos saber que podemos crear nuestros propios comandos para la terminal de una forma sencilla sin tener que usar un lenguaje de programacion complicado como podria ser C, C++ o Rust.
Esto es gracias a los Bash Scripts, etos son archivos que te permiten usar un lenguaje de programacion muy sencillo para poder por ejemplo crear carpetas, archivos, o ejecutar progrmas de consola. De hecho todos los comandos que puedes ejecutar en una terminal pueden ser llamados desde este tipo de scripts.
Es decir que con bash scripts puedes pasar de escribir comandos una y otra vez a solo crear uno solo que ejecute todos los que necesitas. es una herramienta muy util cuando habalmos de ejecutar aplicaciones web, o adminitrar servidores, o tambien es muy comun usarlos en Seguridad informatica, para poder extraer informacion de un servidor remoto.
Y bash script esta my relacionado a los comandos de linux, ya que hablamos de crear progrmas para bash, que es software de sitemas UNix (Linux, Mac), pero en Windows tambien es posible hacer practicamente lo mismo, creando archivos que .bat, y ejcutando logica de programas de powershell. o incluso tambien puedes ejcutar los bash scripts si usas programas como WSL, que tambien te permiten ejecutar programs de linux en windows.
Asi que no importa si estas en linux, mac o windows, estos son comandos que puedes aprender y que te pueden servir, incluso cuando despliegues aplicaciones.
Base de datos
Todo programa desde el más grande hasta el más pequeño tiene una forma de persistir o almacenar los datos a lo largo del tiempo, tipicamente el software encargado de esta tarea son las bases de datos.
Y las bases de datos en si no es un tema muy sencillo, hay varias formas de clasificar a las bases de datos, por ejemplo, si nos basamos en la forma en la que se estructuran los datos podriamso hablar de SQL, que utilizan esquemas fijos como las tablas, y las NoSQL que utilizan distintas estructuras como los documentos, los grafos, o los pares claves y valor. O si nos basamos en su ubicacion, tambien podriamos hablar de bases de datos distribuidas, es decir de multiples bases de datos interconectadas, o tambien si son open source, privativas, y así.
Asi que no es necesario que las conozcas todas, pero si como minimo yo recomendaria probar 3 bases de datos distintas. Una base de datos SQL, como podria ser MySQL, PostgreSQL, SQlServer, Oracle, y demas y dos NoSQL, una orientada a documents como Mongodb, Couchdb, Firebase (Firestore), y otra de pares clave y valor, como podria ser Redis.
Por ejemplo muchas aplicaciones moviles hacen uso de Sqlite, que es una base de datos sql que alamcena datos en un archivo pequeño, o muchas aplicaciones web y moviles usan firebase para poder almacenar datos en tiempo real, y muchas empresas hacen uso de bases de datos sql.
Asi que si conoces unas cuantas, de las más populares, puede darte una vision más amplia de como estan funcionando muchas aplicaciones que usas en tu día a dia, ademas que llegaras a necesitar usar una en algun momento.
Maquinas Virtuales y Contenedores
Ya sea si creas software para la web o programas de sistemas que esperas que funcionen en distintas arquitecturas de computadores, el aprender a usar un software de Virtualizacion como Virtualbox, VMWare o Hyper-V, es muy util para poder crear distintas maquinas que simulen computadores de nuestros usuarios.
- Usandolas puedes crear entornos aislados con distints sistemas operativos
- Puedes intentar reproducir los errores que pueden obtener tus usuarios
- Puedes emular entornos con poco Hardware al especificar la cantidad de RAM o CPUs
- o Puedes practicar las configuraciones que harias en un servidor cuando vayas a subir una aplicacion
Ahora si bien en muchos años atras las maquinas virtuales se usaban mucho para automatizar el despliegue de aplicaciones, estan han ido perdiendo popularidad debido a la aparicion de los contenedores.
Los contenedores a diferencia de las maquinas virtuales no crean un sistema operativo completo, solo crean subprocesos con progrmas aislados para que puedas ejecutar software alli, son como maquinas virtuales más minimalistas y optimizadas si asi lo quieres ver, aunque el temá es más amplio.
Entre estos programas que permiten crear contenedores podemos encontrar a Docker. Esta herramienta te permite crear un entorno aislado para cada proyecto de cualquier lenguaje (Java, Python, Javascript, Go, etc) es como empaquetar todo tu proyect incluyendo la base de datos, servidores, y cualquier otro software. Y este se usa para poder recrear tu entorno de desarrollo en cualquier lugar y cuantas veces sea necesario.
Este es de las formas favoritas actualmente para poder desplegar proyectos de plataformas de la nube, si has probado plataformas como Vercel, Heroku, Railway, Render, bueno en gran parte estas funcionan gracias a este tipo de herramientas que permiten que cada proyecto que subas funcione en un entorno aislado dentro de un contendor.
Aunque tambien puedes usarlos para desarrollo por ejemplo creando una base de datos ailada para cada proyecto, configurando todo tu proyecto web para que se despliegue con un solo comando, o para que tu aplicaicon pueda escalar automaticamente, creando más instancias.
Herramientas de Documentacion
Ya sea si creas aplicaciones de escritorio, aplicaciones moviles o web, estos días el crear una documentación de tu proyecto es muy importante para que puedas continuar mejorandolo y tambien para dar a conocer como usarlo. Ahora Actualmente muchas documentaciones se encuentran en internet, subidas como un sitio web, y si te estas preguntando como es que estas funcionan, bueno no es que estas son creadas desde cero y hay que saber mucho HTML y CSS, en realidad ya hay progrmas que permiten crearlos facilmente.
Asi que sin importar el lenguaje que uses, cuando necesites de una pagina para dar a conocer tu proyecto, puedes usar los generadores de sitios estaticos o abreviados SSG (de Static Site generators).
Estos son progrmas que desde consola te generan todos los archivos de un sitio web, para que simplemente lo abras con tu editor de código y empieces a hacer modificaciones.
Proyectos de Rust, Java, Go, Python, Javascript, usan este tipo de herramientas, entre las que podemos encontrar a :
- Hugo (creado en GO)
- Jekyll (Creado en Ruby)
- Docosaurus (CReado en Javacript)
- MdBook, Creado en Rut
- Astro
Y aunque algunos de estos si pueden que necesites de conocer mucho sobre codigo. Proyectos como Hugo o Jekyll son muy faciles de usar aun si no eres un programador muy experimentado en la web.
De hecho hay una lista bastante grande, y para todos los gustos: https://jamstack.org/generators/
asi que si aprendes a usarlos, podras pasar de solo crear un repositorio de github a crear tambien documentaciones para que cualqueir desarrollador o usuaro pueda conocer más de como usar tu software.
Otras herramientas
En fin estas herramientas que te he mencionado, no tienes que aprenderlas todas de una vez, lo principal es que crees el código de tu aplicacion, y estas herramientas simplemente te ayuden a crear tu proyecto con mucha más calidad o en menor tiempo, asi que estudialas hasta el punto que lo creas suficiente, porque estas son un mundo en si, y hay distintas areas de trabajo que las usan, como en DevOps, Seguridad, o Administracion de sitemas de la nube, por ejemplo .
En mi caso solo he mencionado las que estan más enfocadas en el desarrollo de software y que te pueden ayudar a ser un mejor profesional.
Otras herramientas que tambien pueden ser importantes para cualquier programador independientemente del lenguaje son
- Herramientas de colaboracion
- Administradores de paquetes
- Testing Frameworks
- Herramientas de Debugging
- Software de Acceso Remoto
entre otras, las lista continua por supuest, pero recuerda que el tiempo es limitado asi que debemos tener en cuenta a que dedicar nuestras horas de estudio para poder llegar a cumplir nuestro objetivos.
Si tienes otras herramientas que quieras recomendar aprender a cualquier programador, puedes dejarla en los comentarios, y nos vemos en un siguiente video.