Pular para o conteúdo

O Programador Pragmático, Capítulo 1: Uma Filosofia Pragmática


Decidi ler O Programador Pragmático, do Hunt e do Thomas, em função de sua importância e amplo reconhecimento pelos melhores engenheiros e programadores com que já trabalhei.

O Programador Pragmático é um livro atemporal. Ele não ensina uma tecnologia, um framework ou uma moda. Ele fala da filosofia que um programador deveria ter. E é por isso que ele atravessa gerações: serve tanto para quem está começando quanto para quem já decide arquitetura. É, sem dúvida alguma, uma espécie de cosmopolitismo do conhecimento. Um texto que pertence a qualquer lugar, a qualquer momento, a qualquer senioridade.

Bom, e tem outro detalhe que me agrada: são oito capítulos autocontidos. Dá para ler na ordem, abrir um aleatório, reler aquele que voltou a fazer sentido. Para quem vive em dúvida sobre o que ler, isso é um presente. Minha ideia é revisitar um por vez e escrever o que ficou de cada um.

Agora, por que ler justamente agora? Porque o momento de carreira pede. Hoje eu atuo com gestão de projetos, sigo como desenvolvedor sênior em outras frentes e decido arquitetura. E carrego uma premissa com seriedade: nunca ficar longe da parte técnica. Não para provar que ainda sei codar, mas porque preciso ser capaz de validar, de conversar de igual para igual e de ser produtivo no meu próprio processo de decisão. Quem decide arquitetura sem a mão na massa vira refém do que não conhece.

Então, ler esse livro é voltar a um capítulo da minha carreira. Uma retomada consciente do lugar de onde eu não quero sair: o de quem pensa o software por inteiro, do problema ao detalhe.

O Capítulo em Essência

O Capítulo 1 é a fundação de tudo. Antes de falar de ferramentas, testes ou arquitetura, o livro fala de postura. Uma filosofia.

O capítulo abre com “Uma Filosofia Pragmática” e apresenta, desde o início, uma forma de pensar sobre o trabalho de quem desenvolve software. Mais do que técnicas ou ferramentas, o foco está na postura: assumir responsabilidade pelas próprias decisões, cuidar para que o código não se deteriore, provocar mudanças de forma inteligente, reconhecer quando algo já é bom o suficiente, tratar o aprendizado como um investimento contínuo e saber comunicar ideias com clareza. Os tópicos se conectam justamente por isso: todos ajudam a construir a mentalidade de um programador pragmático.

É menos sobre técnica e mais sobre caráter profissional. Bom, vamos por partes.

1 - O Gato Comeu o Meu Código-Fonte

O capítulo começa com um título cômico, e por isso funciona bem, um programador dizendo que o gato comeu o seu código-fonte é o equivalente adulto de não ter feito a lição de casa. O trocadilho expõe a diferença entre uma explicação e uma desculpa. Uma explicação ajuda a entender o que aconteceu e aponta o que fazer em seguida. Uma desculpa serve, quase sempre, para afastar a responsabilidade de quem está falando.

O que o livro propõe é responsabilidade profissional. E aqui vale desmontar um mal-entendido: assumir responsabilidade não é aceitar qualquer coisa passivamente. É o contrário. É assumir conscientemente aquilo com que você se compromete e responder de forma madura quando algo dá errado.

Organizei a ideia em quatro movimentos, sendo eles:

Aceitar ativamente. Antes de dizer “sim”, entenda o compromisso, os riscos e o que está sob o seu controle. Responsabilidade começa no momento em que você aceita, não quando algo quebra.

Reconhecer limites. Se uma situação é inviável ou o risco é excessivo, faz parte do profissionalismo dizer isso antes, com julgamento e com ética. Dizer “não” no começo é responsabilidade.

Admitir, sem caçar culpado. Quando há erro ou uma decisão ruim, a resposta correta não é procurar culpados nem montar uma justificativa conveniente. É admitir o problema e assumir a sua parcela.

