Federico Mena-Quintero
federico@gnome.org 2013
Miguel de Icaza
miguel@gnome.org
Morten Welinder
mortenw@gnome.org

This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.

Como uma exceção especial, os detentores do copyright dão a você permissão para copiar, modificar e distribuir o código exemplo contido nesta documentação sob os termos de sua escolha, sem restrição.

Código bom e legível mantém o projeto manutenível
Rafael Fontenelle
rafaelff@gnome.org 2017

# A importância de um código bem escrito

GNOME é um projeto de software livre muito ambicioso e é composto por muitos pacotes de software que são mais ou menos independentes entre si. Muito do trabalho no GNOME é feito por voluntários: apesar de haver muitas pessoas trabalhando no GNOME em tempo integral ou parcial, voluntários ainda fazem uma grande porcentagem de nossas contribuições. Programadores podem ir e vir todo o tempo e eles serão capazes de dedicar diferentes parcelas de tempo para o projeto do GNOME. As responsabilidades do “mundo real” das pessoas podem alterar e isso refletirá na quantidade de tempo que eles devotam ao GNOME.

Desenvolvimento de software leva grandes quantidades de tempo e esforços penosos. É por isso que a maioria dos voluntários em tempo parcial não conseguem iniciar grandes projetos por si próprio; é muito mais fácil e recompensador contribuir para projetos existentes, pois isso traz resultados que são imediatamente visíveis e usáveis.

Portanto, nós concluímos que é muito importante para os projetos existentes torná-los o mais simples possível para que pessoas contribuam para eles. Uma forma de fazer isso é se certificar de que programas são fáceis de ler, entender, modificar e manter.

Um código bagunçado é difícil de ler e as pessoas podem perder o interesse se elas não puderem decifrar o que o código tenta fazer. Ademais, é importante que os programadores sejam capazes de entender o código rapidamente de forma que eles possam começar a contribuir com correções de erro e aprimoramentos em uma pequena quantidade de tempo. Código-fonte é uma forma de comunicação e é mais para pessoas que para computadores. Assim como alguém não gostaria de ler uma novela com erros de escrita, gramática ruim e pontuação desleixada, programadores devem se esforçar para escrever um bom código que seja fácil de ser entendido e modificado por outros.

A seguir estão algumas qualidades importantes de um bom código:

# Limpeza

Um código limpo é fácil de ler com esforço mínimo. Isso permite que pessoas comecem a entendê-lo facilmente. Isso inclui o estilo de codificação em si (colocação de chaves, recuo, nomes de variáveis) e o fluxo de controle do código.

# Consistência

Um código consistente facilita o entendimento de como um programa funciona. Ao ler um código consistente, forma-se subconscientemente um número de presunções e expectativas sobre como o código funciona, então é mais fácil e seguro fazer modificações nele. Um código que se parece o mesmo em dois locais deve funcionar da mesma forma, também.

# Extensibilidade

Um código com propósito geral é mais fácil de reusar e modificar do que um código muito específico com diversas presunções codificadas. Quando alguém deseja adicionar um novo recurso a um programa, obviamente será mais fácil fazer isso se o código foi projetado para ser extensível desde o começo. Um código que não foi escrito dessa forma pode levar pessoas a ter que implementar hacks feios e adicionar recursos.

# Corretismo

Finalmente, um código que é projetado para ser correto permite que as pessoas gastem menos tempo se preocupando com erros, e mais tempo melhorando os recursos de um programa. Usuários também apreciam um código correto, já que ninguém gosta de software que trava. Código que é escrito prezando pelo corretismo e segurança (i.e. código que explicitamente tenta se certificar de que o programa permaneça em um estado de consistência) evita muitos tipos de erros bobos.

# Referências literárias

Code Complete, por Steve McConnell.

Refactoring: Improving the Design of Existing Code , por Martin Fowler.

Design Patterns: Elements of Reusable Object-Oriented Software , by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides.

Object-Oriented Design Heuristics , por Arthur Riel.