Estou convencido de que o melhor jeito de se desenvolver um programa de computador é aplicando a "micro-filosofia".
Neste artigo, falarei rapidamente sobre:
- GNU
- TailwindCSS
- Refatoração
- Trunk Based Development
- Código Limpo e Programador Pragmático
E demonstrarei como essa abordagem está presente em cada uma dessas entidades.
A micro-filosofia é um método divide grandes desafios em micro tarefas, facilitando a resolução de problemas.
"Devagar a gente chega onde a gente quer chegar" - ExaltaSamba
GNU
Não sou especialista na história do Unix, GNU e Linux.
Mas, o que entendo é que:
- Unix era um Sistema Operacional escrito em C
- Lançado em 1971
- Funcionava em diversos processadores e arquiteturas
- Algo raro na época
- Era de uma empresa privada e vendido comercialmente.
- GNU é um projeto/movimento de código livre.
- Foi iniciado em 1984
- Seu objetivo inicial era construir um Sistema Operacional
- Completamente livre
- Com código aberto.
- Possuía diversos miniprogramas que realizavam variadas funções de um sistema operacional
- Estava quase pronto em 1992, faltava só o kernel (módulo principal) para combiná-los.
- Linux na verdade é uma abreviação para GNU/Linux.
- Em 1992, Linus Torvalds criou um kernel que utilizava todos os subprogramas do GNU
- Com isso, criou a primeira distribuição do sistema operacional GNU/Linux.
De forma bem abreviada, agora você entende o que é o GNU.
Beleza, o que isso tem a ver com micro? Bem... Vamos lá.
O GNU/Linux é a personificação da filosofia do Software Livre, que defende o desenvolvimento colaborativo e de código aberto, seus princípios são:
-
Copyleft
- O contrário de copyright (direito autoral)
- Garante que toda e qualquer alteração feita no software seja "livre de direitos autorais".
- Transparência
- Todo o código e documentação são abertos e disponíveis para todos.
- Colaboração
- Acredita no poder colaborativo de desenvolvedores unidos por um objetivo em comum.
- Simplicidade: Os pacotes GNU são exemplos de micro-programas que resolvem um único problema.
O GNU encoraja e defende a micro-filosofia!
O movimento enxergou o sistema operacional como uma coleção de pequenos programas, que fazem apenas 1 coisa, mas a fazem muito bem!
Alguns dos programas que fazem parte do pacote GNU são:
- ls | cat | cp | mv | rm | wc
- Bash (Terminal padrão de quase todas as distros GNU/Linux)
- Nano (Editor de texto presente em todas as distros GNU/Linux)
Uma das melhores coisas de se utilizar Linux, ou algum sistema operacional unix-based (Oi Mac OS) é poder criar combinações de programas para executar alguma tarefa.
Isso é possível através do comando "pipe (|)", por exemplo, caso você queira gerar um rank de palavras mais utilizadas, pode usar:
cat file.txt | tr ' ' '\n' | sort | uniq -c | sort -nr | head -10
Não existe um programa específico que faça isso, mas é possível realizar essa tarefa ao combinar os comandos: cat, tr, sort, uniq e head.
TailwindCSS
O TailwindCSS revolucionou a forma como eu uso CSS.
Ele é um framework de CSS que se auto-denomina utility first.
Diferente de outros frameworks CSS como Bootstrap, MaterialUI e ChakraUI, o TailwindCSS não possui nenhum componente completo.
Ele nada mais é do que um conjunto de micro-classes de CSS, onde cada classe, aplica apenas uma estilização.
Apesar de parecer contraditório, trabalhar com classes minúsculas proporciona muita flexibilidade, poder e estimula a criatividade.
Essas classes são atalhos para estilizações que já foram escritas incontáveis vezes em milhões de sites na web, além de apresentarem classes dinâmicas (como p e m) e aceitarem parâmetros fixos, ex: h-[300px].
Assim como o GNU, o Tailwind também acredita no poder da filosofia micro para a resolução de problemas.
Refatoração
Recentemente, tenho lido o livro Refatoração do Martin Fowler. Nele, são abordadas algumas estratégias e técnicas para melhorar código.
Segundo o autor, refatoração é uma técnica controlada para melhorar o design de um código existente.
É uma forma disciplinada de limpar código que minimiza as chances de introduzir bugs.
O processo de refatoração segundo Martin Fowler envolve:
- Fazer mudanças pequenas que não alteram o comportamento do código.
- Dar pequenos passos, para cometer menos erros.
- Rodar builds e testes a cada nova mudança, só atualizar se estiver funcionando.
Ao fazer isso, você garante que o código está sempre funcional e, aos poucos, vai melhorando.
O livro conta também com 70 técnicas de melhoria de código.
Grandes refatorações são feitas aproveitando do poder da micro-filosofia aplicada à melhoria de código.
Segundo o Martin, é o jeito mais rápido de resolver um problema ou de melhorar um projeto, é resolver pequenos micro-problemas sequenciais que, combinados, resolvem um problema gigante.
Trunk Based Development
É uma estratégia de versionamento de projetos, focada em manter branches de curta duração e:
- Sempre mergear para main
- Mergear com frequência (idealmente 1x por dia)
- Utilizar Feature Flags para esconder features que não estiverem prontas
Isso ajuda a evitar:
- Conflitos de merges complicados
- Corrida-por-commit
As explicações para essas 2 suposições podem ser encontradas nesse artigo SENSACIONAL do Martin Fowler.
Aqui, o conceito micro aparece ao defender que micro alterações devem ser mergeadas ao projeto principal, o mais rápido e frequente possível.
Com isso, fica mais fácil de:
- Analisar PR
- Resolver conflito de merge
- Manter todas as branches atualizadas
Se você for capaz de manter uma estratégia com branches de curta duração.
Código Limpo e Programador Pragmático
Dois ótimos livros sobre desenvolvimento de sistemas codificados e carreira como programador.
Ambos defendem:
- Funções pequenas
- Com nomes descritivos
- Código legível
- Entendível
- Autoexplicativo
- Sem comentários
- Política de Boa Vizinhança
- Deixar o código melhor do que encontrou
- Refatoração contínua
- Não ter medo de alterar o código para melhor, nunca!
- Refatorar para melhorar a leitura, compreensão ou manutenção
- Testes Unitários
- Ponto comum nos 3 livros
- Facilita a manutenção (maior segurança para mudar)
- Facilita o entendimento das regras de negócio
- Força a criação de funções pequenas e desacopladas
Micro-Filosofia
Está presente em cada uma dessas entidades da programação.
Consiste em quebrar grandes problemas, etapas ou funcionalidades, em micro-tarefas.
Todos os autores afirmar que a verdadeira velocidade no desenvolvimento de Software só é possível com passos pequenos, iterativos, testáveis e manuteníveis.
Eu, particularmente concordo, tenho aplicado muitos dos conceitos que comentei no post e acredito que é muito mais fácil e seguro aplicar a microfilosofia no rotina do desenvolvimento de software.