Mis softwarevaches para trabajar (y II)

Continuando el post que escribí el otro día acerca de los cachivaches que uso para trabajar, voy a hablar también un poco de el software que utilizo.

Trabajo programando en Python sobre OS X, de manera que muchos de los programas que comento están orientados a este entorno. Mi trabajo es desarrollando código para servidores que luego corren en Linux, así que muchas de las herramientas pueden usarse en Linux. He usado recientemente también HTML, JavaScript y Ruby, siendo el entorno totalmente aplicable.

Entorno general

  • Dropbox: Además de poder tener información compartida en diferentes ordenadores, es especialmente útil el que sea considerado una carpeta más del ordenador, lo que permite utilizar exactamente lo mismo simplemente haciendo enlaces simbólicos. Hablo más al respecto en otros apartados.
  • Alfred: Intento usar el ratón con moderación y utilizar lo máximo posible los atajos de teclado y demás.Es más rápido y más automático. Como parte de esa estrategia, Alfred funciona muy bien. Básicamente, permite abrir o ir a otras aplicaciones con un atajo de teclado, tecleando el nombre de la aplicación. Es parecido a Spotlight, pero más potente. Permite además hacer algunas acciones que haría falta abrir Finder, sólo con el teclado.
  • 1Password: Para poder manejar de forma (relativamente) fácil todo el giriguai de contraseñas y logins, además de otras notas que quieres tener a mano, pero que son “información” sensible, como puede ser el número de la cuenta del banco o de seguridad social. Se sincroniza con Dropbox, de manera que se puede compartir fácilmente la información entre ordenadores (trabajo/casa, etc)
  • ssh: No me gusta nada teclear contraseñas cuando uso ssh. Así que siempre utilizo ficheros de clave pública/privada para poder usar el fichero llave, configurado con alias, lo que resulta muy cómodo. Aquí hay un tutorial, pero si se busca por Internet se puede encontrar más información particularizada para cada sistema.
  • iTerm2: A pesar de que Terminal funciona bastante bien, el poder partir las terminales en vertical u horizontal, tantas veces como sea necesario es extremadamente útil. Tiendo a tener abiertas muchas terminales a la vez, y por la razón que sea, no me aclaro con pestañas (tabs), así que me ayuda a agrupar terminales relacionadas por tarea/servidor/lo que toque en cada momento.
  • VirtualBox: Para configurar en caso que necesite máquinas virtuales. Tiendo a utilizar máquinas virtuales lo mínimo imprescindible, porque para la inmensa mayoría de las cosas, Python funciona igual en OS X. Pero a veces es imprescindible utilizar una máquina virtual.
  • MacPorts: Para instalar programas de Open Software en OS X. No me entusiasma, sobre todo comparado con los (fantásticos) gestores que hay en Linux (yum y apt-get). Hay que compilar todo en tu máquina, lo que a veces es lento y pesado, además de obligar a instalar XCode. No he probado Homebrew.

Programando

Lo reconozco, termino utilizando casi exclusivamente la línea de comandos para prácticamente todo. Hace un tiempo utilizaba más IDEs, e intentaba agrupar todo con ventanitas, menús de configuración, etc… Pero poco ha poco he ido migrando a utilizar Unix como IDE y prácticamente utilizar casi todo por línea de comando. Tengo algunos comandos y configuraciones en Dropbox, de manera que puedo configurar un ordenador nuevo (o máquina virtual) en muy poco tiempo para tener todo mi entorno habitual.

Además de utilizar los comandos habituales en este caso, como lsgrep find, para mí es imprescindible ack para buscar código. Funciona como un sustituto mucho más potente y sencillo de grep. Es posible usarse desde vim, pero lo utilizo desde la línea de comando.

A la hora de correr las pruebas, usar el intérprete para hacer algo o incluso depurar, utilizo la línea de comandos. Para depurar en Python, he usado alguna vez Eclipse, pero me resulta más natural utilizar print, o en caso de necesitar algo más sofisticado, simplemente usar pdb.

Otra herramienta imprescindible es git como control de versiones. Lo utilizo desde la línea de comandos (es, además, una herramienta pensada para ser usada así, a pesar de los esfuerzos por hacer otras aplicaciones gráficas encima). Utilizo sin embargo gitx para poder ver mejor el árbol de commits y, en caso de necesitar realizar un diff o merge complicado, uso Meld (aunque es complicado de instalar en OS X).

Vim

Durante mucho tiempo utilicé Eclipse como editor principal. Creo que pyDev funciona muy bien. Sin embargo, al final utilizaba Eclipse sólo para escribir, con lo que no aprovechaba todas las características de un IDE, y tenía sus desventajas, como que es más pesado.

