Como construir seu próprio ambiente de desenvolvimento sem mouse

Publicados: 2022-03-10
Resumo rápido ↬ Construir um ambiente de desenvolvimento com o shell como chave oferece vários benefícios. Você pode usar ferramentas que se encaixam perfeitamente umas com as outras, você pode personalizar tudo de acordo com suas próprias necessidades e, o maior de tudo, você pode controlar todo o seu ambiente de desenvolvimento com seu teclado. Isso pode economizar muita energia cognitiva, além de proporcionar uma experiência de usuário agradável.

Era uma vez, na terra mágica do desenvolvimento de software, um jovem desenvolvedor, seu humilde servo, descobrindo o Linux pela primeira vez. De repente, tive acesso ao shell do Linux, uma ferramenta que oferece muitas maneiras de automatizar tudo o que eu não queria fazer repetidas vezes.

Mas o Ubuntu não foi sem inconvenientes. Muitas vezes eu era vítima de bugs e travamentos de exibição, e estava ficando cada vez mais lento com o passar do tempo.

Um dia, algo terrível aconteceu: tive que atualizar o Ubuntu para sua próxima versão principal. Tudo caiu. Não consegui mais iniciar meu sistema. Eu não tinha ideia de como poderia resolver os problemas que estava enfrentando porque não tinha ideia de como o Linux estava funcionando nos bastidores. O Ubuntu estava abstraindo todos os detalhes para eu não me importar com isso.

Eu tive que reinstalar tudo manualmente - Ubuntu e todas as minhas ferramentas. A pior parte foi reconfigurar tudo. Tudo e todos, levei dias para voltar ao sistema que eu tinha antes do acidente. Mas eu não conhecia nenhuma outra alternativa, então continuei usando o Ubuntu por anos. Durante esse tempo, nunca consegui atualizá-lo para sua próxima versão principal sem a necessidade de reinstalar tudo manualmente, repetidamente.

Minha vida como desenvolvedor mudou novamente quando minha empresa contratou dois grandes desenvolvedores. Eles sabiam muito sobre Linux e as diferentes distribuições que eu poderia usar. Eles me orientaram, me mostraram as ferramentas que resolveram todos os problemas que tive com o Ubuntu. Essas ferramentas melhoraram drasticamente meu fluxo de trabalho ; eles me mostraram como era prático para um desenvolvedor manter as mãos no teclado o máximo possível.

Isso aconteceu há seis anos. Eu ainda uso o mesmo ambiente de desenvolvimento hoje. Eu uso o teclado 92,8% do tempo para gerenciar todas as minhas ferramentas, usando teclas que fazem sentido e que são fáceis de lembrar. Posso reinstalar todo o meu sistema com vários scripts que escrevi, incluindo todas as ferramentas que uso e suas configurações.

Hoje, gostaria de compartilhar com você essas ferramentas para que você também possa aumentar sua eficiência e seu conforto em seu trabalho diário. Eles funcionam bem juntos – moldando o que chamo de meu Ambiente de Desenvolvimento sem Mouse . Mais precisamente, vamos discutir:

  • Por que usar o shell do Linux pode ser muito poderoso ao trabalhar com texto simples (incluindo código);
  • Por que usar o temido Arch Linux;
  • A vantagem de um gerenciador de janelas lado a lado;
  • Como ter uma ótima experiência de terminal com URxvt, tmux e tmuxp;
  • Por que o Vim pode se tornar seu melhor amigo.

Nota : As ferramentas que defendo neste artigo funcionam em sistemas baseados em Linux. Você também pode usá-los com macOS, exceto para i3. Para Windows, a maneira mais fácil é usar o Windows Linux Subsystem (WSL) para instalá-los e usá-los.

Eu nunca teria descoberto essa nova maneira de trabalhar sem experimentar essas ferramentas. É por isso que encorajo você a instalá-los, experimentá-los e ver por si mesmo se você se apaixona como eu.

Sem mouse com a concha

Como desenvolvedor, é quase impossível evitar o uso de um shell. Esta é uma ferramenta poderosa que pode simplificar seu fluxo de trabalho, automatizando todas as tarefas chatas.

Os benefícios da casca

Antes de falar sobre os benefícios de usar o shell e o terminal, vamos explicar brevemente qual é a diferença entre essas duas ideias.

O terminal é uma interface gráfica que permite interagir com o shell. No Linux, esse shell geralmente é Bash, mas pode ser outro também, eh Zsh. O shell é um interpretador. Você pode alimentá-lo com comandos e ele os executará para realizar algumas ações. Também, às vezes, fornecerá uma saída de volta. Os termos “linha de comando” e “shell” são sinônimos.

Se compararmos o ambiente de desenvolvimento sem mouse com o sistema solar, a casca seria o sol e todo o resto giraria em torno dele. É porque o shell é realmente poderoso: ele permite que você execute muitos programas pequenos que funcionam muito bem juntos. Eles são chamados de CLIs (Interfaces de Linha de Comando).

A grande vantagem dessas ferramentas: elas são muito simples e limitadas isoladamente, mas você pode encadeá-las para obter resultados poderosos . Por exemplo, você pode usar as CLIs “history”, “sort”, “uniq” e “head” juntas para exibir as CLIs que você mais usa e a frequência de uso.

O shell do Linux
O shell Linux. (Visualização grande)

Existem muitas CLIs disponíveis por aí. Primeiro, porque o shell do Linux existe há muito tempo; os desenvolvedores tiveram tempo para desenvolver muitas ferramentas e torná-las confiáveis. Segundo, porque é mais fácil desenvolver CLIs do que GUIs (Graphical User Interfaces). Projetar e implementar essas interfaces gráficas exige muito mais trabalho. As CLIs têm apenas interfaces textuais , que são mais fáceis de desenvolver, alterar e manter.

É também por isso que os CLIs são rápidos: não há necessidade de mexer com a tela e outros elementos gráficos. Foi um dos meus principais problemas com o Ubuntu: seu ambiente de desktop, Unity, era bastante pesado, lento e cheio de bugs. Pelo menos na minha experiência. Usar mais GUIs no topo piorou as coisas.

Outra grande vantagem da linha de comando : você pode escrever scripts de shell para automatizar todas as tarefas chatas que você repete dia após dia. Por exemplo, se você precisar redimensionar imagens para o mesmo tamanho com frequência, poderá escrever um script para isso. Se você costuma pesquisar em algum tipo específico de arquivo, também pode automatizar isso. O céu é o limite.

Mais depois do salto! Continue lendo abaixo ↓

CLIs também têm desvantagens. É um pouco mais difícil de usar para iniciantes, mas existem maneiras de obter rapidamente o que você precisa, mesmo que não saiba como usar uma CLI específica.

Finalmente, se você tiver algumas tarefas a fazer em servidores remotos, muitas vezes acabará usando o shell. Eles não têm nenhuma interface gráfica na maioria das vezes, então você não terá escolha. Nesses casos, é necessário conhecer a linha de comando.

Uma abordagem sem rato

Como o shell possui uma interface textual, suas mãos permanecem no teclado quando você o usa. Isso é algo que eu nunca considerei durante meus primeiros anos como desenvolvedor, mas é uma grande vantagem.

Na minha experiência, evitar as centenas de movimentos das mãos entre o teclado e o mouse economiza muita energia cognitiva. Fiquei chocado ao descobrir o quão confortável era quando eu realmente tentava manter o meu teclado. Como bônus, me sinto como um hacker usando apenas meu teclado com meu shell, mesmo que eu apenas escreva minha lista de compras! Quão grande é isso?

Eu tenho que admitir, eu estava muito cético sobre essa ideia “sem mouse” antes de tentar. Com as ferramentas que descrevo abaixo, não precisei mudar todos os meus hábitos de um dia para o outro: você também pode usar o mouse com elas. Mas eles realmente brilham quando são gerenciados com o teclado.

Mesmo que nunca tenha sido realmente comprovado, também acredito que ficar no teclado nos torna mais eficientes . Como o livro The Pragmatic Programmer apontou:

