DEV Community

Cover image for Micro-Filosofia: A arte da fragmentação
Caio Borghi
Caio Borghi

Posted on

14 3 3 3 3

Micro-Filosofia: A arte da fragmentação

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.

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (3)

Collapse
 
victorcordeiru profile image
Victor Cordeiro • Edited

Massaa demais! Uma indicação que deixo para quem leu o post até o final -> Revolution OS
no youtube

Collapse
 
xandeact profile image
Alexandre Tucunduva

Muito válida essa reflexão. Sensacional!

Collapse
 
ocodista profile image
Caio Borghi

Valeu!!!

Image of AssemblyAI

Automatic Speech Recognition with AssemblyAI

Experience near-human accuracy, low-latency performance, and advanced Speech AI capabilities with AssemblyAI's Speech-to-Text API. Sign up today and get $50 in API credit. No credit card required.

Try the API

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay