Sendo um programador pragmático

O gato comeu meu código fonte Seja responsável pelo código que você escreve, reconheça quando cometer erros e lide com isso profissionalmente. Se acontecer uma falha e você não tiver um plano de contingência, dizer ao seu chefe “o gato comeu meu código” não vai resolver. Antes de abordar alguém para dizer que algo não pode ser feito, pare e escute a si mesmo. Como sua resposta vai soar para seu chefe? ...

July 30, 2025

As partes importantes de Clean Architecture (Arquitetura Limpa)

Tenho flertado com a arquitetura de software recentemente e esse livro caiu como uma luva. Como sempre, esse artigo é mais para mim do que para qualquer outra pessoa. Detalhes Fazer um programa funcionar não é difícil, estudantes de ensino médio ou fundamental fazem isso sem dificuldades. Mas fazer direito? Ah, isso sim é difícil - é como a diferença entre fazer um sanduíche e ser chef de um restaurante estrelado. ...

June 10, 2025

SOLID Dependency Inversion Principle

Você já assistiu aquelas novelas onde todo mundo depende de todo mundo e no final vira aquela bagunça épica? Pois é, seu código também pode virar isso se você não entender o Princípio da Inversão de Dependência (Dependency Inversion Principle - DIP), a última letra do famoso SOLID. O Drama Antes da Inversão Imagine que você está desenvolvendo um sistema de notificações. Seu primeiro instinto pode ser algo assim: class EmailService { public function send(string $message): void { echo "Enviando email: " . $message . "\n"; } } class NotificationManager { private EmailService $emailService; public function __construct() { $this->emailService = new EmailService(); // 🚨 Bandeira vermelha! } public function notify(string $message): void { $this->emailService->send($message); } } Parece inofensivo, né? Mas na verdade você acabou de criar o equivalente tecnológico de um relacionamento tóxico. Sua NotificationManager está completamente dependente da EmailService. Quer trocar por SMS? Vai ter de refatorar a classe. ...

June 9, 2025

SOLID Interface Segregation Principle

O Princípio de Segregação de Interface, formulado por Robert C. Martin (também conhecido como Uncle Bob), estabelece uma regra simples: nenhum cliente deve ser forçado a depender de métodos que não utiliza. Em termos práticos, isso significa que é melhor ter várias interfaces pequenas e específicas do que uma interface gigantesca que tenta resolver todos os problemas do universo. É como tentar usar um único aplicativo para programar, editar imagens, gerenciar finanças e tocar música — no fim, ele faz tudo de forma mediana ou mal feita. Já ferramentas especializadas, como um editor de código, um software de design e um app de contabilidade, cada uma focada em seu propósito, entregam muito mais valor. ...

June 8, 2025

SOLID Liskov Substitution Principle

Se você já se perguntou por que às vezes sua hierarquia de classes parece mais bagunçada que uma gaveta de cabos, talvez seja hora de conhecer Barbara Liskov e seu famoso princípio. A Definição Formal (Ou: Como Falar Difícil Para Impressionar) Barbara Liskov, em 1987, definiu formalmente seu princípio da seguinte maneira: Se φ(x) é uma propriedade demonstrável dos objetos x de tipo T, então φ(y) deve ser verdadeiro para objetos y de tipo S, onde S é um subtipo de T. ...

June 5, 2025

SOLID Open Closed Principle

Se você já trabalhou com código por mais de cinco minutos, provavelmente já passou pela seguinte situação: você precisa adicionar uma nova funcionalidade e, de repente, percebe que vai ter que mexer em 47 arquivos diferentes, quebrar 23 testes e rezar para três santos diferentes para que tudo continue funcionando. Bem-vindo ao mundo maravilhoso do código que não segue o Princípio Aberto/Fechado (Open/Closed Principle), a segunda letra do acrônimo SOLID! ...

June 1, 2025

SOLID Single Responsability Principle

De todos os princípios SOLID, o SRP provavelmente é o mais conhecido e o menos compreendido. Isso se deve principalmente ao seu nome inadequado. Ao escutar esse nome, logo pensamos que os módulos devem fazer apenas uma coisa. O Que É Esse Tal de SRP? O SRP diz basicamente: “Um módulo deve ter uma, e apenas uma, razão para mudar”. O Problema: A Classe Canivete Suíço Imagine que você está no escritório e encontra esta belezinha no código: ...

May 26, 2025

Entendendo as Diferenças entre Regras de Negócio, Requisitos Funcionais e Não Funcionais

Se você trabalha (ou quer trabalhar) com análise de sistemas, desenvolvimento ou produto, entender esses três conceitos é fundamental. Vamos lá: 📌 Regras de Negócio São as diretrizes que a empresa segue, independentemente da existência de um sistema. São definidas pelo negócio, não pela tecnologia. Exemplo (Loja de Roupas): Não vende fiado Só aceita trocas com produto em perfeito estado Aceita pagamento por boleto Não aceita pagamento por cheque Ou seja: se a empresa deixar de usar o sistema, essas regras continuam valendo. ...

April 11, 2025

Guia básico de NGINX

Hoje vou fazer um dump de tudo que sei de NGINX, mostrando que não é difícil dar manutenção nos arquivos de configuração do seu servidor. Depois de ler esse post você vai poder: Entender os arquivos de configuração do NGINX Configurar o NGINX como um servidor web Configurar o NGINX como um proxy reverso Configurar o NGINX como um load balancer Índice Introdução ao NGINX Como instalar o NGINX Introdução às configurações do NGINX Como configurar um servidor web básico Escrevendo seu primeiro arquivo de configuração Como validar e recarregar os arquivos de configuração Como entender as diretivas e contextos no NGINX Como servir conteúdo estático usando NGINX Lidando com tipos de arquivo estático no NGINX Como incluir arquivos de configuração parciais Roteamento dinâmico no NGINX Correspondência de localização Variáveis no NGINX Redirecionamentos e reescritas Como tentar múltiplos arquivos Logs no NGINX Como usar o NGINX como um proxy reverso Node com NGINX Como usar o NGINX como um load balancer Como configurar processos worker e conexões worker Introdução ao NGINX Apesar de ser mais conhecido como um servidor web, o NGINX é basicamente um servidor de proxy reverso. ...

March 31, 2025

As partes importantes de Clean Coder (O Codificador Limpo)

Para ser sincero, estou escrevendo este post mais para minhas consultas futuras do que por qualquer outro motivo, mas sei que pode ser útil para outras pessoas. Dito isso, tentei explicar com minhas palavras os pontos mais importantes do livro em cada capítulo. Lembre-se: nada aqui é regra absoluta. Tudo pode e deve ser questionado. Agora, sem mais delongas, vamos aos capítulos! Profissionalismo Profissionalismo = Responsabilidade Não cause danos ao funcionamento […] Software é muito complexo para ser criado sem bugs. Mas infelizmente, isso não o exime de sua responsabilidade. O corpo humano é muito complexo para ser entendido plenamente, mas os médicos ainda fazem um juramento para não danificá-lo. Se eles não se eximem da responsabilidade, por que nós deveríamos? ...

March 1, 2025