Sobre editar…

Developers still spend a lot of time with plain text. No matter how many wizards and other sorcerers we develop most coding is still in plain text. Most of the information you keep should also reside in plain text because you never know if the tool you are using will be around in five years. It’s a good bet that you’ll be able to read plain ASCII (and probably Unicode) for the next century or so.

The Productive Programmer, Neal Ford y David (FRW) Bock, O’Reilly 2008

El editor de texto es quizás la mas preciada de las herramientas para un programador. El código de cada uno de los programas y scripts que escribimos esta en texto plano, y como bien dice la cita anterior incluso los datos que manipulan esos programas están de alguna forma en texto plano también.

¿Pero le damos la importancia que merece? Como programador, en un día normal, si excluyo las reuniones y conferencias telefónicas, el resto del tiempo, estoy frente a un editor de texto o un navegador web, rara ves me enfrento con herramientas que no reciban datos a través del teclado. Esto da la pauta de lo mucho mejor que se puede programar si se utiliza bien el editor de texto. Hasta llegue a leer en algunos artículos de distintos blogs sobre que al entrevistar gente para puestos de IT una de las preguntas que no puede faltar es “¿Que editor de texto usa?” (Por cierto, las respuestas “validas” que daban los autores eran Emacs, Vim y Textpad).

Bram Moolenaar, autor de vim en su charla de Google Edu sobre como editar texto de forma efectiva distingue tres pasos para ser mas efectivo:

  1. detect inefficiency
  2. find quicker way
  3. make it a habit

Son tres pasos muy simples, que imponen una curva de aprendizaje bastante alta, dado que al principio vamos a encontrar muchas insuficiencias en la forma que editamos texto, y de hecho hasta tengamos que cambiar el programa que usamos para encontrar mejores formas de hacer las tareas diarias.

El mismo Moolenar tiene un muy buen texto “Seven habits of effective text editing” en el que distingue varios puntos en los que uno tiene que poder contar con su editor de texto para ser efectivo:

  • Move around quickly: Navegar el texto de forma cómoda, sin depender del mouse o teclas que se ubican lejos de la posición normal de las manos en el teclado (como pageup/down y las “flechitas”).
  • Don’t type it twice: Poder tener varios textos copiados en varios clipboards y elegir cual pegar, facilitar elegir donde va a ser pegado el texto, permitirme hacer tareas como reemplazar X palabra en el texto que pegue, etc.
  • Fix it when it’s wrong: “typos” es uno de los tipos de bugs mas faciles de cometer y donde el editor de texto te puede dar mas ayuda.
  • A file seldom comes alone: ¿Que programa mas o menos complejo ocupa un solo archivo de codigo fuente? La habilidad de editar mas de un archivo a la ves es obligatoria.
  • Let’s work together: El editor en si es solo una parte de todo el arsenal de herramientas para modificar texto, ¿Para que hacer que el editor ordene alfabéticamente algo cuando ya tengo sort? ¿Para que hacer una compleja función de buscar en todos los archivos del directorio cuando ya tengo grep?
  • Text is structured: Que el editor nos ayude a mantener la estructura del texto/código, como la identacion en Python (si usas espacios que te autoidente con espacios, si usas tabs con tabs), que te avise cuando no cerraste una llave en C, o si tenes un end sin begin en un bloque de Ruby).
  • Make it a habit: Encontrás la mejor forma de hacer una tarea, sabes que te ahorraste 10 o mas pasos que hubieras tenido que hacer para obtener el mismo resultado de otra manera: ¿Vas a tirar ese conocimiento a la basura? Editar texto es algo que aprendes y mejoras todos los dias y no tenes por que perder ese conocimiento cuando pases a trabajar en otro lenguaje o en otro sistema operativo, utiliza un editor que te permita abstraerte de esa particularidad y lo tengas disponible en cualquier lado.

En su libro “The Pragmatic Programmer” (Addison-Wesley 2000) Andrew Hunt y David Thomas distinguen tres grandes puntos al momento de elegir el editor: Configurable, Programable y Extensible.

Configurable: hace referencia a la capacidad de editar cosas como los colores, tipografía, y apariencia en general. Suena trivial pero como aclare antes la mayor parte del tiempo que uno pasa frente a la computadora programando lo hace en frente del editor de textos, es muy importante que luzca amigable, cómodo, y nos permita resaltar las cosas que nos importan.

Hay un viejo tip entre programadores que dice que cosas como los “magics numbers” (números dentro del código que aparezcan directamente en las funciones y no declarados en una variable o constante cuyo nombre nos ayude a identificar la razón de la misma) deben resaltarse con un color chocante, que salga del esquema de colores al que estamos acostumbrados hasta si se quiere decir así “se vea feo”, para que tratemos de tener la menor cantidad (o si es posible ninguno) de ellos.

Programable: Muchas tareas que hacemos cuando escribimos texto responden a un patrón, y la mayoría de esos patrones podemos programarlos para que el editor de texto lo haga por nosotros. Extender el editor con un lenguaje de scripting como Python o Perl puede resultar muy útil cuando trabajamos, a veces invertir 10′ en una pequeña extensión nos ahorra horas. Hay editores que tienen su propio lenguaje de scripting, otros que utilizan lenguajes conocidos (Emacs con Lisp), y otros que brindan ambas opciones (Vim tiene bindings para Python, Perl y Ruby, y aparte tiene su propio “lenguaje”).

Extensible: Aparte de la configuración y las opciones, esta el hecho de poder extenderlo mas allá del uso que le damos hoy, en este punto es difícil distinguir una buena herramienta que este preparada “para lo desconocido”, pero nos ayuda mirar al pasado y ver que editores como vim, emacs, y otros han sido usados para APL, C, Pascal, y después se adaptaron a lenguajes como Ruby y Perl sin mayores cambios.

