Micro-Filosofia: A arte da fragmentação

Caio Borghi - Jul 17 '23 - - Dev Community

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

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
Enter fullscreen mode Exit fullscreen mode

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].

Seção Padding na documentação do Tailwind

Assim como o GNU, o Tailwind também acredita no poder da filosofia micro para a resolução de problemas.

Refatoração

livro Refatoração do Martin Fowler
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.

. . . . . . . . . . . . . . . . .