A Arte de Escrever Programas Legíveis
Técnicas simples e práticas para elaboração de programas fáceis de serem lidos e entendidos
Descrição do livro
"Ter consciência de como seu código-fonte afeta aqueles que trabalharão com ele futuramente é uma parte importante do desenvolvimento de software. Os autores fizeram um ótimo trabalho apresentando os diferentes aspectos desse desafio e explicando detalhes com exemplos instrutivos."
—Michael Hunger, Desenvolvedor de Software, Neo Technology
Como programadores, todos já vimos códigos-fonte tão feios e problemáticos que poderiam desanimar qualquer um. Durante os últimos cinco anos, Dustin Boswell e Trevor Foucher analisaram centenas de exemplos de “códigos-fonte malfeitos” (muitos deles mesmos) para determinar o que havia de errado com eles e como poderiam melhorá-los. A conclusão a que chegaram? Você deve escrever códigos-fonte de modo a minimizar o tempo necessário para que outra pessoa possa entendê-los — ainda que essa “outra pessoa” seja você mesmo.
Este livro se concentra em princípios básicos e técnicas práticas que você poderá aplicar sempre em seus códigos-fonte. Utilizando exemplos de códigos-fonte fáceis de serem compreendidos e retirados de várias linguagens, cada capítulo aborda um aspecto distinto da codificação e demonstra como você pode tornar seu código-fonte fácil de entender.
- Simplifique a nomeação, os comentários e a formatação com dicas que podem ser aplicadas a todas as linhas de seu código-fonte- Aprimore os loops, a lógica e as variáveis de seu programa para reduzir sua complexidade e potencial confusão
- Confronte problemas no nível das funções, usando técnicas como reorganizar blocos de código para que realizem uma tarefa de cada vez
- Escreva códigos-fonte de teste efetivos, completos e concisos — além de legíveis
Ver menos ▲
Sumário
Sumário
- Prefácio
- Códigos devem ser fáceis de entender
- O que torna um código “melhor”?
- Teorema fundamental da legibilidade
- Menor é sempre melhor?
- Por acaso o tempo-para-entender entra em conflito com outros objetivos?
- A parte difícil
- Parte I Melhorias superficiais
- Criação de nomes informativos
- Escolha palavras específicas
- Evite nomes genéricos como tmp e retval
- Prefira nomes concretos a nomes abstratos
- Inclusão de informações extras a um nome
- Qual deve ser o comprimento de um nome?
- Utilize a formatação dos nomes para transmitir significado
- Sumário
- Nomes que não podem ser mal interpretados
- Exemplo: Filter()
- Exemplo: Clip(text, length)
- Prefira min e max para limites (inclusivos)
- Prefira first e last para intervalos inclusivos
- Prefira begin e end para intervalos do tipo inclusivo/exclusivo
- Nomenclatura de booleanos
- Atendendo às expectativas de seus usuários
- Exemplo: avaliação de vários candidatos a nomes
- Sumário
- Estética
- Por que a estética é importante?
- Reorganize quebras de linhas para que sejam consistentes e compactas
- Utilize métodos para eliminar irregularidades
- Utilize o alinhamento em colunas quando adequado
- Escolha um ordenamento significativo e utilize-o de modo consistente
- Organize declarações em blocos
- Divida seus códigos em “parágrafos”
- Estilo pessoal versus consistência
- Sumário
- Como saber o que comentar
- O que NÃO devemos comentar
- Registre seus pensamentos
- Coloque-se na posição do leitor
- Considerações finais – como superar seu bloqueio de escritor
- Sumário
- Crie comentários precisos e compactos
- Mantenha seus comentários compactos
- Evite pronomes ambíguos
- Melhore referências imprecisas
- Descreva o comportamento das funções de modo preciso
- Utilize exemplos de entrada/saída para ilustrar situações confusas
- Declare a intenção de seu código
- Comentários de “parâmetros de função nomeados”
- Utilize palavras informativas
- Sumário
- Parte II Simplificação de loops e lógica
- Como facilitar a leitura do fluxo de controle
- Ordem dos argumentos em condicionais
- Ordem de blocos if/else
- Expressão condicional ?: (também conhecida como “operador ternário”)
- Evite loops do/while
- Retorno antecipado de uma função
- O infame goto
- Minimize o uso de aninhamentos
- Você consegue acompanhar o fluxo de execução?
- Sumário
- Divisão de expressões gigantes
- Variáveis de explicação
- Variáveis de resumo
- Uso das leis de De Morgan
- Uso excessivo da lógica de curto-circuito
- Exemplo: Problemas com lógica complicada
- Divisão de expressões gigantes
- Outra forma criativa de simplificarmos expressões
- Sumário
- Variáveis e legibilidade
- Eliminação de variáveis
- Reduza o escopo de suas variáveis
- Prefira variáveis de gravação única
- Um exemplo final
- Sumário
- Parte III Reorganização de seu código
- Extração de subproblemas não relacionados
- Exemplo introdutório: findClosestLocation()
- Código utilitário puro
- Outros códigos de propósito geral
- Crie muitos códigos de propósito geral
- Funcionalidades específicas de projetos
- Simplificação de uma interface existente
- Remodele uma interface de acordo com suas necessidades
- Cuidado para não ir longe demais
- Sumário
- Uma tarefa de cada vez
- Tarefas podem ser pequenas
- Extração de valores de um objeto
- Um exemplo mais extenso
- Sumário
- Como transformar seus pensamentos em código
- Descreva sua lógica com clareza
- Vale a pena conhecer suas bibliotecas
- Aplicação desse método a problemas maiores
- Sumário
- Escreva menos código
- Não se preocupe em implementar esse recurso – ele não será necessário
- Questione e divida seus requisitos
- Mantenha sua base de código pequena
- Esteja familiarizado com as bibliotecas à disposição
- Exemplo: Uso de ferramentas Unix em vez de codificação
- Sumário
- Parte V Tópicos selecionados
- Testes e legibilidade
- Facilite a leitura e a manutenção de seus testes
- O que há de errado com este teste?
- Como tornar esse teste mais legível
- Como tornar suas mensagens de erros mais legíveis
- Escolha de boas entradas de teste
- Nomenclatura de funções de teste
- O que havia de errado com aquele teste?
- Desenvolvimento compatível com testes
- Como perceber quando exageramos
- Sumário
- Projeto e implementação de um “contador de minutos/horas”
- O problema
- Definição da interface da classe
- Tentativa 1: uma solução ingênua
- Tentativa 2: projeto da “esteira rolante”
- Tentativa 3: um projeto com intervalos de tempo agrupados
- Comparação das três soluções
- Sumário
- Leituras adicionais
- Livros que tratam da elaboração de códigos de alta qualidade
- Livros que tratam de vários tópicos de programação
- Livros de significado histórico
- Sobre os autores
- Índice remissivo
Sobre os autores
Dustin Boswell graduou-se na CalTech e trabalhou no Google por cinco anos, na infraestrutura de rastreamento web e em programas de publicidade. Dustin já criou vários sites e gosta de trabalhar em projetos que envolvam grandes bancos de dados e aprendizagem de máquina (machine learning).… Ver perfil completo ▶
Trevor Foucher passou a última década na Microsoft como engenheiro, gerente e diretor técnico em produtos para Windows e de segurança, e no Google, trabalhando em programas de publicidade e infraestrutura de busca.… Ver perfil completo ▶
Livros relacionados
Opinião dos leitores
Werter B
Excelente livro, ele realmente te ensina a escrever códigos mais legíveis e limpos. Todas as técnicas são muito boas. É um livro obrigatório para todos os devs.
Fidelis B C
Livro útil e adequado para leitores de nível intermediário.
Isvaldo F de S
Programar é muito mais que saber códigos e sintaxe. Trabalhar em equipe e pensar na reutilização são práticas que às vezes determinam a vida de um sistema/programa. Esse livro aborda excelentes práticas que hoje uso em meus projetos! Recomendo a leitura, além de simples e rápida, ela é muito engraçada.
Victor H S d A
Recomendo a todos esse livro! A leitura é bastante agradável, e conta com ótimos exemplos de como elaborar códigos fáceis de ler e se manter.






