Código Limpo – Parte 01

“Conforme a confusão aumenta, a produtividade da equipe diminui, assintoticamente aproximando-se de zero” –  Robert C Martin

Sempre tive vontade de aprender e entender o que seria um código bom, um código limpo e legível, tanto que no fim do ano passado resolvi comprar (por indicações de amigos) o Livro: Código Limpo – Habilidades, Práticas do Agile Software, escrito por Robert C. Martin (Uncle Bob), mas tive a oportunidade de lê-lo apenas esse ano, e para fixar os conceitos e também passar o conhecimento adiante, resolvi fazer pequenos resumos dos capítulos do livro. Então esta serie que estou começando sobre metodologias e Código limpo será totalmente baseado no livro, com algumas opiniões minhas ou de outros autores (quando for relevante citar outros). Mais uma vez gostaria de reforçar que estes textos são embasados no livro Código Limpo, de Robert C. Martin. Obrigado!

Capítulo 01

É fato que o código nunca deixará de existir, bem como seus programadores (autores), mesmo que o nível de automação do código chegue ao extremo, ainda assim teremos programadores e códigos, sendo assim a importância de  se ter um código limpo é demasiadamente importante, boas práticas são sempre bem vindas. Robert cita no livro que ” […] Podemos criar ferramentas que nos ajudem a analisar a sintaxe e unir tais requisitos em estruturas formais, mas jamais eliminaremos a precisão necessária – Portanto sempre haverá código.”

Mas antes de entendermos o que é um código limpo, temos que entender o que seria o oposto, ou seja, o que seria um “código sujo”? Como podemos mensurar a qualidade de um código? Na Introdução do livro o autor faz uma brincadeira, dizendo que a maneira de mensurar a qualidade de um código é pela quantidade de “Que diabos/Minuto”. Ainda segundo o autor, a sensação quando se lê um código ruim é a de andar por um lamaçal de arbustos emaranhados com armadilhas ocultas. Podemos concluir então que um código ruim, é um código mal escrito, obscuro, no qual a leitura e o entendimento se torna penoso, podemos entender por código ruim, um código sem formatação, sem padrão de nomenclatura, muito acoplado, sem abstração e por ai vai. Mas afinal, qual o problema de se ter um código ruim? Bom, a resposta é meio trivial para quem já programa a um tempo, ou já trabalhou em código legado, em um código ruim, a manutenção e o entendimento do mesmo se torna impossível, a ponto de os envolvidos no projeto não verem outra saída a não ser refazer o código do zero, além de diminuir consideravelmente a produtividade no desenvolvimento.

Agora, porque isso acontece? Por falta de tempo? Estava sem paciência de pensar em algo melhor? O projeto estava atrasado? E quantas vezes não pensamos: “Vou terminar aqui, depois refaço o código”, Uncle Bob cita isto no livro e segundo ele esse dia provavelmente nunca irá chegar. O primeiro passo então, para se ter um código limpo é: Nunca deixe para depois, como diria Pitty: “Não deixe nada pra depois, não deixe o tempo passar, não deixe nada pra semana que vem, porque semana que vem  pode nem chegar.”

Além de tudo, somos profissionais e responsáveis por nosso código, por nossa conduta. Por muitas vezes temos a “mania” de se desculpar por um código ruim, dizendo que o prazo era curto, que o gerente do projeto era um mala, que o cliente não saía do pé e aparecia com novos requisitos a cada dia e mudando-os constantemente. Realmente no meu ponto de vista essas coisas atrapalham, mas em hipótese alguma isso pode deixar que nosso código saia ruim. Um exercício feito no livro, é o seguinte: Imagine que você é um médico, e que esta na sala de operações, se preparando para uma cirurgia, mas o paciente esta com pressa e exigisse que você parece de lavar as mãos, você daria ouvidos para ele ou continuaria com o processo?

Mas o que tornaria um código limpo, ou ainda o que o faria um artista codificando? No livro, o autor pega várias referencias de outros mestres da da programação, segue algumas definições do que é um código limpo para alguns programadores conhecidos:

Bjarne Stroustrup

  • A lógica deve ser direta, para dificultar o encobrimento de bugs;
  • Dependências mínimas;
  • Tratamento de erro;
  • O Código limpo, faz bem apenas uma coisa, executa apenas uma tarefa.

 Dave Tomas

  • O código limpo tem testes de uma forma geral, como unitários, integração, aceitação etc. (Farei um post sobre testes em breve);
  • Nome significativos (nada de “int i;”);
  • Poucas dependências e fazer apenas uma tarefa (como citado por Bjarne);

Ou seja segundo Tomas, um código bom, é um código que tenha testes, e uma coisa curiosa, tanto Dave como Bjarne, falam em poucas dependências e executar apenas uma tarefa. Isto provavelmente é um sinal de que bons códigos possuem pouca dependência e são bem refatoradas.

Ron Jeffries

  • Sem duplicação de código;
  • Minimiza o número de entidades, como classes, métodos etc.

Para finalizar, queria deixar aqui uma teoria que ouvi no momento do café da galera no serviço, e curiosamente está teoria foi citado no livro:

Teoria das Janelas quebradas

O estudo aconteceu e o surgimento da teoria aconteceu em 1982 pelos americanos James Wilson e George Kelling, na cidade de Nova York. “Considere-se um edifício com algumas janelas quebradas. Se as janelas não são reparadas, a tendência é para que vândalos partam mais janelas. Eventualmente, poderão entrar no edifício, e se este estiver desocupado, tornam-se “ocupas” ou incendeiam o edifício. Ou considere-se um passeio. Algum lixo acumula-se. Depois, mais lixo acumula. Eventualmente, as pessoas começam a deixar sacos de lixo”. Trazendo para nossa realidade, quando deixamos um código sujo, a probabilidade de outro programador vir e também fazer um mal código ao invés de limpa-lo é relativamente grande.

Um Abraço

Pedro H O Silva

“Tentem deixar este mundo um pouco melhor do que o encontraram […]” – Robert Stephenson Smyth Baden-Powell

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s