Seja preguiçoso e aumente sua produtividade: uma discussão sobre Shell
Tags: shell, linux, discuss, productivity
Published: 2023-06-30 15:17:58

Já parou pra pensar em quantas ocasiões você se deparou com a seguinte questão: como eu poderia melhorar a minha "produtividade" como desenvolvedor? Aqui, o objetivo vai ser ressaltar alguns pontos que você pode levar consigo para um melhor estilo de vida e reaproveitamento de seu tempo, mesmo que a palavra *produtividade* ainda não seja um termo "correto" (o termo que busco expressar). O título deste artigo pode ser um tanto quanto curioso, mas, já adianto que não é pra levar *ao pé da letra*. 

> **Nota**
> Este é um simples artigo (até mesmo o primeiro) de opinião que estou publicando, por isso, saiba que nada dito aqui é algo como "uma verdade definitiva" ou algo do tipo, afinal, estarei levantando apenas pontos e questionamentos para você, caro leitor. Saiba que qualquer discussão saudável é muito mais do que bem-vinda aqui.

## Cotidiano

Todos os dias cada pessoa possui pelo menos uma meta para realizar, qualquer que seja, que inicia no momento do despertar e "deveria" ser cumprida até o anoitecer. Estas metas não são necessariamente tarefas do trabalho ou algo do tipo... São apenas vontades discretas que cada um de nós possui, objetivos para alcançarmos em um curto período de tempo (ou não). No final das contas, são essas pequenas metas que fazem com que a gente se movimente todos os dias.

O título que provavelmente pode ter chamado sua atenção se refere ao conceito de preguiça.

### [Preguiça](https://www.google.com.br/search?&q=pregui%C3%A7a)
*Substantivo feminino*
1. aversão ao trabalho; ócio, vadiagem.
   *"o pai não permite que os filhos vivam na p."*
2. estado de prostração e moleza, de causa orgânica ou psíquica.
   *"tem p. de caminhar"*

O conceito de preguiça é visto como uma forma de expressar alguém que, no contexto inserido, teria *aversão ao cumprimento de suas metas*, porém, o conceito que estou querendo trazer é de alguém que teria *aversão ao cumprimento de metas repetitivas* (sim, em âmbito geral). Quando falamos de alguém que não gosta de repetir sempre as mesmas coisas, não gosta de viver sempre em um mesmo fluxo de tarefas ou então prefere por não repetir mais de uma vez determinada ação, estamos falando do tipo de pessoa que estou querendo trazer para o nosso contexto.

Certo, mas, como uma pessoa desta forma implicaria no desenvolvimento de produtividade? Simples: pessoas que não gostam de fazer a mesma coisa duas vezes preferem "dar um jeito para *alguém* fazer para elas". O ponto específico é que este "alguém" que eu acabei de citar, seria nada mais nada menos que nossos amigos computadores. Desenvolvedores preguiçosos preferem automatizar processos ao invés de sempre repetirem as mesmas coisas, por isso, o gasto de energia empregado não é mais para realizar a mesma atividade todos os dias, mas, para encontrar uma solução que consiga suprir esta necessidade.

## Piloto automático

Agora que você já entendeu pra qual tipo de pessoas este artigo é direcionado, espero que as suas dúvidas tenham sido esclarecidas (até o momento). Talvez seja hora de você ligar o piloto automático e olhar ao seu redor vendo a quantidade de ferramentas que você pode utilizar para melhorar seu processo de desenvolvimento. 

O ponto em questão é: com o avanço da tecnologia e o aumento da facilidade de acesso da população, a criação de novas tecnologias que buscam auxiliar no cotidiano das pessoas é imensa. Veja em volta o número de equipamentos que te fazem permanecer conectado na Internet, seja de forma direta ou indireta, tendo um reflexo em sua vida. Existem diversos destes equipamentos, mas, você como desenvolvedor pode não fazer uso ou nem ao menos perceber as poderosas ferramentas que tem em suas mãos para um gasto de energia coerente.

Quando eu falo de ferramentas, não estou falando de plataformas enormes ou ferramentas altamente voltadas para um usuário final que vai fazer uso direto daquele software... Não estou falando nem mesmo de outros softwares que você provavelmente deve utilizar para organizar seu cronograma (eles são importantes e necessários, mas, eu quero ir mais embaixo)... Estou falando de ferramentas que por anos eram os primórdios do que conhecemos como computadores, das quais eram conhecidas como as únicas formas de utilizarmos. Sim, estou falando nada mais nada menos do que seu terminal.

## Terminal

Voltando ao que se resumia na principal interface de interação humano-computador que existia há algumas décadas, sabemos que os terminais se popularizaram e são utilizados até hoje (ou pelo menos deveriam).

![IBM 5150 PC de 1981](https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/IBM_PC_5150.jpg/280px-IBM_PC_5150.jpg)
> A imagem acima retrata um IBM 5150 PC de 1981.

