Uma afirmação popular sobre código é que ele é lido dez vezes mais do que escrito. Isso geralmente é usado como um argumento para codificação exigente: você verá muito seu código, então gaste algum tempo extra em qualidade . A evidência revisada por pares para essa afirmação é escassa, mas tudo o que consegui encontrar mostra a proporção de 10 para 1 como extremamente conservadora. A proporção real talvez esteja mais próxima de 100 para 1. E quanto maior a vida útil de um produto, maior a proporção.

À luz dessas informações, parece que investimos pouco na habilidade de entender o código. Livros e tutoriais geralmente se concentram na arte do código, a capacidade do programador de teorizar, escrever e modificar código de maneira eficaz e legível, em vez da atividade muito mais comum de ler e interpretar código que já existe. É verdade que ler código é uma habilidade que está abaixo de escrevê-lo – se você pode escrever Python, é lógico que você pode entendê-lo. Mas ler código também é uma habilidade por si só.

Os novos desenvolvedores às vezes sentem que, se não gastarem a maior parte do tempo adicionando novo código a um projeto, não estão sendo produtivos. Essa atitude pode realmente retê-lo. A codificação eficaz requer contexto e confiança: você precisa entender o ambiente em que seu código viverá e ter certeza de que seu trabalho agrega valor. Os primeiros 80 a 95% do tempo gasto em uma tarefa devem ser gastos lendo código e outras formas de documentação. Às vezes é até 100% – no processo de estudar o código existente, você pode aprender o suficiente para poder dizer “esse recurso já existe, acabamos de nos esquecer dele” ou “isso fará mais mal do que bem”.

Ler código é demorado e muitas vezes chato também. Pode envolver perseguições tediosas em tocas de coelho, suposições e verificações repetitivas e vasculhar longas listas de resultados de pesquisa. É um trabalho disciplinado e ingrato. Mas é tempo bem gasto e não há necessidade de pressa. E com a abordagem correta, não precisa ser um fardo.

Neste artigo, explicarei as táticas de leitura de código mais práticas que aprendi ao longo da minha carreira. Todas são ferramentas úteis para se ter em seu cinto, e você vai misturá-las e combiná-las dependendo da situação.

1. Instale plugins úteis

 

Seu IDE é uma ferramenta inestimável para entender o código. Editores como Visual Studio, VS Code, Eclipse e IntelliJ IDEA vivem e morrem pela força de suas habilidades de análise de código e pelo tamanho de suas bibliotecas de plugins. Qualquer que seja o idioma, estrutura ou serviço de nuvem com o qual você esteja trabalhando, reserve alguns momentos para instalar os plug-ins associados. Isso ajudará você a navegar em sua base de código e a detectar problemas mais rapidamente. Plugins oficiais e originais são melhores se você puder encontrá-los, mas os plugins populares suportados pela comunidade também podem ser excelentes.

Procure os seguintes recursos:

 

Realce de sintaxe: mostra palavras-chave, nomes de classe/método/campo/variável e colchetes em cores diferentes para ajudar na compreensão.

Formatação automática: modifica o espaço em branco, o comprimento da linha e outros elementos de estilo para serem mais legíveis e consistentes. Normalmente, você pode configurar isso para acontecer em um atalho de teclado ou sempre que salvar um arquivo.

Análise estática: alerta você sobre problemas em seu código sem realmente executá-lo. Por exemplo, se você digitar incorretamente o nome de uma variável ou usar o tipo errado de aspas, as ferramentas de análise estática incorporadas ao seu IDE ou plug-in de idioma completo o sublinharão em vermelho.

Navegação contextual: fornece opções de menu como “Pular para definição”, “Ver implementações” e “Ver referências” quando você abre o menu de contexto (clique com o botão direito) em um identificador.

Refatoração: automatiza refatorações comuns, como extrair lógica para um método, alterar parâmetros de método ou renomear uma variável.

Dicas de código: mostra informações (como tipos, parâmetros e documentação manuscrita) sobre uma classe/método/campo quando você passa o cursor sobre ele.

Executor de teste: fornece uma interface do usuário para executar testes de unidade e integração e relata os resultados.

Depurador: permite definir pontos de interrupção em seu código para que você possa percorrer um processo específico uma linha por vez e inspecionar os valores no escopo.

Integração de controle de versão: ajuda você a sincronizar e mesclar código com o restante de sua equipe. Também fornece informações sobre o autor e a data da última edição de cada linha de código.

 

Você pode ler o código sem essas ferramentas e, às vezes, pode ser necessário. Mas as ferramentas específicas da linguagem facilitam a verificação de suas suposições e a coleta de contexto, e é mais provável que você faça o que é mais fácil. No final, melhores ferramentas geralmente significam menos adivinhação.

2. Leia o código pelo menos duas vezes

 

Uma leitura quase nunca é suficiente para entender completamente o que um pedaço de código está fazendo. Dois é o mínimo.

Em sua primeira leitura, tente entender o quadro geral examinando e construindo um esboço em sua mente (ou no papel, se ajudar). Seu objetivo é ser capaz de resumir o que o código faz. Se você tem um pato de borracha à mão, agora é a hora de começar a falar com ele. Explique o propósito geral do código em termos básicos. Se você estiver um pouco nebuloso em algumas partes, isso chamará a atenção para elas.

A segunda leitura é mais sobre detalhes. Certifique-se de entender cada linha de código ou pelo menos ter uma teoria sobre isso. Preste atenção especial aos efeitos externos. Quais métodos estão sendo chamados? Quais valores compartilhados estão sendo atualizados? Quais são os valores de retorno? Passe algum tempo mergulhando em cada um deles para que você possa entender toda a lógica em jogo, mesmo que esteja fora do código que você está estudando.

Clique em outros m&eacu