Cómo construir su propio entorno de desarrollo sin ratón
Publicado: 2022-03-10Érase una vez, en la tierra mágica del desarrollo de software, un joven desarrollador, su humilde servidor, que descubrió Linux por primera vez. De repente, tuve acceso al shell de Linux, una herramienta que ofrece muchas formas de automatizar todo lo que no quería hacer una y otra vez.
Pero Ubuntu no estuvo exento de inconvenientes. A menudo era víctima de errores de visualización y bloqueos, y se volvía cada vez más lento a medida que pasaba el tiempo.
Un día, sucedió algo terrible: tuve que actualizar Ubuntu a su próxima versión principal. Todo se estrelló. Ya no podía iniciar mi sistema. No tenía idea de cómo podía resolver los problemas que enfrentaba porque no tenía idea de cómo funcionaba Linux bajo el capó. Ubuntu estaba abstrayendo todo el meollo de la cuestión para que no me preocupara.
Tuve que reinstalar todo manualmente: Ubuntu y todas mis herramientas. La peor parte fue reconfigurar todo. En general, me tomó días volver al sistema que tenía antes del accidente. Pero no conocía otra alternativa, así que seguí usando Ubuntu durante años. Durante este tiempo, nunca logré actualizarlo a su próxima versión principal sin la necesidad de reinstalar todo manualmente, una y otra vez.
Mi vida como desarrollador cambió nuevamente cuando mi empresa contrató a dos grandes desarrolladores. Sabían mucho sobre Linux y las diferentes distribuciones que podía usar. Me guiaron, me mostraron las herramientas que resolvieron todos los problemas que tenía con Ubuntu. Estas herramientas mejoraron mi flujo de trabajo drásticamente ; me mostraron lo práctico que era para un desarrollador mantener las manos sobre el teclado tanto como fuera posible.
Esto sucedió hace seis años. Todavía uso el mismo entorno de desarrollo hoy. Uso el teclado el 92,8% del tiempo para administrar todas mis herramientas, usando pulsaciones de teclas que tienen sentido y que son fáciles de recordar. Puedo reinstalar todo mi sistema con un montón de scripts que he escrito, incluidas todas las herramientas que uso y sus configuraciones.
Hoy me gustaría compartir contigo estas herramientas para que tú también puedas aumentar tu eficiencia y tu comodidad en tu trabajo diario. Funcionan bien juntos, dando forma a lo que yo llamo mi entorno de desarrollo sin ratón . Más precisamente, discutiremos:
- Por qué usar el shell de Linux puede ser muy poderoso cuando se trabaja con texto sin formato (incluido el código);
- Por qué usar el temido Arch Linux;
- La ventaja de un administrador de ventanas de mosaico;
- Cómo tener una gran experiencia de terminal con URxvt, tmux y tmuxp;
- Por qué Vim puede convertirse en tu mejor amigo.
Nota : Las herramientas que defiendo en este artículo funcionan en sistemas basados en Linux. También puede usarlos con macOS excepto i3. Para Windows, la forma más fácil es usar el subsistema Windows Linux (WSL) para instalarlos y usarlos.
Nunca habría descubierto esta nueva forma de trabajar sin probar estas herramientas. Por eso te animo a que los instales, experimentes con ellos y veas por ti mismo si te enamoras como a mí.
Sin ratón con la concha
Como desarrollador, es casi imposible evitar el uso de un shell. Esta es una herramienta poderosa que puede simplificar su flujo de trabajo al eliminar todas las tareas aburridas.
Los beneficios de la concha
Antes de hablar sobre los beneficios de usar el shell y la terminal, expliquemos brevemente cuál es la diferencia entre estas dos ideas.
El terminal es una interfaz gráfica que le permite interactuar con el shell. En Linux, este shell suele ser Bash, pero también puede ser otro, eh Zsh. El shell es un intérprete. Puede alimentarlo con comandos y los ejecutará para realizar algunas acciones. También, a veces, le devolverá una salida. Los términos "línea de comandos" y "shell" son sinónimos.
Si comparáramos el entorno de desarrollo sin ratón con el sistema solar, el caparazón sería el sol y todo lo demás giraría a su alrededor. Es porque el shell es realmente poderoso: te permite ejecutar muchos programas pequeños que funcionan muy bien juntos. Se llaman CLI (interfaces de línea de comandos).
La gran ventaja de estas herramientas: son muy simples y limitadas de forma aislada, pero puedes encadenarlas para obtener resultados poderosos . Por ejemplo, puede usar todas las CLI "historial", "ordenar", "uniq" y "cabeza" para mostrar las CLI que más usa y la frecuencia de su uso.
Hay muchas CLI disponibles por ahí. Primero, porque el shell de Linux existe desde hace mucho tiempo; los desarrolladores tuvieron tiempo de desarrollar muchas herramientas y hacerlas confiables. En segundo lugar, porque es más fácil desarrollar CLI que GUI (interfaces gráficas de usuario). Diseñar e implementar estas interfaces gráficas requiere mucho más trabajo. Las CLI solo tienen interfaces de texto , que son más fáciles de desarrollar, cambiar y mantener.
También es por eso que las CLI son rápidas: no es necesario alterar la pantalla y otros elementos gráficos. Era uno de mis principales problemas con Ubuntu: su entorno de escritorio, Unity, era bastante pesado, lento y con errores. Al menos en mi experiencia. El uso de más GUI en la parte superior empeoró las cosas.
Otra gran ventaja de la línea de comandos : puede escribir scripts de shell para automatizar todas las tareas aburridas que repite día tras día. Por ejemplo, si necesita cambiar el tamaño de las imágenes al mismo tamaño con mucha frecuencia, puede escribir un script para eso. Si busca a menudo en algún tipo específico de archivos, también puede automatizar eso. El cielo es el límite.
Las CLI también tienen inconvenientes. Es un poco más desalentador usarlo para principiantes, pero hay formas de obtener rápidamente lo que necesita, incluso si no sabe cómo usar una CLI específica.
Finalmente, si tiene algunas tareas que hacer en servidores remotos, a menudo terminará usando el shell. No tienen ninguna interfaz gráfica la mayor parte del tiempo, por lo que no tendrás otra opción. En estos casos, es necesario conocer la línea de comandos.
Un enfoque sin ratón
Debido a que el shell tiene una interfaz de texto, tus manos permanecen en el teclado cuando lo usas. Esto es algo que realmente nunca consideré durante mis primeros años como desarrollador, pero es una gran ventaja.
Según mi experiencia, evitar los cientos de movimientos de la mano entre el teclado y el mouse ahorra mucha energía cognitiva. Me sorprendió descubrir lo cómodo que era cuando realmente traté de apegarme a mi teclado. Como beneficio adicional, me siento como un hacker usando solo mi teclado con mi shell, ¡incluso si solo escribo mi lista de compras! ¿Qué tan bueno es eso?
Tengo que admitir que era muy escéptico acerca de esta idea "sin ratón" antes de intentarlo. Con las herramientas que describo a continuación, no tuve que cambiar todos mis hábitos de un día para otro: también puedes usar el mouse con ellas. Pero realmente brillan cuando se manejan con el teclado.
Incluso si nunca se demostró realmente, también creo que permanecer en el teclado nos hace más eficientes . Como señala el libro El programador pragmático :
“Usar solo las pulsaciones de teclas para las operaciones de edición comunes es más eficiente que los comandos controlados por el mouse o los menús porque sus manos nunca dejan el teclado”.
Dicho esto, la eficiencia no es el objetivo principal aquí. Me encanta estar en mi teclado y usar todas estas herramientas porque puedo concentrarme por completo en las tareas que tengo entre manos. Me motiva a empezar a trabajar y hacer mis tareas.
La base: Arch Linux
Al comienzo de mi viaje sin mouse, uno de mis nuevos amigos me aconsejó que usara Arch Linux en lugar de Ubuntu. De nuevo, el escepticismo se arrastraba, las dudas invadían mi pobre cerebro. ArchLinux? ¿Esta horrible distribución de Linux que necesitas instalar y configurar completamente manualmente? ¿Este sistema inestable se convirtió en una broma para muchos?
A veces, los estereotipos no tienen nada que ver con la realidad, y Arch Linux es el ejemplo perfecto de esta idea. He usado Windows (del 98 al 7), macOS y también probé otras distribuciones de Linux. Mi conclusión, sin duda: Arch Linux es el más estable de todos.
Dicho esto, Arch Linux no es un requisito para un entorno de desarrollo sin ratón. También puede usar todas las demás herramientas descritas en este artículo con otras distribuciones de Linux. También puede usarlos con macOS (excepto i3) o Windows si tiene el Subsistema de Windows para Linux (WSL). Pero, antes de hacerlo, déjame decirte por qué deberías considerar seriamente Arch Linux .
Un sistema de liberación rodante
Arch Linux tiene un sistema de lanzamiento continuo . Significa que necesita actualizar todo su sistema con frecuencia, semanal o quincenalmente. Para volver a Ubuntu, tiene un sistema de soporte a largo plazo : solo necesita actualizarlo un par de veces al año, o incluso menos si lo desea.
Muchos desarrolladores piensan que un sistema de lanzamiento continuo hace que su entorno de desarrollo sea inestable, lo que explica en parte la reputación de Arch Linux. Pero nunca tuve un problema en seis años de uso diario, y mis amigos tampoco. Por otro lado, las ventajas de un sistema rodante son grandes:
- Todas las aplicaciones que uso están constantemente actualizadas. No es necesario compilarlos manualmente para tener la versión más reciente cuando sea necesario.
- Actualizar su sistema a menudo significa que se introducirán menos cambios a la vez. Como resultado, también hay menos posibilidades de accidentes.
Les conté mi experiencia con Ubuntu y los cuelgues que tuve al actualizarlo. Nunca tuve ningún problema con Arch Linux.
Todo lo que necesitas
Además, los repositorios de Arch Linux son enormes. Es muy probable que encuentre todas las herramientas que necesita allí. Si no lo hace, puede buscar en AUR (Arch User Repositories), donde hay todo lo demás. El AUR no es un repositorio oficial, por lo que podría haber algunos problemas de seguridad con las aplicaciones que se encuentran allí. Nuevamente, nunca tuve ningún problema con ellos, pero es posible. Mientras te apegues a los repositorios oficiales y no instales todo y nada desde AUR, no tendrás ningún problema.
Una oportunidad de aprendizaje
Mencionemos también que Arch Linux es una distribución muy mínima. No impone muchas aplicaciones inútiles cuando lo instalas. Hablando de eso, necesitas instalar toda la distribución manualmente usando el shell. La tarea puede parecer desalentadora pero, por otro lado, aprenderá mucho de la experiencia.
Como mencioné al comienzo de este artículo, conocer un mínimo de cómo funcionan los sistemas basados en Linux puede ayudarlo cuando su sistema se comporta de manera extraña o cuando falla. No es tan complejo como podría parecer y, si eres un desarrollador, diría que es obligatorio. La Web, su teléfono o su Raspberry Pie se ejecutan en Linux hoy en día.
Por último, pero no menos importante, Arch Wiki es el mejor lugar que puede encontrar para cualquier cosa relacionada con Linux. Me ayudó mucho a lo largo de los años, incluso cuando estaba usando Ubuntu. Es un gran lugar para solucionar problemas de su sistema y encontrar nuevas herramientas.
Administrar su Windows con i3
Ahora que revisamos por qué Arch Linux puede ser una base sólida para su entorno de desarrollo sin mouse, veamos qué podemos agregar.
Pero antes, un poco de teoría. Los sistemas operativos suelen tener tres capas, más o menos acopladas entre sí:
- El kernel , que incursiona directamente con el hardware de tu ordenador;
- El shell , una interfaz para que usted, o algunas aplicaciones, interactúen con el núcleo;
- Una capa de visualización en la parte superior, como un administrador de escritorio o un administrador de ventanas en mosaico.
Gnome o Unity son administradores de escritorio para sistemas basados en Linux. Administran sus ventanas y muchas otras cosas, como su barra de estado o su lanzador de aplicaciones. Los administradores de ventanas en mosaico son una alternativa a los administradores de escritorio y, a menudo, son más pequeños y están más enfocados en manipular ventanas.
El administrador de ventanas de mosaico i3 es realmente muy liviano: lo estoy usando ahora mismo en una computadora de diez años (Lenovo x220) y no se ralentiza. También es fácil de usar, la documentación es excelente y, lo que es más importante, puede administrar sus ventanas solo con su teclado (si lo desea).
Los conceptos básicos de i3 son simples: puede abrir ventanas en diferentes espacios de trabajo que representan una pantalla completa . Es muy similar a los escritorios virtuales que tienen muchos administradores de escritorio Linux. Luego, cuando abra sus aplicaciones favoritas, la pantalla se compartirá automáticamente según la cantidad de ventanas en la pantalla.
Por ejemplo, si abre Firefox, su ventana ocupará el 100% de la pantalla. Si abre tres instancias de Firefox, cada una de ellas ocupará el 33% de la pantalla.
También puede cambiar el diseño de las ventanas. En lugar de tener todas las ventanas visibles en la pantalla, puede apilarlas unas sobre otras y recorrerlas con una simple pulsación de tecla. Si necesita algunas ventanas flotantes "normales", también puede configurarlas.
El objetivo de i3 es simplificar la gestión de todas sus ventanas. En lugar de usar el mouse para moverlos y cambiar su tamaño cada vez que abre nuevos, puede usar las teclas para hacer la misma operación solo cuando lo necesite .
¿Parece demasiado complicado? Fui eficiente con i3 dos días después de probarlo. No soy un genio; si yo pude hacerlo, tú también puedes hacerlo.
La guinda del pastel: como todas las herramientas descritas en este artículo, puede personalizar i3 y sus pulsaciones de teclas como desee.
El único inconveniente de i3: no está disponible para macOS. Pero existen grandes alternativas , como el administrador de mosaicos de ventanas Amethyst o Divvy.
Sube de nivel tu terminal con URxvt, tmux y tmuxp
La terminal es la interfaz que le da acceso al shell. Incluso si el shell es el verdadero negocio, podemos hacerlo más fácil de usar con un par de herramientas.
El camino de la simplicidad con URxvt
Me gusta la simplicidad y, en parte, por eso me encanta el entorno de desarrollo que describo en este artículo. Hablando de eso, URxvt es uno de los terminales más simples que puedes encontrar. También es rápido y fiable. En seis años, nunca lo vi estrellarse o incluso disminuir la velocidad. Hace lo que se supone que debe hacer: permitirle usar el shell. Ni mas ni menos.
El multiplexor de terminales con tmux
Incluso si me gusta la simplicidad de URxvt, también me gusta tener un buen multiplexor de terminal en el que pueda confiar, como tmux.
¿Qué es un multiplexor de terminal? Le permite abrir sesiones que contienen múltiples shells . Estas sesiones se mantienen en segundo plano: incluso si su terminal falla o si lo cierra por accidente, sus shells no desaparecerán. Puedes recuperarlos en otro terminal cuando quieras (como si nada).
Esto es útil en su computadora local, pero es aún mejor en un servidor remoto. Puede, por ejemplo, conectarse a un servidor a través de SSH, ejecutar un script, cerrar su conexión SSH y su terminal en su máquina local e irse a casa. Debido a que su shell todavía se está ejecutando en su servidor gracias a tmux, su secuencia de comandos también se ejecutará.
Eso no es todo: tmux es un poco como un aprendiz de todo, en el buen sentido. Puede usarlo para abrir múltiples ventanas que contienen múltiples paneles en una terminal. Puede pensar en una ventana como la terminal completa y en un panel como un caparazón que toma un porcentaje de la ventana.
¿Te recuerda a i3? Sigue los mismos principios, pero solo puede crear nuevos caparazones. Es por eso que muchos usuarios que están contentos con i3 no ven ningún sentido en usar tmux. Personalmente, me gusta usar ambos.
Como siempre, puede manipular las ventanas y paneles de tmux con su teclado, y puede configurar tmux siguiendo sus deseos más locos.
tmuxp
Imaginemos que desea utilizar tmux para la aplicación disruptiva que está desarrollando en este momento. Primero debe abrir una terminal. Luego, debe crear tantas ventanas de tmux como necesite y dividir estas ventanas con los paneles que desee.
Recuerde : un panel representa un caparazón. En cada uno de estos shells, puede ejecutar todas las CLI que necesita para un proyecto específico: por ejemplo, ejecutar un contenedor docker o mostrar algunos registros.
Pero también puede automatizar todo eso, y es donde realmente brilla el verdadero poder de tmux , en el contexto de un entorno de desarrollo. Usando otra CLI llamada tmuxp, puede escribir en un archivo de configuración YAML qué ventanas, paneles y cualquier comando que desee. Luego, puede cargar esta configuración y crear automáticamente su sesión tmux personalizada.
Tengo uno de estos archivos de configuración para cada uno de mis proyectos. Me ahorra mucho tiempo y energía. Como decía anteriormente, este es uno de los principales beneficios de usar el shell.
Editor Plus Shell es igual a IDE
Dado que el shell es tan poderoso, ¿por qué no tener un editor ejecutándose directamente en él? ¿Por qué no usar Vim?
Al igual que Arch Linux, Vim tiene la reputación de ser difícil de aprender. Es más sutil: es bastante fácil ser productivo con él, pero lleva mucho tiempo dominarlo. Si ejecuta Linux y tiene Vim instalado, puede aprender los conceptos básicos en 20 minutos ejecutando vimtutor
en su shell.
Vim ofrece muchas funcionalidades que se pueden ampliar aún más con innumerables complementos. Además, puede interactuar directamente con su shell usando Vim, usando cualquier CLI que desee directamente en su editor. Transformará a Vim en un IDE completo.
Vim tiene otra gran ventaja: puedes usarlo para desarrollar en muchos lenguajes de programación. No me gusta cambiar entre diferentes IDE cada vez que necesito programar en PHP, Golang o Clojure. La interfaz es diferente, necesito configurar cada uno de estos editores por separado, y realmente no puedo guardar las configuraciones en algún lugar para usarlas nuevamente cuando reinstale estas herramientas.
Con Vim, puedo codificar en cualquier idioma que desee mientras estoy en el mismo editor . Al igual que VS Code, puede usar LSP (proveedores de servidores de idiomas) para habilitar el autocompletado, el linting y la refactorización automática para los lenguajes de programación más comunes (e incluso los más esotéricos).
Vim también es rápido. No requiere muchos recursos para funcionar. A menudo tengo 6 o 7 instancias del editor abiertas en todo momento en mi computadora anterior, sin ningún problema. En comparación, usé IntelliJ IDE durante años y, cuando estaba abriendo dos de ellos, todo mi sistema comenzaba a ralentizarse. Es realmente práctico cuando trabajo en diferentes proyectos al mismo tiempo, como un montón de microservicios, por ejemplo.
¿Debo agregar que Vim es altamente configurable ? En lugar de tener muchas funcionalidades directamente en su IDE (incluidas algunas que nunca usará), puede elegir exactamente lo que necesita y descartar lo que no necesita.
Un conjunto de pulsaciones de teclas coherentes
Si Arch Linux es la base de mi entorno de desarrollo sin mouse, entonces i3, Zsh, tmux y Vim son los bancos de trabajo para mis necesidades creativas. Me da un nivel de comodidad que nunca he experimentado con ninguna otra herramienta.
Pero quizás se pregunte por qué debería usar todas estas nuevas herramientas y sus pulsaciones de teclas cuando ya puede usar los accesos directos para las herramientas que ya conoce.
Bueno, los accesos directos de la mayoría de las aplicaciones a menudo no tienen sentido . Es una sopa de llaves que no tienen relación entre sí. Como resultado, son difíciles de recordar y pueden ser bastante diferentes de una herramienta a otra.
Las herramientas que describo en este artículo están destinadas a encajar muy bien entre sí. Casi puede usar la misma combinación de teclas para cada uno de ellos. Solo diferirá una tecla, para que el sistema sepa sobre qué herramienta se quiere actuar. Hace que las diferentes pulsaciones de teclas sean mucho más fáciles de recordar.
Además, Vim fue diseñado para tener pulsaciones de teclas que tengan sentido al crear un lenguaje simple en el que puede confiar. Por ejemplo, para eliminar una palabra, puede presionar daw
. Para eliminar un párrafo, es dap
. Dado que muchas CLI se basan en las pulsaciones de teclas de Vim, aprender Vim abrirá la puerta a muchas otras CLI .
Instalación automática de su entorno de desarrollo sin mouse
La instalación manual de Arch Linux es buena para aprender mucho sobre los sistemas basados en Linux, pero envejece cuando necesita hacerlo cada vez que desea instalar su sistema en una computadora nueva. Es por eso que he creado mis propios scripts para instalar todo mi entorno de desarrollo sin ratón. Instalan Arch Linux, así como todas las herramientas que uso con sus configuraciones. Cuando necesito usar una computadora nueva, simplemente puedo ejecutar estos scripts, ¡y listo!
¿Estás listo para ser un desarrollador sin ratón?
Debido a la flexibilidad que tengo con mi entorno de desarrollo, también puedo cambiar de herramienta fácilmente. Por ejemplo, si ya no quiero usar tmux, puedo reemplazarlo con otro multiplexor de terminal. Si no me gusta la barra de estado de i3 o mi lanzador de aplicaciones, también puedo reemplazarlos.
Como habrás adivinado, configurar este tipo de sistema requiere algo de tiempo, motivación y esfuerzo . Es por eso que escribí un libro llamado "Construyendo su entorno de desarrollo sin ratón". Describe en detalle cómo configurar todas las herramientas, cómo crear scripts para instalar todo el sistema con un solo comando y cómo personalizar todo para sus necesidades personales. Si no sabe mucho sobre el shell de Linux, le permite crear un proyecto personalizado para familiarizarse con él.
Si está interesado, encontrará una muestra del libro aquí, así como su tabla de contenido completa.
Creo que la mejor manera de averiguar si le gustaría este tipo de sistema es simplemente probarlo. Te puedo garantizar una cosa: ¡aprenderás mucho en el camino!
Lectura adicional en la revista Smashing
- “Usé la web por un día con solo un teclado”, Chris Ashton
- “Una guía completa de teclados mecánicos”, Ben Frain
- “Hacer un caso sólido para la accesibilidad”, Todd Libby
- “Accesibilidad en Chrome DevTools”, Umar Hansa