Atualmente os emuladores de terminal buscam simular as interações que ocorriam nas épocas em que uma "tela preta com letras verdes" era o único estilo de interface visual apresentável por monitores. Obviamente os emuladores de terminal são muito amigáveis, permitindo customizações diversas e expandindo a imaginação daqueles que vão utilizá-los (se você tem interesse em aprender algumas formas de customizar seu emulador de terminal clique [aqui](https://dev.to/guto/elevando-o-nivel-do-terminal-customizando-suas-funcionalidades-2amm) e acesse um dos meus artigos passados).

O ponto que quero destacar aqui é: estas sempre foram as principais interfaces a serem utilizadas quando trabalhávamos com computadores (no aspecto geral). Sua interface se baseia em uma entrada de comandos que são processados e uma saída explícita resultante do processamento destes comandos. Geralmente existe um tanto quanto equívoco dos usuários gerais em pensar "ok, mas, se a tecnologia evoluiu tanto por qual motivo eu deveria continuar utilizando algo deste tipo" ou então "é perca de tempo utilizar algo ultrapassado", mas, já adianto que estão enganados em pensar dessa forma.

O principal argumento que favorece o uso de emuladores de terminal é a simplicidade. Não existe meio termo, trava de área de acesso, tempo de renderização ou animação com problema (qualquer que seja um problema comum de uma interface gráfica de propósito geral). Os comandos são executados, você controla o computador como você bem quiser e consegue ainda gerenciar as principais atividades do seu cotidiano.

Existem diversas soluções que buscam trazer experiências reais similares ao uso de interfaces em emuladores de terminal, não é difícil de se encontrar algum software que faça com que sua aparência seja elegante, podendo navegar com setas ou algo do tipo. O ponto em questão é: obviamente o uso de uma interface gráfica voltada para um usuário final é mais "agradável", afinal, ela foi criada para ser utilizada por um usuário de âmbito geral.

Certo, então quer dizer que pra eu aumentar minha "produtividade" eu tenho que usar um emulador de terminal? Não! Estou dizendo que explorar o uso de algumas ferramentas pelo emulador de terminal pode ser uma experiência nova e agradável, que no futuro **vai** resultar em um benefício próprio (afinal, você conseguiu aprender algo novo e deixar de lado o mouse um pouco, podendo até mesmo ser um benefício para sua saúde, não é?).

## Scripts

Ok, o uso de um emulador de terminal pode não ser do agrado de todos, eu confesso, mas, saiba que mesclar o uso dele com outras ferramentas pode ser uma combinação poderosa, sendo uma delas o uso de scripts! Sim, scripts no sentido de ordens de instrução mesmo!

Os emuladores de terminal trabalham em uma camada de alto nível de abstração para que o usuário possa executar comandos a serem interpretados por um interpretador de shell e enviados para o kernel, realizando a comunicação com o hardware. O processo em si é feito literalmente com camadas de abstração. Todo comando que você executa é verificado, interpretado e executado de acordo com as restrições previamente estabelecidas no seu interpretador.

![Camadas de abstração no kernel](https://res.cloudinary.com/practicaldev/image/fetch/s--KqSJ0S9y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.stack.imgur.com/Znlqz.jpg)
> A imagem acima mostra como a entrada de um usuário (comando executado) é feita, sendo enviada para o interpretador de shell e posteriormente executada.

Se você utiliza qualquer sistema que seja baseado ou inspirado no UNIX (como distribuições Linux, macOS, FreeBSD, OpenBSD e BSD's no geral) saiba que você tem consigo uma ferramenta poderosa a ser utilizada: scripts para seu interpretador de shell. 

Os famosos *shell scripts* que possuem como interpretadores principais (mais conhecidos) [GNU Bash](https://www.gnu.org/software/bash/), [Zsh](https://www.zsh.org/), [Fish](https://fishshell.com/), [TCSH](https://www.tcsh.org/) entre outros diversos, possuem formas de executar comandos (funcionando como uma linguagem de programação) diretamente, possibilitando a criação de rotinas de automação, encurtamento de processos de configuração, entre outras diversas formas para que você possa cada vez mais automatizar sua rotina de desenvolvimento.

Os scripts podem ser criados de diversas maneiras, utilizados para infinitas possibilidades, abrindo um leque enorme para seu aprendizado. Neste momento vou deixar minhas menções para os principais responsáveis por produzirem conteúdos de excelentíssima qualidade sobre uso de scripts em shell e o mundo Linux de forma geral:
- [Blau Araujo (@blau_araujo)](https://blauaraujo.com/)
- [Dionatan (@blogdiolinux)](https://diolinux.com.br/)
- [Jeferson Fernando (@badtux_)](https://www.linuxtips.io/)
- [Jefferson Carneiro (@oslackjeff)](https://slackjeff.com.br/)
> Estes caras são **feras** quando o assunto é mundo Linux.

Claro, se você quiser aprender um pouco mais sobre Linux e ainda se preparar para uma certificação da Linux Professional Institute, saiba que existe um guia **excelente** que vai te ajudar nesse caminho, o famoso [lpi4noobs](https://github.com/lanjoni/lpi4noobs) escrito com muito amor e carinho por este que está escrevendo o artigo que você acabou de ler!

## Conclusão

Aprender a utilizar melhor as ferramentas que você tem ao seu redor é a melhor coisa. Seja curioso, busque aprender sobre o uso de tecnologias diversas. No final das contas, ninguém gosta de realizar uma tarefa repetitiva no cotidiano como desenvolvedor, por isso, talvez seja hora de explorar novos caminhos e entender que faz parte todo esse processo de aprendizado.

Espero que tenham gostado do artigo, escrevi como uma forma de expressar um pouco mais sobre uma perspectiva resultante da observação de conteúdos publicados relacionados ao termo "produtividade", que ainda assim considero como um termo *errado*. Por fim, o intuito foi sair um pouco do conteúdo técnico em si e dar uma olhada para o ambiente que estamos inseridos.

Sejam felizes, obrigado por lerem até aqui.