“Usar apenas as teclas pressionadas para operações comuns de edição é mais eficiente do que os comandos do mouse ou do menu, porque suas mãos nunca saem do teclado.”

Dito isto, a eficiência não é o objetivo principal aqui. Adoro ficar no meu teclado e usar todas essas ferramentas porque posso me concentrar inteiramente nas tarefas em mãos. Isso me motiva a começar a trabalhar e fazer minhas tarefas.

A base: Arch Linux

No início da minha jornada sem mouse, um dos meus novos amigos me aconselhou a usar o Arch Linux em vez do Ubuntu. Mais uma vez, o ceticismo estava rastejando, as dúvidas estavam invadindo meu pobre cérebro. Arco Linux? Esta distribuição Linux horrível você precisa instalar e configurar totalmente manualmente? Esse sistema instável virou piada para muitos?

Às vezes, os estereótipos não têm nada a ver com a realidade, e o Arch Linux é o exemplo perfeito para essa ideia. Eu usei o Windows (de 98 a 7), macOS e tentei outras distribuições do Linux também. Minha conclusão, sem dúvida: Arch Linux é o mais estável de todos.

Dito isto, o Arch Linux não é um requisito para um ambiente de desenvolvimento sem mouse. Você também pode usar todas as outras ferramentas descritas neste artigo com outras distribuições Linux. Você também pode usá-los com macOS (exceto i3) ou Windows se tiver o Windows Subsystem for Linux (WSL). Mas, antes de fazer isso, deixe-me dizer por que você deve considerar seriamente o Arch Linux .

Um Sistema de Liberação Rolante

O Arch Linux tem um sistema de lançamento contínuo . Isso significa que você precisa atualizar todo o seu sistema com frequência, semanalmente ou quinzenalmente. Para voltar ao Ubuntu, ele possui um sistema de suporte de longo prazo : você só precisa atualizá-lo algumas vezes por ano, ou até menos, se quiser.

Muitos desenvolvedores pensam que um sistema de lançamento contínuo torna seu ambiente de desenvolvimento instável, o que explica em parte a reputação do Arch Linux. Mas nunca tive problemas em seis anos de uso diário, e meus amigos também. Por outro lado, as vantagens de um sistema de rolamento são grandes:

  • Todos os aplicativos que uso são constantemente atualizados. Não há necessidade de compilá-los manualmente para ter a versão mais recente quando necessário.
  • Atualizar seu sistema geralmente significa que menos alterações serão introduzidas de uma só vez. Como resultado, há menos chances de falhas também.

Contei minha experiência com o Ubuntu e os travamentos que tive ao atualizá-lo. Eu nunca tive nenhum problema com o Arch Linux.

Tudo que você precisa

Além disso, os repositórios do Arch Linux são enormes. É muito provável que você encontre todas as ferramentas de que precisa lá. Se você não fizer isso, você pode olhar para o AUR (Arch User Repositories), onde há todo o resto. O AUR não é um repositório oficial, então pode haver alguns problemas de segurança com os aplicativos encontrados lá. Novamente, nunca tive nenhum problema com eles, mas é possível. Contanto que você se atenha aos repositórios oficiais e não instale tudo e nada do AUR, você não terá nenhum problema.

Uma oportunidade de aprendizado

Vamos também mencionar que o Arch Linux é uma distribuição muito mínima. Não impõe muitos aplicativos inúteis quando você o instala. Falando nisso, você precisa instalar toda a distribuição manualmente usando o shell. A tarefa pode parecer assustadora, mas, por outro lado, você aprenderá muito com a experiência.

Como mencionei no início deste artigo, saber um mínimo de como os sistemas baseados em Linux funcionam sob o capô pode ajudá-lo quando seu sistema está se comportando de maneira estranha ou quando trava. Não é tão complexo quanto parece e, se você é um desenvolvedor, eu diria que é obrigatório. A Web, seu telefone ou seu Raspberry Pie rodam no Linux hoje em dia.

