En este post voy a describir las herramientas que uso para desarrollar, independientemente del lenguaje/framework que se use, aunque en mi caso es python/django y algo de javascript.

Terminal

Para la shell uso zsh, específicamente Oh-my-zsh el cual tiene una serie de plugins(autocompletado, git, etc) que agilizan el trabajo en la terminal.

También uso tmux, el cual es un multiplexor de terminal, permite poder trabajar con varios programas a la vez desde una única terminal, asi como dividir la pantalla, manejar sesiones, etc.

Se puede personalizar tanto en apariencia como los atajos de teclado, asi se puede trabajar de la misma forma en diferentes terminales y/o sistemas operativos.

Sistema de control de versiones

Por lo general(casi siempre) uso git para el control de versiones de los proyectos en los que trabajo, suelo usarlo desde la terminal y también desde un programa llamado GitX me gusta porque es sencillo y me sirve para lo que requiero (ver detalles de commits, navegar en el historial, hacer commits) otras accciones como crear ramas, hacer merge, rebase y demás, me gustan trabajarlas desde la terminal.

Existen otras herramientas muchisimo mas completas como SourceTree, GitTower pero me quedo con la sencillez de GitX.

Otra herramienta bastante potente es Magit, es un paquete de emacs el cual brinda una interfaz para trabajar con git.

Editor/IDE

Desde hace algunos meses estoy usando emacs como editor principal, anteriormente usaba PyCharm el cual es genial también.

Emacs es bastante personalizable, liviano(en comparación con PyCharm) y se puede extender su funcionamiento mediante el uso de elisp, el cual es un dialecto de lisp en el que esta construido emacs, ademas existe una extensa cantidad de paquetes que le dan a emacs muchísima mas funcionalidad.

En un futuro post pondré los paquetes de emacs que uso.

Varios

Direnv es una herramienta que permite configurar variables de entorno por proyecto, es decir cuando se ingrese por ejemplo a la carpeta de un proyecto en django desde la terminal, direnv automaticamente configurará las variables de entorno que tengamos configuradas en un archivo .envrc y cuando salgamos de esa carpeta eliminará las mismas para evitar conflictos con otros proyectos.

EditorConfig es una “herramienta” que nos permite poder definir en un archivo llamado .editorconfig ciertas reglas acerca del formato de los archivos del proyecto en el que estemos trabajando. Existen plugins para muchos editores/IDEs, incluso algunos ya lo traen por defecto.

Por ejemplo podemos definir que vamos a usar espacios para la indentación de los archivos .py y dos espacios de indentación para los archivos .js, de este modo el editor/IDE puede reconocer eso y se configurará para respetar esas reglas, así independientemente del editor/IDE que se use todos los que trabajen en el proyecto respetarán las mismas reglas.