Mitos sobre geração de código

Bruno Braga on December 24th, 2009

Segue abaixo um artigo que escrevi no site do projeto SPIDER on Rails:

O termo “mito” é, por vezes, utilizado de forma pejorativa para se referir às crenças comuns.
E existe uma cresca comum que geração de código é algo ruim em projetos.

Encarnando os MythBusters vamos tentar analisar objetivamente se esse mito é válido.

A geração de código é a capacidade de gerar artefatos a partir de diagramas, templates ou até comandos.

Um fato constatável é que alguns desenvolvedores são um pouco resistentes ao termo “Geração de Código”.
As principais reclamações são:

  • O código gerado não respeita nenhuma regra de arquitetura, é simplesmente “um monte de código” de má qualidade;
  • Não é possível manter o código gerado porque ele não segue nenhum padrão e é difícil de entender, sempre é necessário regerar o código em caso de mudanças;
  • Após gerar o código a minha aplicação fica sempre depedente da ferramenta de geração, sem ela o projeto não pode ser alterado;

Dada à diversidade de ferramentas dessa área, estes pontos parecem estar corretos. É fácil encontrar esses tipos de problemas e limitações.
Indo mais além, muitos de nós já se deparou com projetos que prometiam criar um sistema por completo usando geração de código (ferramentas CASE), porém sabemos que isso não é a realidade. Não podemos substituir as pessoas, os programadores, criar regras de negócios automaticamente, prever e implementar soluções para todos os cenários somente gerando código. O computador não possui autonomia para sozinho atender aos nossos clientes exigentes =)… Muito menos foi projetado para tomar todas as decisões no lugar das pessoas.

Então o mito tem fundamento? Geração de código é realmente algo ruim? Vai gerar código que não preciso e atrapalhar o meu projeto?

Essas questões são interessantes, e para buscar uma resposta precisamos isolar os problemas e conceitos, entender o que de fato é geração de código e de onde vem todo o problema.

Ferramentas CASE e similares

Essas ferramentas criadas na década de 90 são responsáveis por boa parte das promessas de “mágica” utilizando geração de código através de modelos. Muitas dessas ferramentas prometiam criar sistema inteiros sem programar nenhuma linha de código. Foi uma estratégia que nunca deu certo e essas falsas promessas surgiram de algumas empresas e das ferramentas e não do conceito de geração de código que é utilizado até hoje (mesmo sem percebermos) em quase todos os softwares que desenvolvemos.

Geração de código

Neste tópico o objetivo é descobrir porque praticamente todo projeto usa geração de código e o que de fato é isso.

Alguns exemplos comuns a todos os projetos:

  • Um wizard da IDE para criar novos projetos é um gerador de código. A partir de dados informados pelo usuário, a ferramenta vai gerar artefatos (arquivos) que inicializem um novo projeto.
  • Por mais estranho que possa parecer, a compilação de código fonte em arquivos binários é geração de código. A partir de comandos de uma linguagem de alto nível são gerados artefatos de outra linguagem de máquina (baixo nível).

Esses exemplos podem parecer polêmicos para alguns pontos de vista, mas a verdade é que não existe uma definição precisa sobre o conceito de geração de código. Existem opiniões e interpretações diferentes que nos levar a ter um certeza – geração de código é algo muito mais amplo do que conhecemos na maioria das ferramentas e é utilizado com muito mais frequencia do que imaginamos.

Vejamos por exemplo o que diz a Wikipedia:
“Gerador de Código é aquela ferramenta que possui a capacidade de gerar código a partir de um determinado modelo de software. Inclusive, de acordo com alguns pontos de vista e a partir das características específicas do tipo de Gerador de Código, ele passa a ser conversor de códigos de linguagens distintas. Isso acontece, por exemplo, com o compilador, que transforma um código escrito através de uma linguagem de programação para código de máquina ou código objeto.”

Já Kathleen Dollard em 2004 no livro Code Generation in Microsoft .NET, foi mais genérica ainda ao definir: “Geração de código é o código que gera código”. Em 2003, Jack Herrington no livro Code Generation in Action preferiu dividir a geração de código entre passiva e ativa. Onde os wizards seriam um exemplo de geração passiva, pois não mantém responsabilidade com o código gerado – qualquer alteração depois da geração é realizada pelo desenvolvedor manualmente, e o tipo ativo que segundo ele mantém a responsabilidade – um código poderia ser gerado em ciclos e quando precisasse de alterações o desenvolvedor recorreria novamente a ferramenta de geração, forneceria novos dados e seria gerado o código de novo.

Aqui não vamos dividir a geração de código em tipos, até porque seguindo ao pé da letra as definições de Herrington, o projeto SPIDER on Rails não faz geração de código 100% ativa nem passiva, ele é orientado as necessidades do desenvolvedor, podendo se comportar das duas formas no mesmo projeto inclusive. O que temos que ter em mente é que se havia alguma dúvida, agora é fato: a Geração de Código faz parte do dia a dia dos desenvolvedores e todos a utilizam, mesmo sem perceber. Ela é extremamente importante para evitar tarefas repetitivas ou trabalhosas, já que muitas podem ser automatizadas de alguma forma para ganhar produtividade. Só devemos lembrar que em nenhum momento a geração de código tem como objetivo fazer tudo sozinha.

Conclusão

Voltando a pergunta: “Geração de código é realmente algo ruim? Vai gerar código que não preciso e atrapalhar o meu projeto?”

A resposta é não! Geração de código não é ruim, não vai atrapalhar o seu projeto e nem tem o objetivo de criar código totalmente pronto.

Existem algumas características que devem que existir para que a geração de código seja algo útil, entre elas:

  • Suporte a templates para alterar o comportamento da ferramenta;
  • Seja fácil de utilizar;
  • O projeto tem que continuar sem depender da ferramenta de geração de código;
  • Ao gerar o código novamente a ferramenta não pode apagar as customizações do desenvolvedor;
  • Não tentar fazer o projeto todo gerando código, as pessoas são importantes e elas devem tomar as maiores decisões. A ferramenta é apenas um suporte para melhorar a produtividades em alguns pontos;

São esses e outros pontos que valorizamos no projeto SPIDER on Rails.

fonte: http://www.spideronrails.org/cnf/pages/viewpage.action?pageId=5111911

Subscribe to this blog's RSS feed

Twitter ativado

Bruno Braga on December 7th, 2009

Eu já havia criado a algum tempo mas resisti um pouco para postar no Twitter devido a correria e falta de tempo. Mas agora com um HTC Hero (android OS) ficou mais fácil e posso fazer atualizações de qualquer lugar.

Segue o link:

http://www.twitter.com/bgbraga

Algumas pessoas as vezes me perguntam sobre o projeto J2EE Spider (ainda existe?) então vou tentar postar algumas novidades rápidas sobre ele e outras coisas de tecnologia.