Ignacio Acevedo, desarrollador de Pipoll

¿Quién puede trabajar en medio del desorden? ¿En un escritorio con restos de comida? ¿Papeles? ¿Pelos de gato? ¿Boletas del Oxxo? ¿Cables por todos lados? Más de alguien seguramente puede pero, aunque pueda, no suele ser lo más recomendable. Más aún trabajando en equipo. Lo mismo pasa con el código. Un código ordenado y limpio es clave para generar buenos resultados, pero ¿cómo hacerlo? Apoyándonos en los linters.

Cuando decidimos que queríamos medir la Experiencia de los desarrolladores (DX), investigamos cómo se generan culturas en las que los devs aman trabajar, y una de las cosas que más nos llamó la atención fue el énfasis que se da en medir el uso de herramientas de productividad y automatizaciones que agilizan el proceso de desarrollo. Son de esas cosas en las que ni piensas cuando el proyecto en que estás trabajando ya las tiene. Pero cuando faltan, te hacen la vida imposible. En particular queremos hablar sobre los linters, que a nuestro parecer representan un buen trade-off entre dolores de cabeza configurando versus dolores de cabeza desarrollando.

 

Linters

Los linters son herramientas que permiten detectar errores en el código, problemas de estilo, y posibles ineficiencias en el mismo. Son importantes para que todos sigan las reglas de estilo que el mismo equipo decida (mediante un archivo de configuración común), evitando que el código se vea desordenado y ayudando a que este sea fácil de entender por los devs del equipo. Además, al detectar errores de sintaxis, permiten ahorrar tiempo de desarrollo, y con las sugerencias que entregan se puede tener un código más robusto evitando ciertos code smells y que a la larga se traduce en menos deuda técnica acumulada.

Son relativamente fáciles de implementar y te entregan mucho cuando se ocupan en el trabajo cotidiano. Si bien es algo que generalmente se tiene configurado, es bueno mostrar alternativas y distintas maneras de utilizarlos. Con nuestros clientes encontramos algunos devs que declararon que no se utilizaban linters comunes en su empresa.

Hay distintas maneras de utilizar linters, hay para todos los lenguajes de programación (algunas alternativas son ESLint en javascript, pylint en python, rubocop en ruby, etc), y hay varias formas de incorporarlos a tu flujo de trabajo.

 

Algunas alternativas para utilizar linters

1. Usar a “mano” el linter antes de subir un cambio en el código. Este podría ser el nivel más básico y es simplemente ejecutar esta herramienta sobre tu código manualmente desde la consola, revisando las sugerencias que te entregue como output.

Linterns en Pipoll

Linterns en Pipoll

 

2. Agregar una extensión a tu editor de texto para ejecutarlo continuamente sobre el código. Es lo más común de ver en los proyectos, ya que puedes arreglar tu código en el instante en que cometes un error o violas una regla de estilo, aumentando tu eficiencia al programar.

Linterns en Pipoll

 

3. Configurar hooks para revisar el código antes de cada commit. Esta opción es un poco más autoritaria (siempre por el bien de la comunidad) y consiste en configurar git para ejecutar el linter sobre los archivos que se están modificando. Si alguno no cumple el estándar no se puede realizar el commit.

Linterns en Pipoll

 

4. Todas las soluciones hasta ahora requieren que cada miembro del equipo instale y configure las herramientas, lo que conlleva el riesgo de que alguien (por desobediencia o probablemente más por pereza) simplemente decida no hacerlo. Si se quiere un mayor control a nivel de proyecto se pueden configurar checks en el repositorio que ejecuten el linter para todas las Pull Requests. Esto permite que no se puedan mergear los cambios a las ramas comunes hasta que el código cumpla con los estándares mínimos. Se puede hacer a nivel de CI, agregando un paso que falle si no pasan los linters, pero hay herramientas como Hound en el Marketplace de GitHub que van un paso más allá y dejan comentarios en el código que viola las normas.

Linterns en Pipoll

De qué manera utilizar los linters o cuál utilizar para el lenguaje de programación con el que trabajen, depende netamente de tu equipo. Pero es importante utilizar estas herramientas para evitar tener un dolor innecesario en los devs, y permitir que el equipo trabaje de forma más eficiente.

Ahora iré a limpiar mi escritorio.