¿Como elegir un editor? Joel Spolsky tiene el “The Joel Test” donde habla de 12 pasos a seguir para tener mejor codigo y en el punto 9 dice “Las mejores herramientas que el dinero pueda comprar”, y si bien coincido con la idea que el gasto en herramientas y programas para que los equipos de programadores trabajen mejor y mas cómodos se traduce en mejor código, en el caso del  editor de texto encontré, en mi experiencia, que los mejores son gratuitos.

Las funcionalidades de editores como Vim y Emacs no estan en Ultraedit, Textpad o BBEdit, existen varios comparaciones de editores, y como la mayoría de las comparaciones suelen estar viciadas por quien hizo la comparación, así que un buen criterio el que puede dar una fuente neutral de información como Wikipedia.

Les dejo a ustedes la tarea de elegir uno, pero el desafió es hacerlo conscientemente, no dejar que el entorno en el que trabajan o el lenguaje de programación que usan elija las herramientas con las que tienen que lidiar a diario. Me gustaría leer sobre su elección en los comentarios.

9 Responses to “Sobre editar…”

  1. juancito Says:

    probe algunos ides bastante comodos pero funcionan solo cuando estoy en mi maquina, si tengo q laburar en otro lado tengo q instalarlo y muchas veces no existe esa posibilidad.
    asi q prefiero usar un editor q esta presente en todos los lugares donde trabajo y a su vez es potente (cuando t acostumbras a usarlo).
    vim es mi eleccion.


  2. meneame.net Says:

    Sobre editar……

    En este articulo se explica la importancia de los editores de texto y su injerencia en el mundo de la programación. Hay algunas recomendaciones sobre como elegirlos y también se nombran las mejores opciones….


  3. Santiago Says:

    Pruebo editores de texto desde hace mucho tiempo y ninguno (comercial o free) me termina de convencer. De momento no tengo un editor de cabecera. El último “gran” editor que usé por mucho tiempo es UltraEdit (mencionado arriba), que hace poco fue destronado por Notepad++ (por mencionar editores para win32). Coincido que lo free tiene su ventaja: es sexy cuando una herramienta no-comercial le pasa el trapo a una comercial.
    La mejor forma de aprender a usar una herramienta nueva es experimentar con ella, haciendo muchas veces que se enlentezca el laburo (por esto es que mucha gente tiene reticencia al cambio, además de la paja de cambiar). Pero así y todo, y por experiencia, creo que es la mejor manera de aprender una herramienta: usándola realmente para el laburo, y no “practicando a ver qué pasa” (aplicable a sistemas operativos también, guiño guiño).
    Dicho sea, cierro con lo mismo que abrí el comment, y es que no tengo un editor de cabecera. ¿Por qué? Sencillamente, me faltan probar muchos más antes de emitir una valoración sensata.


  4. qwerty Says:

    @Santiago: Justamente el objetivo del post es motivar esa búsqueda de forma consiente. Hay que elegir un editor, tanto sea para programar como para editar. Hay extremistas que dicen que una ves que tenes un editor de cabecera lo tenes que utilizar para todo, incluyendo emails y posts en blogs. Particularmente aun no adquirí esa destreza (tengo instalado un plugin en Thunderbird para usar vim desde ahí , pero no me convence, y de hecho me estan dando ganas de pasar mi cliente de email a mutt justamente para aprovechar vim ahi).
    Pero en lo que quiero hacer fuerza es en resaltar la importancia de elegirlo bien, de lo mucho que se gana, y si bien algunos editores tienen una curva de aprendisaje grande, se paga sola.

    Yo cuando entre a mi trabajo actual estaba verde con vim, pero me lo puse como uno de los objetivos, y ya me habia desencantado con otras opciones (Emacs en Linux/FreeBSD, y EditorPlus/UltraEdit en Windows).


  5. juancito Says:

    ya q estan los dos aca aprovecho para hacer una sugerencia. q les parece aumentar un cachito el tamanio de la fuente y usar una sans serif.
    no mejoraria la lectura desde la pantalla?


  6. qwerty Says:

    A mi gusto Monaco es una de las mejores fuentes.

    Existen varios criterios sobre elegir fuentes para programadores, de hecho aca hay una lista de las mas comunes. Da para charlarlo en otro articulo por ahi.

    Este es justo el final de mi .vimrc:


    if !has("unix")
    set shell=cmd.exe
    set shellcmdflag=/c
    set noshellslash
    set guifont=Lucida_Console:h10:cANSI
    else
    set guifont=Monaco\ 14
    endif


  7. Diario de un programador » Archivo del blog » Esenciales 2009 Says:

    [...] Mark Pilgrim, autor de Dive Into Python (y preparando Dive Into Python 3) hace cada tanto una lista del software que esta usando llamada “Essentials” (la ultima es “Essentials 2008”) en la que enumera las versiones que usa, que tan contento esta y que opciones esta viendo. Me parece interesante de hacerlo porque las herramientas que cada uno utiliza son muy importantes y siempre es bueno hacer una elección pro-activa de las mismas. [...]


  8. Diario de un programador » Archivo del blog » Herramientas: Una buena obsesión Says:

    [...] ya mencioné en otros posts la elección de las herramientas con las que trabajo es una obsesión, una sana pero exigente [...]


  9. magia roja Says:

    Buenas noches, este wordpress es excelente. Es excelente leer esto dando vueltas. Sigan comentando con esta excelencia. Hasta pronto


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>