Por último, mas não menos importante, o Arch Wiki é o melhor lugar que você pode encontrar para qualquer coisa relacionada ao Linux. Isso me ajudou muito ao longo dos anos, mesmo quando eu estava usando o Ubuntu. É um ótimo lugar para solucionar problemas do seu sistema e encontrar novas ferramentas.

Gerenciando seu Windows com i3

Agora que analisamos por que o Arch Linux pode ser uma base sólida para o seu ambiente de desenvolvimento sem mouse, vamos ver o que podemos adicionar em cima.

Mas antes, um pouco de teoria. Os sistemas operacionais geralmente têm três camadas, mais ou menos acopladas umas às outras:

  1. O kernel , que lida diretamente com o hardware do seu computador;
  2. O shell , uma interface para você, ou alguns aplicativos, interagirem com o kernel;
  3. Uma camada de exibição na parte superior, como um gerenciador de desktop ou um gerenciador de janelas lado a lado.

Gnome ou Unity são ambos gerenciadores de desktop para sistemas baseados em Linux. Eles gerenciam suas janelas e muitas outras coisas, como sua barra de status ou seu inicializador de aplicativos. Os gerenciadores de janelas lado a lado são uma alternativa aos gerenciadores de desktop e geralmente são menores e mais focados na manipulação de janelas.

O gerenciador de janelas lado a lado i3 é realmente muito leve: estou usando-o agora em um computador de dez anos (Lenovo x220) e ele não diminui a velocidade. Também é simples de usar, a documentação é ótima e, o mais importante, você pode gerenciar suas janelas apenas com o teclado (se quiser).

O básico do i3 é simples: você pode abrir janelas em diferentes áreas de trabalho representando uma tela inteira . É muito semelhante aos desktops virtuais que muitos gerenciadores de desktop Linux têm. Então, quando você abrir seus aplicativos favoritos, a tela será compartilhada automaticamente dependendo do número de janelas na tela.

Por exemplo, se você abrir o Firefox, sua janela ocupará 100% da tela. Se você abrir três instâncias do Firefox, cada uma delas ocupará 33% da tela.

i3 com janela do firefox
i3 com janela do Firefox. (Visualização grande)

Você também pode alterar o layout das janelas. Em vez de ter todas as janelas visíveis na tela, você pode empilhá-las umas sobre as outras e percorrê-las com um simples toque de tecla. Se você precisar de algumas janelas flutuantes “normais”, poderá configurá-las também.

i3 com windows firefox empilhados
i3 com janelas do Firefox empilhadas. (Visualização grande)

O objetivo do i3 é simplificar o gerenciamento de todas as suas janelas. Em vez de usar o mouse para movê-los e redimensioná-los cada vez que abrir novos, você pode usar as teclas para fazer a mesma operação apenas quando precisar .

Parece muito complicado? Fui eficiente com o i3 dois dias depois de experimentá-lo. Não sou nenhum gênio; se eu consegui, você também consegue.

A cereja do bolo: como todas as ferramentas descritas neste artigo, você pode personalizar o i3 e suas teclas como desejar.

A única desvantagem do i3: não está disponível para macOS. Mas existem ótimas alternativas , como o gerenciador de janelas lado a lado Amethyst ou Divvy.

Aumente o nível do seu terminal com URxvt, tmux e tmuxp

O terminal é a interface que dá acesso ao shell. Mesmo que o shell seja real, podemos torná-lo mais fácil de usar com algumas ferramentas.

O caminho da simplicidade com URxvt

Gosto de simplicidade e é em parte por isso que adoro o ambiente de desenvolvimento que descrevo neste artigo. Falando nisso, o URxvt é um dos terminais mais simples que você pode encontrar. Também é rápido e confiável. Em seis anos, nunca o vi travar ou mesmo desacelerar. Ele faz o que deveria fazer: permitindo que você use o shell. Nem mais nem menos.

O multiplexador de terminal com tmux

Mesmo que eu goste da simplicidade do URxvt, também gosto de ter um bom multiplexador de terminal no qual posso confiar, como o tmux.

