Software Factories Workshop
Waldemir Cambiucci, Carlos Hulot e eu estamos trabalhando num workshop sobre aumento de produtividade na produção de software.
Vamos percorrer o caminho descrito no livro Software Factories para, em seguida, falar do Guidance Automation Toolkit e o DSL Toolkit. O Waldemir já está blogando sobre GAT.
Em poucas linhas, a idéia é encontrar na sua linha de produção de software um conjunto de artefatos intermediários ou finais, que você hoje faz à mão, para que sejam automatizados. Menos trabalho intensivo de mão de obra implica em menor tempo e custo – este é o racional.
Imagine você poder contar com linguagens formais visuais para especificar o que você quer ter num arquivo de configuração, ou como deve ser o código da lógica de negócio, ou da interface gráfica com o usuário, etc. Imagine agora que, a partir deste modelo você possa gerar artefatos como um schema do arquivo XML de configuração, um código C# ou Ruby (ou outro qualquer) que implemente as regras chamando o seu framework favorito.
Três truques aqui:
1. Este não é um pattern genérico para produção de software. Ele vale para produção de uma família de produtos, como acontece hoje com carros e geladeiras. Linguagens de especificação como o UML visam a generalidade, o que prejudica a sua eficiência na geração de código (quase sempre apenas o arcabouço de um conjunto de classes e interfaces). A variabilidade de um carro é grande, mas previsível. Softwares também têm famílias, como portais, software de billing, etc.;
2. As linguagens de especificação devem ser feitas por você ou terceiro, mas devem lidar com escopos pequenos, específicos para o que você vai fazer. Nada de misturar uma linguagem que trata do cálculo de impostos com outra de configuração ou interface gráfica. Estas são as DSL’s (Domain Specific Languages);
3. Para aumentar a produtividade dos nossos programadores, devemos ajudá-los com receitas e guias (help, como fazer, próximos passos) dentro do próprio contexto de produção. Imagine o seu ambiente “ensinando” os passos que seu programador deve seguir para definir um WebService;
Uma fábrica de software nada mais é que um processo de produção bem estabelecido para uma família de produtos (com alguma variabilidade) que são suportados por ferramentas específicas para esta linha.
O sucesso desta visão (que a Forrester chama de disruptive) depende que saibamos fazer linguagens (DSL’s), e que seja simples implementar os guias e estas dsl’s. O que vamos mostrar é que já estamos em um nível de complexidade que arquitetos já podem ousar.
Meu interesse maior está no design de linguagens. Entender e falar com um analista de negócio na língua dele é uma salvaguarda para muitos problemas decorrentes da incompreensão mútua.
Meu mantra: sejamos poliglotas.