Incrementar tu productividad como programador
Algunas recomendaciones para aumentar tu productividad mientras programas
En el artículo de hoy voy a dar algunos consejos para poder mejorar la productividad mientras programamos. Es cierto, que todo el tema de ser más productivo depende de la persona, pero intentaré dar alternativas en todos los casos.
Estés a gusto con tu “setup” actual o no, creo que leer este post puede darte alguna idea interesante :).
Aprende a usar tu teclado
Todavía me sorprende ver a muchas personas que al programar miran el teclado o hacen piruetas con una mano para llegar a todas las teclas. Va a sonar a anticuado, pero si es tu caso, deberías plantearte seriamente el hacer algún curso de mecanografía. Solo te tomará uno o dos meses desaprender y volver a aprender a usarlo bien y con el tiempo podrás ir mejorando tu velocidad.
Hay muchas herramientas gratuitas online que te ayudarán a mejorar. Son dos meses de tu vida para aprender algo que te acompañará siempre.
Dicho esto, no hace falta volverse loco y aprender distribuciones de teclado exotéricas como Dvorak ya que el impacto final en tu productividad no marcará mucho la diferencia que usar QWERTY.
Control de mayúsculas
Lo primero que hago cuando compro un teclado nuevo o configuro un nuevo ordenador portátil, es sin duda hacer que el bloque de mayúsculas se comporte como un control left.
La posición del bloque de mayúsculas en el teclado es muy ventajosa ya que se encuentra en la línea central desde donde parten tus manos para pulsar cualquier tecla. En cambio, la posición por defecto del control (que es muchísimo más utilizado que las mayúsculas) dependiendo del teclado puede implicar tener que desplazar la mano izquierda hacía la esquina inferior.
Además, hay algunos teclados (como el MacBook Air desde el que estoy escribiendo) que meten la tecla de función en la esquina y empujan el control hacia la derecha, dificultando todavía más si cabe su pulsación.
Parece una tontería, pero una vez que te acostumbras a tener el control al lado de la tecla A la productividad aumenta considerablemente.
Configuración en macOS
En este sistema operativo es bastante sencillo realizar este cambio. Solo tenemos que ir a la Configuración del Sistema → Teclado → Funciones rápidas de teclado → Teclas de modificación y seleccionar la opción ‘Control ^’ en el desplegable del bloqueo de mayúsculas.
Configuración en Linux
Yo utilizo la utilidad setxkbmap para configurar la distribución de teclas. Este comando tiene un flag llamado ‘—option’ que permite pasarle modificadores. En este caso existe uno específico para intercambiar las teclas de mayúsculas por el control:
setxkbmap -layout us -option caps:ctrl_modifier
Esto configura el teclado con el layout de US y le paso la opción que modifica el comportamiento del bloque de mayúsculas para que se comporte como un control.
Configuración en Windows
Lo más rápido sería desinstalar Windows e instalar Linux. Fuera bromas, no lo he hecho nunca porque es un sistema operativo que solo utilizo para el ocio, pero haciendo una búsqueda rápida en google parece que alguien ha recopilado aquí una lista de métodos para realizar el cambio.
Si alguien conoce una forma mejor, que lo ponga en los comentarios y lo agregaré al post :)
Adicionalmente y si tu teclado soporta VIA puedes configurarlo a nivel de firmware.
Layout de teclado
Tanto si tienes que aprender a mecanografiar como si ya eres todo un experto, mi siguiente recomendación sería que aprendas a escribir en un teclado en inglés.
El motivo es sencillo: La mayoría de los lenguajes de programación están escritos en el idioma de Shakespeare y fueron diseñados por personas que utilizaban distribuciones angloparlantes.
Sin ir más lejos, citaré algunos ejemplos de porque una distribución en inglés hará que tu productividad aumente:
El punto y coma está a la derecha de la letra L. No teniendo que pulsar ninguna tecla modificadora (como shift o control) para acceder.
Los dos puntos se encuentran en la misma tecla que el punto y coma y se accede usando el shift.
A la derecha de esta tecla encontramos las comillas simples y las comillas dobles pulsando el shift.
El guion se encuentra a la derecha del 0 y la barra baja pulsando el shift.
El símbolo ‘+’ y ‘=’ se encuentran a la derecha del guion.
Los corchetes ‘[]’ están a la derecha de la letra P.
Y las llaves ‘{}’ se accede con el shift en las teclas de los corchetes.
Y hay muchos más ejemplos que convierten a esta distribución en la mejor para programar.
Al final la idea es hacer que las manos estén la mayor parte del tiempo en la línea central y no tengamos que hacer desplazamientos.
Y para los que estéis ahora mismo diciendo: ¿Si eso está muy bien, pero que pasa con la ñ o con las tildes? Acaso tengo que cambiar entre US y ES cada vez que quiera programar o escribir por un chat?
Pues nada de eso, ya que existe una variante internacional del teclado US y es que el personalmente utilizo siempre.
Esta variante utiliza las tildes, la virgulilla, entre otros como teclas muertas.
Configuración en macOS
Es muy fácil de configurar, solo tenemos que seleccionar la distribución “Estadounidense internacional - PC” como entrada de texto en las configuraciones del teclado desde ajustes del sistema.
Configuración en Linux
Con la utilidad que vimos arriba a la hora de seleccionar la distribución y las opciones, podemos usar el flag ‘—variant’ con el valor ‘intl’ para utilizar la distribución US internacional:
setxkbmap -layout us -variant intl
Ten en cuenta que este comando es stateful y que, si configuraste opciones, este comando las reseteará.
Personalmente tengo configurado para ejecutar siempre el siguiente comando cuando inicio sesión en el sistema:
setxkbmap -layout us -variant intl -option caps:ctrl_modifier
Así me aseguro de que siempre se aplica la configuración que quiero.
Configuración en Windows
Basta con seleccionar la distribución “Estadounidense internacional” o “US international” desde las opciones de configuración del teclado.
Vim motions
Tranquilo no tienes que usar vim o neovim, puedes seguir utilizando Visual Studio Code o tu editor preferido.
Vim es un editor de texto de código abierto. Vim motions por su parte es la forma en la que te mueves dentro de vim a través de tres estados: normal, inserción y visual.
La idea detrás de las motions es conseguir que tus manos no se separen del teclado y más concretamente de la línea central de un teclado Qwerty.
Cada vez que tienes que levantar la mano derecha (o izquierda) del teclado para coger el ratón y hacer un desplazamiento, estás perdiendo no solo tiempo sino foco. Y es cierto, que puedes llegar a ser un máster del ratón y hacer verdaderas virguerías con el trackpad. Sin embargo, con un buen dominio de vim motions puedes hacer todo lo que quieras en el tiempo que tardas en levantar tu mano y llevarla al ratón.
Para empezar, se acabó el moverse horizontal y verticalmente usando la cruceta de tu teclado (que si usas un teclado TKL 80% o 75% puedes ser difíciles de pulsar), con vim motions usamos las teclas j,k,l,h para realizar estos movimientos.
Exacto, no tienes que mover tus manos de la línea central del teclado para realizar los movimientos principales.
Otra de las formas más comunes de moverse con vim motions es “saltando” con búsquedas contextuales. Por ejemplo, empezando con el cursor al comienzo de línea (flecha roja) para ir al primer paréntesis de la función (flecha verde) solo tenemos que pulsar la tecla ‘f’ y a continuación el carácter que estemos buscando, en este caso la tecla ‘(‘, y automáticamente saltaremos a esa posición.
Solo te tomará unos meses familiarizarte con los movimientos principales de vim, y aunque volverse un pro de ellos requería mucho tiempo de práctica, te abren la puerta a un universo de posibilidades.
A continuación de dejo algunos recursos interesantes para aprender vim motions:
https://github.com/ThePrimeagen/vim-be-good
Plugin para Visual Studio Code
La mayoría de las vim motions están disponibles para VSCode usando el siguiente plugin:
https://marketplace.visualstudio.com/items?itemName=vscodevim.vim
En la configuración se pueden establecer atajos adicionales.
En VIM hay una tecla especial para realizar muchas operaciones que se conoce como “leader”, habitualmente se configura en la tecla “espacio”, pero puedes poner la que quieras.
Aquí tienes otro artículo interesante sobre como moverte rápido en Visual Studio code con vim motions:
Vim en IntelliJ
Alternativamente puedes usar vim motion en IntelliJ usando IdeaVim.
Si te ha parecido interesante y te gustaría que profundizase en vim motions, déjame un comentario más abajo.
Búsqueda difusa (fuzzy finders)
Hace algunos meses estuvo el debate de si era mejor tener la vista de árbol de directorios en Visual Studio Code a la derecha o a la izquierda. Parece que ganaron los que preferían tenerlo a la derecha.
Yo voy más allá, no la tengas en ningún lado.
Hay algunos que prefieren tenerlo todo organizado en carpetitas para poder encontrarlo todo fácilmente, pero el 99% de las veces sabes que ficheros tienes que abrir y que nombre tienen. Por tanto, ¿por qué no buscarlos directamente?
En Visual Studio Code, el control (o cmd) + P debería de ser tu pan de cada día y dejar el arbolito para cuando realmente necesites buscar algo y no tengas claro ni como se llama ni donde está. Ahorrarás mucho más tiempo.
Es más, habitualmente cuando no sabes cómo se llama el fichero que quieres abrir, si que conoces un poco su contenido (ya sea el nombre de una función, variable o comentario). Para estos casos, es mejor tirar de rgrep o el típico find in files que puedes encontrar en Control+Shift+F en VSCode.
Personalmente en mi flujo uso un fuzzy finder para todo, desde buscar los ficheros que quiero abrir hasta la sesión de tmux donde había estado trabajando el otro día.
Tmux
Lo confieso, soy persona de una sola pantalla. Muy ancha, sí, pero solo una. Para mí el tener un setup con 19 pantallas solo aumenta mi procrastinación.
Cuando trabajo con una única pantalla, el tener un multiplexor de terminales es obligatorio el poder navegar entre diferentes “ventanas” de forma rápida y (como no) usando fuzzy finders, también.
La idea de los multiplexores es poder dividir una misma terminar en varias ventanas o sesiones y así con la misma aplicación tener acceso a cualquier cosa sin tener que tener 200 pestañas abiertas.
Las pestañas son un error. Una anomalía en el espacio-tiempo.
En mi caso, un software ya sea un navegador, una terminal o un editor de código con pestañas no es un usable. A menos que seas muy disciplinado con que pestañas abres y que nombre tienen. No es mi caso.
Si utilizas mucho la terminal (incluso para editar tus ficheros de código), dale un repaso a tmux porque va a hacer que tu productividad se dispare considerablemente.
Gestor de Ventanas en Mosaico
Mi última recomendación no va a gustar a todos, sobre todo para los usuarios de macos. Y digo esto porque este sistema está pensado para que veas animaciones, uses gestos naturales con el trackpad y todo este perfectamente diseñado. Sin embargo, desde un punto de utilidad, el que por ejemplo necesites cuatro dedos y un movimiento horizontal para cambiar de escritorio, será muy bonito, pero de usabilidad tiene bastante poca, al menos en mi opinión.
Un sistema operativo que uses para trabajar tiene que ser rápido, dinámico y productivo. Se debe de poder acceder rápido a la información y por supuesto se tiene que poder controlar fácilmente con el teclado, sin usar el trackpad o peor, el ratón.
Siempre he sido un usuario de Linux para todo lo relativo al trabajo y más durante los últimos años cuando descubrí i3wm.
I3wm es un gestor de ventanas en mosaico que organizan la pantalla en ventanas que no se superponen entre sí. Nosotros estamos más acostumbrados a usar gestores de ventanas superpuestas unas encima de otras porque simulan mucho mejor un escritorio real (de una mesa con unos objetos encima de otros).
Seguro que habéis escuchado muchas veces, que el sistema de ventanas de windows es muy bueno. Esto es porque aparte de funcionar como un gestor superpuesto de ventanas también puede hacerlo como ventanas en mosaico (o tilling en inglés).
Pues bien, i3wm lleva al límite este concepto de no-superposición, proporcionando una forma muy sencilla y keyboard-driven de interactuar con las ventanas de sistema operativo.
Se requiere pocas pulsaciones para de teclas para poder realizar todos los movimientos, puedes utilizar el layout que quieras, es muy configurable y no tiene mucho más que lo que ves en la captura de arriba.
Personalmente lo uso con arch linux desde hace varios años y no podría estar más contento, para mi es el software definitivo de productividad.
Si estás atado macOS puedes probar Yabai, que intenta traer la potencia de i3wm a este sistema operativo.
Conclusión
Y hasta aquí mis trucos y recomendaciones para aumentar la productividad para programadores.
Si os interesa el tema y queréis que haga un artículo profundizando en alguna de las herramientas comentadas, dejadme un comentario y lo escribiré.
Nada más por hoy :)