Programação: Como escrever um código limpo?

Todos nós estamos cansados de ouvir o quanto escrever um bom código é essencial para o desenvolvimento de qualquer projeto, e que caso não sigamos essa linha de pensamento teremos os ruins e velhos problemas conhecidos, como por exemplo:

Problemas com a leitura do código: um código mal escrito o torna ilegível, fazendo com que o próprio desenvolvedor que o escreve, caso volte a ler aquele trecho algum tempo depois, corre o risco de não entender o que ele mesmo havia escrito.

Problemas com manutenibilidade: um código ilegível consequentemente dificulta a manutenção e extensão das funcionalidades do sistema, fazendo com que esse processo seja complicado e desgastante para o programador que venha a executá-lo.

linguagem de programação mais popular

Já ouvi muito na faculdade a seguinte frase:

“às três da madrugada de um domingo você não enxerga mais nada” (Prof. Dr. Ítalo Vega).

Esta frase está intimamente ligada ao fato da importância de você ter um código limpo e bem escrito. Pense na seguinte situação: você procurando um bug em uma função que não foi você quem a escreveu, e às 19hrs de uma sexta-feira, em uma aplicação que entrará em produção no sábado (o que é muito comum de acontecer). Se caso o programador que tenha escrito aquela função, um simples pedaço da aplicação, não tenha se preocupado com uma boa prática em codificação provavelmente fará com que você fique madrugada à dentro lendo e relendo todas aquelas linhas até entender o que de fato elas fazem, até encontrar o erro e finalmente corrigi-lo.

Levar mais tempo para fazer manutenção significa que você gastará mais dinheiro para estender ou corrigir pequenas funcionalidades, e gastar dinheiro além do previsto é uma das coisas que nenhum gerente de projetos gosta.

Sendo assim, como podemos codificar de modo que tenhamos um código limpo, legível e produtivo?

Alguns princípios básicos envolvem:

  • Escolher bons nomes para suas variáveis, nomes significativos e que estejam de acordo com o contexto empregado são tão importantes quanto todo o código escrito. Dar bons nomes as suas variáveis faz com que todos que leiam seu código compreendam o real motivo dela estar sendo utilizada, facilitando a leitura e compreensão do código.
  • Uma função deve fazer apenas UMA coisa – leia isso novamente! Uma função que desempenha mais de uma tarefa torna ainda mais complexa a sua compreensão e se transforma em uma função “bombril”, um pedacinho de código com mil e uma utilidades, o que na hora da manutenção se tornará em um monstro de 7 cabeças, ou dependendo do código escrito 7^7 cabeças.
  • Dar bons nomes a funções é tão importante quanto dar bons nomes a variáveis, os nomes dados a funções devem expressar literalmente o que elas fazem de modo que um programador não precise ler o código inteiro de uma função para entender o que ela faz. Um problema ainda muito encontrado são funções em que seu nome não possuí nenhuma relação com o código que descreve o seu verdadeiro comportamento, o que irá confundir o desenvolvedor que usar está função pois ele perceberá que o que ela promete cumprir não condiz com o que ela de fato faz.
  • A melhor forma de darmos bons nomes a funções e variáveis é fazermos uma análise do domínio do problema que estamos tentando solucionar, assim podemos extrair boa parte dos nomes que representam de fato os elementos que usaremos para solucionarmos o problema.
  • Ainda falando sobre funções um outro aspecto muito importante é o seu tamanho, funções não devem ser grandes demais e caso sejam isso é um sinal de que algo está errado. Não podemos definir exatamente o que é um tamanho bom ou o que é um sinal de que temos um problema à vista, antigamente programadores consideravam o tamanho da tela uma boa métrica para o tamanho de funções porém hoje em dia temos diversos tamanhos de monitores, o que faz com que essa não seja a maneira correta de medirmos o tamanho de uma função. Podemos considerar uma função de tamanho ideal quando a sua quantidade de linhas está na faixa de 15 a 20 linhas, o que é suficiente para desempenhar apenas uma atividade, mas é claro que em alguns momentos isso pode variar para mais ou para menos dependendo do contexto que a qual função pertence fazendo com que tenhamos que usar o bom senso.

Princípios como estes nos ajudam a desenvolver códigos de maior qualidade, fazendo com que tenhamos maior produtividade e torne prazerosa a escrita de qualquer que seja a funcionalidade que o sistema exija, influenciando na manutenibilidade e complexididade do que é produzido, ou seja, são de extrema importância em nosso dia-a-dia.

Recomendo como leitura sobre boas práticas e como escrever um bom código o livro “Código Limpo” de Robert C. Martin, este livro trata a fundo estes pontos e muitos outros considerados indispensáveis para que possamos obter um código bem escrito e funcional.

Ame o seu código, pois ele descreve o profissional que você é.

Esqueci algum princípio para código limpo? Deixe seu comentário! 🙂

Até a próxima!
@marvinferreira

Marvin Ferreira

Mais artigos deste autor »

Mestre em Engenharia da Computação e Bacharel em Ciência da Computação.

Orientado a dados em primeiro lugar e apaixonado por desenvolvimento de produtos.

Trabalho há mais de 9 anos no mercado de Tecnologia brasileiro e me orgulho muito de algumas coisas das quais pude participar:

- Trabalhar em uma companhia em que pude ver seu crescimento de 70 funcionários saltar para 600 e se tornar a líder de seu mercado
- Participar em um projeto de integração de 3 diferentes plataformas em uma única base compartilhada
- Trabalhar com times de desenvolvimento distribuídos ao redor do mundo para uma companhia de petróleo multinacional
- Contribuído com times ágeis a alcançar sucesso através do desenvolvimento do MVP correto
- Ter sido Treinador Oficial Microsoft e também ter palestrado para milhares de pessoas ao longo da minha carreira


11 Comentários

Simone
1

Ótimo artigo!
Sobre os princípios para um código limpo eu adicionaria a identação. Nada pior que uma cadeia de IF/Loop/Etc e não saber onde começa e termina cada um.

Samuel Ramon
2

Legal essas dicas, outra coisa seria o estudo dos padroes de projetos e utilizacao de frameworks. Mais esta muito bom e com certeza vou pegar as dicas para nome de variaveis e funcao serem pegues do dominio do problema.
Vlw

Italo
3

Boas dicas! Aproveito para levantar uma questão referente aos **nomes** de uma classe. Vamos assumir que objetos da classe “TextFile” possuem a responsabilidade de ler e escrever dados em um arquivo de texto. Podemos perceber objetos “TextFile” como **mecanismos** para manipulação de arquivos de texto. Se pensarmos em encapsular uma particular **política** de uso desses objetos para gerar arquivos HTML em uma classe, que nome daríamos a ela? Dentre as possibilidades procedimentais (porquê?): “GeradorHTML”, “GeraçãoHTML”, etc. Dentre as possibilidades do tipo mecanismo (ruim?): “HTMLFile”, “TextoHTML”, etc. Quais possibilidades de nomeação da classe seriam sugeridas por um pensamento orientado a objetos? Seriam diferentes das anteriores?
Um grande abraço!

Adriano
4

Parabéns pelo post Marvin… Como você disse, na questão da compreensão do código e na manutenibilidade tanto para quem desenvolveu o código ou para outro desenvolvedor que irá mexer no código já escrito, é muito importante manter um código limpo. É importante também para a experiência do usuário, pois um código bem organizado evita vários bugs e caso aconteça de aparecer um, poderá ser resolvido rapidamente sem ter que deixar o usuário esperar muito tempo pela solução do problema. E levemos em consideração a primeira coisa que aprendemos quando começamos estudar programação: “Mantenha a coisa simples”.
Abraço.

Danilo Picucci
5

Gostei!
Apesar de não fazer tanto sentido para mim devido a minha ignorância sobre o assunto, elogio o texto que foi bem escrito e está bastante fácil de entender.
Parabéns cara.
Abraços

Fabio Serragnoli
6

Um bom indicador que você começou a escrever um código ruim eh o primeiro else-if. Nesse caso pare e procure uma outra solução (mais elegante) para o problema.
Abraços
@serragnoli

Andre Luiz Celedonio Rodrigues
7

Muito Bom artigo! Parabéns.
Outra dica que eu acho interessante e importante eh comentar o código inteiro, explicando o que cada parte do código faz. Isso ajuda muito o entendimento quando for necessário fazer alguma alteração no futuro, especialmente se tiver que ser feito por uma pessoa que não escreveu o código.
Um abraço.

Moisés Guimarães
8

Iniciativa bacana Marvin.
Código limpo é um dos meus tópicos favoritos. Lembrei de cara do Bob C Martin. Apenas achei o texto um pouco curto, mas isso pode ser uma deixa para continuações 😉
Recomendo a todos o livro citado pelo Marvin, tenho o meu sempre por perto e todo rabiscado! E para vocês deixo uma das primeiras dicas que recebi no início da carreira: Para escrever um bom código é preciso ler bons códigos.

Paulo Victor Martins
10

Bom artigo, basicamente esses são um dos principais fundamentos usados nas linguagens de programação.
Resumindo (TL; DR): Preocupe-se sempre em definir nomes convincentes para as funções e variáveis criadas, e fragmente seu código em funcionalidades (Dada função é responsável por apenas uma coisa).

TIago Luiz
11

Parabéns pela postagem Marvin. Atualmente a flexibilidade que algumas linguagens nos proporcionam, fazem com que acabemos ficando mal acostumados e nossos códigos ficam escritos de maneira suja e as vezes errado. Princípios como evitar converter uma variável string para lista e passar o valor para ela mesma, evitar usar vários try e catch um dentro do outro, são fundamentais para o bom uso da linguagem. Seu post expressa de forma correta e resumida tudo isso. Parabéns amigo.

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!