O que é um multiplexador de terminal? Ele permite que você abra sessões contendo vários shells . Essas sessões são mantidas em segundo plano: mesmo que seu terminal falhe ou você o feche acidentalmente, seus shells não desaparecerão. Você pode recuperá-los em outro terminal sempre que quiser (como se nada tivesse acontecido).

Isso é útil em seu computador local, mas é ainda melhor em um servidor remoto. Você pode, por exemplo, conectar-se a um servidor via SSH, executar um script, fechar sua conexão SSH e seu terminal em sua máquina local e voltar para casa. Como seu shell ainda está rodando em seu servidor graças ao tmux, seu script ainda rodará também.

Isso não é tudo: o tmux é um tipo de pau para toda obra, no bom sentido. Você pode usá-lo para abrir várias janelas contendo vários painéis em um terminal. Você pode pensar em uma janela como o terminal inteiro e um painel como um shell que ocupa uma porcentagem da janela.

Isso te lembra o i3? Segue os mesmos princípios, mas só pode criar novos shells. É por isso que muitos usuários que estão satisfeitos com o i3 não veem nenhum ponto em usar o tmux. Pessoalmente, gosto de usar os dois.

Tmux com 4 janelas e 4 painéis
Tmux com 4 janelas e 4 vidros. (Visualização grande)

Como sempre, você pode manipular as janelas e painéis do tmux com seu teclado, e você pode configurar o próprio tmux seguindo seus desejos mais loucos.

tmuxp

Vamos imaginar que você queira usar o tmux para o aplicativo disruptivo que está desenvolvendo agora. Você precisa primeiro abrir um terminal. Em seguida, você precisa criar quantas janelas do tmux forem necessárias e dividir essas janelas com os painéis desejados.

Lembre -se: Um painel representa um shell. Em cada um desses shells, você pode executar todas as CLIs necessárias para um projeto específico: por exemplo, executando um contêiner docker ou exibindo alguns logs.

Mas você também pode automatizar tudo isso, e é aí que o verdadeiro poder do tmux — no contexto de um ambiente de desenvolvimento — realmente brilha. Usando outra CLI chamada tmuxp, você pode anotar em um arquivo de configuração YAML quais janelas, painéis e qualquer comando que desejar. Em seguida, você pode carregar essa configuração e criar automaticamente sua sessão tmux personalizada.

Eu tenho um desses arquivos de configuração para cada um dos meus projetos. Economiza-me muito tempo e energia. Como eu estava dizendo acima, esse é um dos principais benefícios de usar o shell.

Editor mais Shell é igual a IDE

Já que o shell é tão poderoso, por que não ter um editor rodando diretamente nele? Por que não usar o Vim?

Assim como o Arch Linux, o Vim tem a reputação de ser difícil de aprender. É mais sutil: é muito fácil ser produtivo com ele, mas leva muito tempo para dominar. Se você executa o Linux e tem o Vim instalado, pode aprender o básico em 20 minutos executando o vimtutor em seu shell.

O Vim oferece muitas funcionalidades que podem ser estendidas ainda mais com inúmeros plugins. Além disso, você pode interagir diretamente com seu shell usando o Vim, usando qualquer CLI que desejar diretamente em seu editor. Ele transformará o Vim em um IDE completo.

O Vim tem outra grande vantagem: você pode usá-lo para desenvolver em muitas linguagens de programação. Não gosto de alternar entre diferentes IDEs toda vez que preciso programar em PHP, Golang ou Clojure. A interface é diferente, preciso configurar cada um desses editores separadamente e não consigo salvar as configurações em algum lugar para usar novamente quando reinstalar essas ferramentas.

Com o Vim, posso codificar em qualquer idioma que quiser enquanto permaneço no mesmo editor . Assim como o VS Code, você pode usar LSPs (Language Server Providers) para habilitar o preenchimento automático, linting e refatoração automática para as linguagens de programação mais comuns (e ainda mais esotéricas).

Vim em ação
Vim em ação. (Visualização grande)