Así que, a través de un compañero de trabajo, de decidí a utilizar Vim de manera más habitual, a pesar de que ya lo utilizaba para editar rápidamente algunos ficherillos, sobre todo en servidores. Así que me armé de valor y alguna chuleta y pasé a usarlo a diario. No me arrepiento para nada, y a final, cuando entra, es muy agradecido de usar. Utilizo MacVim en general porque resulta más agradecido para abrir diferentes ventanas y tener el código a mano cuando estás trabajando con un proyecto. Ademas de integrarse con el sistema operativo en cosas como cortar y pegar, etc.

  • Vim es muy rápido y ligero. En general, las operaciones como buscar, sustituir, navegar, etc, son rápidas, muy rápidas. Hasta que no lo pruebas, yo creo que no te das cuenta de lo lento que estas operaciones pueden ser en un IDE.
  • Es una opción a largo plazo. Vim lleva disponible unos 20 años. Vi unos 40. No se ve que esto vaya a cambiar, así que, aunque cueste aprenderlo, es casi seguro que va a seguir disponible en el futuro. Igualmente, hace falta tiempo para usarlo de manera eficaz, además de poder estar cada día aprendiendo un comando nuevo y no parar durante años.
  • La curva de aprendizaje es una locura. Y, además, no hay (o yo no he sido capaz de encontrar) buenos tutoriales que te ayuden paso a paso. A pesar de que, sabiendo pocos comandos, uno puede funcionar, la verdadera potencia de vim se saca cuando se conocen bien las opciones y no hay que pensar el qué se va a hacer. Esto necesita automatizar los comandos y bastante tiempo hasta que “sale solo”. Al principio resulta muy raro, porque la tendencia natural es utilizarlo “a la manera tradicional” en lugar de utilizar los comandos propios. Por ejemplo, borrando una palabra carácter a carácter (xxxxxx) y luego entrar en modo inserción (i) y escribir la palabra nueva, en lugar de utilizar cw (Change word) directamente.
  • Vim corre en todos lados. En todas las máquinas Unix (al menos todas las que yo he visto) está instalado  por defecto, así que no hace falta instalar nada. Esto te da muchas opciones, sobre todo si trabajas con muchos servidores remotos.
  • Hace falta configurar muchas cosas. Desde los colores a utilizar a los diferentes plugins. Así que hay que dedicar tiempo a ponerlo todo a tu gusto y de la mejor manera. Por defecto no es demasiado agradecido. En mi caso, intento utilizar pocos plugins, para no depender de ellos, pero hay algunos que son utilísimos. Mi favorito es Command-T y uso también syntastic como corrector sintáctico, que realiza un análisis estático del código y resulta muy útil para detectar problemas antes de ejecutar el código. Syntastic puede resultar pesado para ficheros largos, lo que me pone de los nervios. Otra razón para no tener ficheros muy largos.
  • Comparto toda esa configuración usando Dropbox, incluyendo plugins y .vimrc, de manera que si hago un cambio en una máquina, lo tengo listo en el resto de ordenadores.

Por resumir, Vim es extremadamente potente, pero es raro y muy difícil de aprender a usar. Una vez que sabes usarlo, permite trabajar con el texto pensando en acciones globales(quiero mover este texto de aquí a aquí, quiero reemplazar esta palabra con esto, quiero pasar esta palabra a mayúsculas) en lugar de en acciones más pequeñas (corto este texto y lo pego tres líneas más arriba, borro esta palabra y escribo otra en su lugar, borro esta palabra y la escribo en mayúsculas). Por supuesto, es más complicado que esto, pero permite tener comandos para la mayoría de las acciones que suelen ser habituales a la hora de programar, lo que hace que el editor sea lo más transparente posible y no “perdamos” en cambiar el texto una vez tenemos claro qué queremos hacer con él. No voy a decir que es más rápido, porque probablemente la mayor parte del tiempo pasado en frente de un editor se pase pensando, leyendo y decidiendo qué hacer. Además, si caemos en el Vim-golf de querer exprimir cada pulsación puede ser incluso lento. Pero permite pensar en un plano un poco más elevado en la edición y no tener tanto que “bajar a las trincheras” de borrar-copiar-reescribir, que saca de la concentración y resulta pesado.

En fin una vez uno se habitúa a usar Vim, resulta tan natural, que me paso la vida dado a ESC cuando termino de escribir en otros sitios (correo, editor del blog, etc) e intento moverme con hjkl en lugar de los cursores.No es que pase siempre, pero a veces sucede.

Resumen

En fin, un poco esto es todo lo que utilizo día a día para trabajar. Como he comentado antes, trabajo con Python a tiempo completo y hay muchas herramientas que utilizo que están muy orientadas a eso. No sé si es posible trabajar día a día con Java usando sólo Vim (no quiero saberlo, por otra parte), pero desde luego en Python o Ruby es totalmente posible.

Sin duda, una de las características mas interesantes que tiene OS X es que es un sistema Unix, de manera que todo este entorno para la programación resulta fácil de configurar y es un sistema más amigable que Ubuntu (por nombrar un sistema Linux amigable). Resulta muy natural, si te dedicas a programar para servidores Linux, programar usando OS X y puedes replicar prácticamente todo tu sistema sin grandes dolores de cabeza. Con excepciones, por supuesto. Creo que este punto ha sido importantísimo para el gran auge que han tenido os Mac en desarrollo en los últimos años.

One thought on “Mis softwarevaches para trabajar (y II)

  1. Pingback: Mis cachivaches para trabajar « Wrong Side of Memphis

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s