Oferecer opções. Assumir responsabilidade termina em ação: contingência, mitigação, próximos passos concretos. Alternativas, não justificativas.

Tem uma pergunta mental que o livro sugere e que virou meu teste rápido: “Eu teria coragem de dar essa justificativa diretamente para a pessoa a quem preciso prestar contas?” Se a resposta é desconfortável, a chance de você estar oferecendo uma desculpa, e não uma análise profissional, é alta.

Bom, e aqui eu somo uma camada que é minha, porque foi o que me fez reler esse tópico com outros olhos: a conexão com a autorresponsabilidade. Só que com uma nuance que o livro preserva e que eu quase perdi. Autorresponsabilidade não é acreditar que tudo está sob o seu controle. É justamente reconhecer o que você não controla e, ainda assim, se responsabilizar pela forma como avalia riscos, comunica limites e reage às consequências.

É por isso que o trade-off aqui é honesto: admitir o erro na frente de todos é desconfortável no curto prazo. Um programador pragmático não se compromete cegamente, mas, quando assume um compromisso, responde por ele. E diante de problemas oferece alternativas, não desculpas.

2 - Entropia de Software

O capítulo abre com uma constatação incômoda e elegante: o software não obedece às leis da física como as outras engenharias. Uma ponte não enferruja num fim de semana, um prédio não perde a planta sozinho. Mas o software é vítima da entropia como qualquer outra coisa, talvez até o pior tipo (o das pessoas).

Entropia é, no fundo, a forma como o universo se organiza: ele sempre tende ao caos. Dado tempo suficiente, o organizado vira desorganizado. Um projeto que você fez com o maior cuidado, se ficar um ano sem ninguém tocar, não vai parecer o mesmo quando você voltar. Não necessariamente porque o código mudou, muitas vezes ele está idêntico. Mudou a cultura, mudou você, mudaram as tecnologias ao redor. O código parado, apesar de estático, muda seu sabor sem pestanejar.

O livro dá nome a isso: a deterioração do software. É o desgaste que o código sofre pelo simples fato de existir, sem nem entrarmos no mérito das coisas ruins que acontecem. E é aqui que entra a analogia mais famosa do capítulo.

A teoria da janela quebrada parte de dois prédios. No primeiro, uma janela quebra e ninguém conserta. A leitura das pessoas é imediata: “bom, já está quebrada, já está sujo, não vale a pena cuidar”. No segundo, tudo está impecável, e quando uma janela quebra, ela é consertada rápido. A mensagem que fica é outra: esse lugar é cuidado, e ninguém quer ser o responsável por estragá-lo.

A ponte com o nosso código é direta. O TODO esquecido, o teste comentado, o caso especial que “depois a gente arruma”, nenhuma dessas janelas é grave sozinha. O problema é o recado que elas passam. É a diferença entre um projeto que convida ao descuido e um que se defende sozinho.

E o trade-off aqui é tentador, por isso é perigoso: consertar a janela custa tempo e foco agora, e adiar parece economizar. Só que a conta não desaparece, ela muda de forma e cresce. A primeira janela custa minutos; a vigésima custa uma refatoração que ninguém quer aprovar.

Pois bem, o gancho do capítulo não é “nunca quebre nada”. Quebrar vai acontecer. O ponto é que, ancorados na autorresponsabilidade, a gente cuide para manter o software apresentável, já que a primeira janela é sempre a mais barata de consertar. Um software bem cuidado é mais resiliente ao tempo, às pessoas e às mudanças que virão.

3 - Sopa de Pedras e Sapos Cozidos

Duas histórias, dois avisos opostos. E, juntas, elas formam uma excelente ideia: pequenas mudanças são ferramentas poderosas, desde que usadas de propósito.

Na sopa de pedras, o viajante convence a aldeia a contribuir com um banquete colocando uma pedra na água e, dessa forma, cada aldeão contribui com algo para a sopa. O ensinamento é direto: nem sempre vale a pena tentar aprovar a solução inteira de uma vez. Isso costuma gerar resistência, burocracia, pedido de orçamento, comitê, atraso. O caminho mais eficiente é começar por uma parte pequena, fazer bem feito, demonstrar valor e usar esse resultado para conquistar interesse e patrocínio para os próximos passos.