O Vim também é rápido. Não requer muitos recursos para ser executado. Muitas vezes, tenho 6 ou 7 instâncias do editor abertas o tempo todo no meu computador antigo - sem problemas. Em comparação, usei IDEs IntelliJ por anos e, quando abri dois deles, todo o meu sistema estava começando a ficar lento. É muito prático quando trabalho em projetos diferentes ao mesmo tempo, como vários microsserviços, por exemplo.

Devo acrescentar que o Vim é altamente configurável ? Em vez de ter muitas funcionalidades diretamente em seu IDE (incluindo algumas que você nunca usará), você pode escolher exatamente o que precisa e descartar o que não precisa.

Um conjunto de teclas coerentes

Se o Arch Linux é a base do meu ambiente de desenvolvimento sem mouse, então i3, Zsh, tmux e Vim são as bancadas de trabalho para minhas necessidades criativas. Isso me dá um nível de conforto que nunca experimentei com outras ferramentas.

Mas você pode se perguntar por que deve usar todas essas novas ferramentas e seus pressionamentos de teclas quando já pode usar os atalhos para as ferramentas que já conhece?

Bem, os atalhos da maioria dos aplicativos geralmente não fazem sentido . É uma sopa de chaves que não têm relação entre si. Como resultado, eles são difíceis de lembrar e podem ser bem diferentes de uma ferramenta para outra.

As ferramentas que descrevo neste artigo devem se encaixar perfeitamente. Você quase pode usar o mesmo pressionamento de tecla para cada um deles. Apenas uma chave será diferente, para que o sistema saiba em qual ferramenta você deseja atuar. Isso torna as diferentes combinações de teclas muito mais fáceis de lembrar.

Além disso, o Vim foi projetado para ter pressionamentos de tecla que façam sentido, criando uma linguagem simples na qual você pode confiar. Por exemplo, para excluir uma palavra, você pode pressionar daw . Para excluir um parágrafo, é dap . Como muitas CLIs são baseadas nas teclas do Vim, aprender o Vim abrirá as portas para muitas outras CLIs .

Instalando automaticamente seu ambiente de desenvolvimento sem mouse

Instalar o Arch Linux manualmente é bom para aprender muito sobre sistemas baseados em Linux, mas fica velho quando você precisa fazer isso toda vez que deseja instalar seu sistema em um novo computador. É por isso que criei meus próprios scripts para instalar todo o meu ambiente de desenvolvimento sem mouse. Eles instalam o Arch Linux, bem como todas as ferramentas que eu uso com suas configurações. Quando preciso usar um novo computador, posso simplesmente executar esses scripts e pronto!

Você está pronto para ser um desenvolvedor sem mouse?

Devido à flexibilidade que tenho com meu ambiente de desenvolvimento, também posso trocar de ferramenta facilmente. Por exemplo, se eu não quiser mais usar o tmux, posso substituí-lo por outro multiplexador de terminal. Se eu não gostar da barra de status do i3 ou do meu inicializador de aplicativos, também posso substituí-los.

Como você deve ter adivinhado, configurar esse tipo de sistema requer algum tempo, motivação e esforço . É por isso que escrevi um livro chamado “Construindo seu ambiente de desenvolvimento sem mouse”. Ele descreve em detalhes como configurar todas as ferramentas, como criar scripts para instalar todo o sistema com um comando e como personalizar tudo para suas necessidades pessoais. Se você não sabe muito sobre o shell do Linux, ele permite que você crie um projeto personalizado para se familiarizar com ele.

Se você estiver interessado, encontrará uma amostra do livro aqui, bem como todo o seu índice.

Acho que a melhor maneira de descobrir se você gostaria desse tipo de sistema é simplesmente experimentá-lo. Posso te garantir uma coisa: você aprenderá muito ao longo do caminho!

Leitura adicional na revista Smashing

  • “Usei a Web por um dia com apenas um teclado”, Chris Ashton
  • “Um guia completo para teclados mecânicos”, Ben Frain
  • “Fazendo um forte argumento para a acessibilidade”, Todd Libby
  • “Acessibilidade no Chrome DevTools”, Umar Hansa