Refogado e DSLs

Um modelo é uma representação ou descrição feita para mostrar os principais aspectos de um sistema ou conceitos. Isto é, ele não visa necessariamente representar a realidade como ela é em todos seus detalhes. Um modelo pode abstrair aspectos da realidade para poder informar apenas o que é relevante em um contexto ou ponto de vista.

Vou dar um exemplo clássico. Fui à Londres nas minhas férias. Lá pude andar de metrô todos os dias (menos Natal, quando tudo pára), e usava um mapa simples. O mapa indicava as linhas com cores, as estações e as estações onde é possível mudar de linhas sem sair do metrô. Além disto, ele indicava em que região ficava uma estação – o que é importante, pois o custo da passagem é definido pelo número de regiões que você vai percorrer.

O que é interessante: ele não contém informações sobre distância, horários, tipo de trem, números de escadas rolantes, etc. Ele tem o detalhe suficiente para que eu possa definir que linha tomar, quanto custa, onde mudar de linha e quando parar.

Lembro-me de Borges, o escritor argentino, imaginar um mapa tão perfeito que teria a dimensão da região que mapeava, representando cada grão do chão. Por seu tamanho e nível de detalhes ele se tornaria inútil.

O mapa do metrô é uma linguagem para um domínio específica (DSL). Um leigo e mesmo uma criança podem lê-lo para tomar decisões.

Na nossa cultura estamos rodeados destas linguagens. Bancários falam de empréstimos e outros tipos de produtos, seguradoras falam sinistros e prêmios e nós falamos de façades e outros patterns.

Lembro-me bem de quando comprei meu primeiro livro para cozinhar ainda no meu primeiro apartamento. Descobri de imediato uma DSL culinária, pois a receita de arroz dizia “prepare um refogado”. Bem, como não sabia fazer um refogado e o livro não esperava tamanha ignorância, tive que recorrer à minha mãe (uma especialista no domínio).

Uma DSL ideal, no mundo da produção de software, deve ter termos análogos ao “refogado” da culinária. O refogado tem uma receita simples – azeite, cebola e alho na frigideira – capaz de gerar código automático que chame a sub-rotina fazerRefogado() ou gere o seu algoritmo inteiro. Com isto podemos usar um modelo abstrato e gerar algo concreto.

Que outras DSL’s você percebe no seu dia a dia de produção de software? Aqui fica a minha sugestão de exercício.

O prêmio poderá ser menos trabalho e mais qualidade.