E tem uma parte que jamais pode ser subestimada: o esforço coletivo. Mesmo quando você tem clareza absoluta da solução, são as pessoas ao redor, os outros devs, os clientes, os gestores, que tornam a coisa possível. Você precisa ser o catalisador, não o dono da razão.

Já o sapo cozido traz o alerta espelhado. A mudança gradual e silenciosa não é percebida até ser tarde. Se cada passo é pequeno o suficiente, ninguém sente o desconforto e ninguém reage. O problema é que a soma não é pequena. Uma decisão técnica ruim isolada é fácil de notar; mil pequenas concessões ao longo de um ano, não.

Então não basta aceitar mudanças contínuas só porque cada uma parece inofensiva. O contrapeso é uma postura ativa e reflexiva: olhar de novo para o estado atual do projeto e se perguntar se a soma dessas mudanças ainda está levando para um bom lugar.

4 - Software Suficientemente Bom

Existe uma versão de software perfeito. Ela não existe.

E antes que isso soe como desculpa para baixar o padrão: software bom o suficiente não é software malfeito. É software que entrega valor no momento certo, sem cair na armadilha do perfeccionismo. A diferença entre os dois é enorme, e é ela que separa maturidade de descuido.

A ideia central é essa: perseguir a solução ideal pode atrasar tanto a entrega que o benefício se perde no caminho. Em muitos casos, uma versão menor, autocontida e útil hoje vale mais do que uma solução teoricamente perfeita que chega tarde demais.

Esse tópico é um alívio para quem, como eu, já foi refém de perfeccionismo. O livro não diz “entregue porcaria”. Diz que qualidade e escopo são negociáveis, e que a hora de parar é uma decisão de engenharia e não um fracasso.

E tem um detalhe que muda tudo: quem define o “suficiente” não é só você. É o usuário. Ele participa da decisão porque é ele quem sabe quais concessões são aceitáveis e quais funcionalidades realmente importam. Sem isso, você corre o risco de perseguir um perfeccionismo que não gera valor nenhum para quem vai usar o software.

Porque, no fundo, entregar software é escolher. Escopo, prazo, qualidade, performance, funcionalidades, quase sempre uma coisa cede para a outra. A maturidade está em fazer essas escolhas de forma explícita, e não em fingir que dá para maximizar tudo ao mesmo tempo.

Pois bem, eu escrevi sobre isso sem saber que estava dando nome à coisa quando contei por que demorei quatro anos para criar este blog. O perfeccionismo não me deixava publicar. O “bom o suficiente” foi o que me libertou. Mesma lição, outro contexto.

Software satisfatório não é software incompleto: é software que entrega o valor necessário no momento certo. Muitas vezes, uma solução boa e disponível hoje é melhor do que uma solução perfeita que chega tarde demais.

5 - Sua Carteira de Conhecimento

O livro propõe um modelo mental que eu adotei na hora: tratar o conhecimento como uma carteira de investimentos.

A ideia por trás é simples e direta. Sua capacidade profissional não deveria depender de um único conhecimento, de uma única tecnologia, de aprendizados esporádicos. Ela precisa ser gerenciada continuamente, exatamente como uma boa carteira.

E os paralelos com o mundo financeiro são bons demais para ignorar. O primeiro: investir com regularidade. Aprendizado vira hábito, não reação de emergência quando o mercado muda ou quando bate o medo de ficar para trás. Gostei da metáfora justamente por isso: ela tira o aprendizado do terreno da inspiração e joga no terreno da disciplina. Não é sobre esperar a vontade chegar; é sobre aportar toda semana.

O segundo é diversificar. Concentrar todo o conhecimento em uma área só aumenta a sua vulnerabilidade. Eu, que venho de backend, ganhei muito entendendo de infraestrutura, de frontend, de produto e até da forma como o cliente pensa. Nenhum desses conhecimentos substitui o outro — eles se multiplicam.

