En el trabajo, las dos aplicaciones en las que más centro mi atención son la terminal, donde hago cosas, y el navegador, donde las pruebo. No me gusta usas demasiadas aplicaciones porque eso me supone tener que aprender configuraciones y formas de trabajar que realmente no aportan demasiado. Además, como en el trabajo uso Mac OS y en casa Ubuntu, es un lío tener que usar distintas aplicaciones para lo mismo solo porque no estén en un sistema operativo u otro. En esta entrada me gustaría describir cómo y por qué uso la terminal.

imagen de terminal

Primero decir que las dos máquinas donde trabajo son:

  • Mountain Nickel 13”, corriendo Ubuntu 16.04 “Xenial Xerus”, mi portátil personal.
  • MacBook Pro 13” Retina (2015) corriendo Mac OS 10.11 “El Capitán”, mi portátil corporativo

Ambas máquinas disponen de terminales *nix, que desde mi punto de vista es la terminal ideal para un desarrollador. A partir de aquí, intento que el funcionamiento de ambas terminales (y todo el software que corro en ellas) sea lo más similar posible. Además de las herramientas que proporcionan out of the box, yo también incluyo:

  • Zsh: shell alternativa a bash que tiene algunos detalles muy útiles para los que usamos mucho la terminal. En la presentación Why Zsh is Cooler than your Shell se pueden ver alguna de estas ventajas.
  • Oh My ZSH: conjunto de configuraciones y plugins construidas alrededor de zsh. Es algo pesada, pero aporta configuraciones muy convenientes con solo un par de clicks.
  • Vim: Editor de texto extremadamente configurable y eficiente. Lo uso para todo casi todo (vale, para proyectos Java empleo IntelliJ IDEA).
  • Tmux: Multiplexador de la terminal que además permite crear sesiones accesibles por ssh. Es ideal para hacer pair programming.
  • The Silver Searcher: Una herramienta para buscar texto alternativa a grep. Es muy muy muy rápida y sencilla de utilizar. La empleo para buscar y reemplazar código de forma masiva. Un must clarísimo.
  • Git: El sistema de control de versiones distribuído que uso para todos los proyectos, tanto profesionales como personales. Además de eficiente, también tiene un cli que permite hacer todo en la terminal fácilmente. Dejo por aquí la configuración que uso normalmente.

Estas son las herramientas que yo añado, pero uso muchas otras que me provee el sistema, algunas de ellas:

  • tail
  • find
  • grep
  • sed
  • curl
  • ssh
  • top
  • ps

Creo que no me dejo nada.

Nestor suele decir que él no usa un IDE, porque unix es su IDE. Un entorno de desarrollo integrado es una aplicación que agrupa un montón de herramientas (de búsqueda, refactoring, edicion de texto, linters…) que usar conjuntamente para desarrollar software. Unix provee muchas herramientas que si se saben usar a la vez, hacen que no necesites un IDE concreto. Por ejemplo, así es como reemplazo texto masivamente, sin usar el reemplazar de ningún IDE.

ag miVar ~/Development/miProyecto/ -l | xargs sed -i 's/miVar/miNuevaVar/g'

Con ag -l listo todos los ficheros donde encuentro la ocurrencia buscada. Con xargs, le paso este listado a sed, el editor de texto en memoria de unix, al que también le paso la orden de reemplazar la ocurrencia por la nueva palabra a todo el fichero. Lo que gano con esto es: