Bom, todo (ou quase todo) software que escrevemos possui código-fonte. Mas quando estamos escrevendo este código quem devem ser os "leitores" a quem o dirigimos? Costumo dizer que a resposta dada por um programador para esta pergunta (e o quanto ele aplica a resposta na prática) definem o nível de habilidade deste programador.
Os programadores mais iniciantes ou tacanhos pensam que se deve escrever para que o computador entenda e isto basta. Programadores avançados sabem que se precisa escrever para outros programadores lerem. O que passa desapercebido é que devemos ser claros na nossa escrita e, para isso, devemos ter um vocabulário rico.
Em programação, muitas vezes se pode escrever operações ou expressões diferentes que levam a um mesmo resultado. Usar estas diferenças para expressar melhor o que o programa faz e como o programador pensou na solução é o que eu chamo de ter um vocabulário rico. Aumentamos o nosso vocabulário de programação do mesmo jeito que o de português: estudando, lendo bons textos (no caso, lendo programas), escrevendo com cuidado e pedindo para pessoas experientes revisarem nossos "textos".
Em programação, muitas vezes se usa o termo "idioma" para se referir às peças de vocabulário. Em outros artigos, vou dar alguns exemplos de idiomas em C++, procurando mostrar diferentes idiomas cujos resultados são idênticos para o computador, mas que dizem coisas diferentes para quem lê o código.
Isto me lembra de uma discussão recorrente que tenho com programadores: Eu dizendo "Isto está errado." e o programador respondendo "Mas funciona, logo está certo". Nem tudo que funciona está certo, justamente porque o código pode estar fazendo a coisa certa, mas dizendo a coisa errada. Ou seja, está escrito para o computador, mas não para os leitores humanos.
Vamos a alguns exemplos:
int some16BitVal;
sint_16 some16BitVal;
Mesmo que sint_16 seja um define ou typedef para int, a linha de cima está errada. Quando se escreve int, se está dizendo: preciso de um inteiro que seja o mais eficiente possível nesta arquitetura, mas não me importa o seu tamanho. Se precisamos de tamanho definido, o correto é expressar isto com um tipo.
Outra bem comum: Aproveitar uma constante para dois usos só por que, coincidentemente elas têm o mesmo valor. Se você usa uma mesma constante (e.g. const int mySize=33;) em vários pontos do código, você está dizendo que obrigatoriamente e irrevogavelmente todos aqueles pontos estão ligados e que mudando num todos tem de ser mudados juntos, mantendo todos sempre o mesmo valor.
Os programadores mais iniciantes ou tacanhos pensam que se deve escrever para que o computador entenda e isto basta. Programadores avançados sabem que se precisa escrever para outros programadores lerem. O que passa desapercebido é que devemos ser claros na nossa escrita e, para isso, devemos ter um vocabulário rico.
Em programação, muitas vezes se pode escrever operações ou expressões diferentes que levam a um mesmo resultado. Usar estas diferenças para expressar melhor o que o programa faz e como o programador pensou na solução é o que eu chamo de ter um vocabulário rico. Aumentamos o nosso vocabulário de programação do mesmo jeito que o de português: estudando, lendo bons textos (no caso, lendo programas), escrevendo com cuidado e pedindo para pessoas experientes revisarem nossos "textos".
Em programação, muitas vezes se usa o termo "idioma" para se referir às peças de vocabulário. Em outros artigos, vou dar alguns exemplos de idiomas em C++, procurando mostrar diferentes idiomas cujos resultados são idênticos para o computador, mas que dizem coisas diferentes para quem lê o código.
Isto me lembra de uma discussão recorrente que tenho com programadores: Eu dizendo "Isto está errado." e o programador respondendo "Mas funciona, logo está certo". Nem tudo que funciona está certo, justamente porque o código pode estar fazendo a coisa certa, mas dizendo a coisa errada. Ou seja, está escrito para o computador, mas não para os leitores humanos.
Vamos a alguns exemplos:
Mesmo que sint_16 seja um define ou typedef para int, a linha de cima está errada. Quando se escreve int, se está dizendo: preciso de um inteiro que seja o mais eficiente possível nesta arquitetura, mas não me importa o seu tamanho. Se precisamos de tamanho definido, o correto é expressar isto com um tipo.
Outra bem comum: Aproveitar uma constante para dois usos só por que, coincidentemente elas têm o mesmo valor. Se você usa uma mesma constante (e.g. const int mySize=33;) em vários pontos do código, você está dizendo que obrigatoriamente e irrevogavelmente todos aqueles pontos estão ligados e que mudando num todos tem de ser mudados juntos, mantendo todos sempre o mesmo valor.
Uma coisa que me deixa p da vida é ver reaproveitamento de objetos onde nao cabe. Se tem um objeto que representa, digamos, um processo filho e este morre, mata o objeto tambem. Se precisar criar outro filho, cria outro objeto novinho e consistente. Nao reaproveita um "estado" em outro contexto.
ResponderExcluirConcordo contigo, Mateus. O pessoal às vezes ainda me argumenta que está reutilizando o objeto para "otimizar". Nestes casos, só consigo dar um suspiro, erguer os ombros, girar nos calcanhares e ir embora (ou, no caso de ser meu subordinado e ser algo acima de júnior, ir ao Departamento Pessoal solicitar a demissão).
ResponderExcluir