O terceiro é gerenciar risco. Parte da carteira pode ficar no que é consolidado e seguro; outra parte pode apostar em ideias emergentes, com mais risco e mais potencial de retorno. E daí vem o “comprar barato e vender caro”: aprender algo antes de virar moda costuma gerar uma vantagem real quando aquele conhecimento passa a ser valorizado.

Talvez o ponto mais importante, porém, seja que essa carteira não é estática. Ela precisa ser revisada e reestruturada de tempos em tempos. O que era valioso há alguns anos pode ter perdido relevância, enquanto áreas novas passaram a merecer mais atenção. Não revisar é a forma mais silenciosa de concentrar risco.

O custo, claro, é tempo. Aprender algo que talvez você nunca use é dinheiro no colchão. Só que é o tipo de seguro que, quando você precisa, já é tarde para contratar.

E fica uma consequência prática que mudou meu jeito de encarar isso: aprender não é uma atividade paralela à carreira. É parte do próprio processo de desenvolvimento profissional. Conhecimento também é uma carteira de investimentos: invista com frequência, diversifique, assuma riscos de forma consciente e revise constantemente onde você está colocando a sua energia.

6 - Comunique-se!

O último tópico fecha o capítulo deslocando o foco: sai a capacidade técnica, entra a capacidade de fazer uma ideia chegar corretamente até outra pessoa.

A peça central é dura e verdadeira: uma boa ideia fica órfã sem comunicação efetiva. Não basta entender um problema ou ter uma solução boa. Você precisa explicar, defender, adaptar e transmitir. Só assim a ideia tem alguma chance de ser aceita e executada.

E isso começa antes de abrir a boca: por saber o que você quer dizer. Clareza de pensamento vem antes da clareza de comunicação. Depois, conhecer o público. Uma conversa com alguém de marketing não pode ter o mesmo vocabulário, o mesmo nível de detalhe e as mesmas referências de uma conversa com engenharia. Comunicar bem é adaptar.

O momento também pesa. Mesmo uma mensagem correta fracassa se for entregue na hora errada. O conteúdo e o timing caminham juntos. A ideia certa no contexto errado vira ruído.

Depois vem o estilo. Tem gente que responde melhor a dados objetivos; tem gente que precisa de contexto, narrativa, exemplo. A forma de apresentar a ideia deveria levar em conta quem vai recebê-la. E, se a ideia importa, ela merece um veículo bem construído: uma conversa preparada, um documento claro, uma apresentação decente. O meio também comunica.

Por fim, uma parte que a gente esquece com facilidade: comunicar não é só falar. Ser bom ouvinte e dar retorno fazem parte do processo. Sem isso, não é comunicação, é monólogo.

Por vezes, pensei que o trabalho de um engenheiro terminava no código. Não termina. Uma solução que ninguém entende, ninguém compra ou ninguém consegue manter está, na prática, resolvida pela metade. A ideia precisa viajar, do editor para o colega, do colega para o gestor, do gestor para o cliente.

Afinal, uma boa ideia só ganha valor quando consegue chegar às pessoas. Comunique com clareza, adapte a mensagem ao público, escolha o momento e o estilo adequados e lembre que comunicar também é saber ouvir. Não à toa a comunicação voltou como o último pilar de uma filosofia que começa na responsabilidade.

Escrever este blog, aliás, é o meu jeito de treinar exatamente isso.

O Que Fica

Software pragmático começa muito antes do teclado. Começa em como você se posiciona: dono da própria carreira, responsável pelos próprios erros, zeloso com as janelas quebradas, alguém que usa os pequenos passos com intenção, capaz de dizer “bom o suficiente”, investidor constante do próprio conhecimento e alguém que sabe comunicar o que faz.

Nenhum desses pontos é uma técnica. Todos são uma postura.

No próximo post eu encaro o Capítulo 2, Uma Abordagem Pragmática, onde a filosofia finalmente vira prática: princípios para projetar, decidir e escrever código que aguenta o tempo.