Peepcode sponsors akitaonrails.com Locaweb sponsors akitaonrails.com

Pra variar, estou muito atarefado (ainda tenho um artigo que está no forno faz dias para eu terminar), mesmo assim achei este artigo interessante e – para variar – me deu vontade de traduzí-lo aqui. Tem uma discussão no site do TSS também. O Artigo original está na InfoQ, por Sadek Drobi, publicado agora há pouco. Lá vai:

No evento da TSS em Barcelona, Martin Fowler e Neal Ford deram uma palestra sobre programação orientada a linguagem, resumida aqui. Em seu artigo anterior, Fowler definiu esse conceito como ‘o estilo geral de desenvolvimento que opera sobre a idéia de construir software ao redor de um conjunto de linguagens específicas de domínio’. Fowler e Ford desenvolvem algumas idéias apresentadas por Fowler na JAOO 2006 e questionam a eventualidade de um “passo evolucionário além de programação orientada a objetos”.

Programação Orientada a Objetos dão um paradigma de modelagem útil baseado em hierarquia e abstrações em forma de árvore. A realidade, no entanto, nem sempre é hierárquica, enfatiza Neal Ford. Seus “galhos enroscados e interconexões” são difíceis de modelar com figuras idealizadas de árvores. E o resultado é o uso generalizado de Aspectos e XML que eventualmente adicionam complexidade destruindo o propósito inicial da abstração. Para remediar esse problema o nível de abstração deve ser atualizado e para isso, sugere Ford, usar linguagens em vez de hierarquias como mecanismos de modelagem.

De acordo com Martin Fowler modelagem de domínios orientados a objetos permitem “construir um vocabulário” mas a gramática – maneiras de combinar esse vocabulário – não está definido; DSLs adicionam esse lado de gramática. Portanto programação orientada a linguagens induzem “esta mudança de mover do pensamento sobre vocabulário, que são objetos, para a noção de uma linguagem que combina vocabulário e gramática”.

Para Neal Ford, o que torna torna o uso de DSLs como um novo mecanismo de abstração interessante é sua habilidade de dar contexto. Em um ambiente livre de contexto alguém precisa “iniciar no nível mais baixo possível do entendimento e ter que explicar cada detalhe”. Essa é maneira que falamos com APIs e frameworks porque eles não tem “nenhum tipo de contexto embutido” neles. Logo o código é cheio de contextos repetidos normalmente percebidos como ‘barulho’. DSLs, ao contrário, “sempre tem um contexto implícito que mostram ou nada, ou de uma maneira muito, muito leve ou normalmente apenas uma vez no máximo.” Esse contexto não precisar se dado repetidamente, o que torna o código mais legível e mais expressivo.

Tanto Fowler quanto Ford estressam quão crítico a legibilidade é. Eles insistem que o propósito das DSLs é normalmente mal-entendido. Não é para tornar possível que analistas de negócios escrevam código, mas para tornar possível a eles ler e revisar, de forma a diminuir a distância separando desenvolvedores e pessoal de negócios.

Alguns são relutantes em usar o estilo de programação orientada a linguagens por causa de possíveis problemas de manutenção e aumento considerável da curva de aprendizagem, especialmente dada a falta de IDEs ricas para o DSL puro-texto. Fowler, que argumentou em seu artigo recenete que frameworks maiores [...] apresentam tanto desafio para aprender quanto uma linguagem, enfatiza novamente a complexidade de projetos escritos em uma única linguagem. Mais do que isso, Neal Ford estressa que se uma DSL é difícil de ler então ela foi muito pobremente desenhada porque “um dos objetivos [de usar uma DSL é] criar código mais legível”.

Sobre suporte de IDEs de hoje pelo menos três grandes fornecedores oferecem suporte a esse tipo de programação orientada a linguagens: Intentional Software desenvolvido por Charles Simonyi, Software Factory da Microsoft, Meta Programming System desenvolvido pela JetBrains. Essas ferramentas, referidas como Workbenches de Linguagens por Martin Fowler, tornam mais fácil desenhar e então usar DSLs. Isso aumenta a vantagem competitiva do estilo de programação orientada a linguagem mesmo que Fowler acredite que isso “vai levar alguns anos para que a maioria das pessoas possam pensar em usar [Workbench de Linguagens] para projetos reais”.

Qual sua opinião? Programação Orientada a Linguagens tem alguma chance de se tornar a “próxima grande coisa”? E até que ponto a disponibilidade de ferramentas workbenches de linguagens poderiam afetar sua decisão em usar DSLs em seus projetos?

3 Comments

Qual a melhor maneira de aumentar a expressividade se não for através de redigibilidade?

Ano passado brincava no javafree.org sobre usar elementos de um texto de Use Case para esboçar uma linguagem comum. De fato, é altamente válido aproximarmos maneiras diferentes de se expressar sobre um mesmo problema, comunicar-se e estebelecer uma linguagem comum parece mesmo uma necessidade a ser concretizada no futuro.

T+

De qualquer forma, deixar mais o codigo mais proximo à analistas de negocios é valido. Estamos aqui debatendo olhando o lado de quem? Aproximar a programacao da linguagem natural visa os dois lados (leigo e programadores), IMHO.

Analisando a produção de algoritmos por entidades humanas observo que DSL é um fator preponderante na materialização do pensamento. A organização simbólica de aspecto lingüístico dá ao desenvolvedor liberdade e poder. Já utilizando uma ótica cognitiva a abstração de elementos do mundo real reflete diretamente no desenvolvimento do código em si, então, começo:

“como criar uma interface homem-máquina inteligível em nível tão alto que basta escrever da maneira que penso e o computador faz?”

Observe que isso já é complicado.

A via mais utilizada hoje é “computador faça isso… assim deste jeito”.

Fico viajando em um universos onde o pensamento padronizado seja interpretado pela máquina. Um paradigma mais contemporâneo.

Como fazer as pessoas pensarem igualmente? Imagine uma flor… quantas pétalas ela tem? Pra mim x pra vc x+2. Como seria o padrão de detecção do pensamento pelo software? Usando duck typing…

O software diz: “tem pétalas, acho que é uma flor” mas qual? pra que? onde vc vai ser usada?

Tá, então quando eu falar pense em um flor, todo mundo imagina a mesma flor, para isso teriamos que saber da “flor como entidade comum” a mesma imagem mental.

Então vamos inserir fatos(programação lógica) em uma DSL o que teriamos? “Uma escrita gramaticamente interpretável, mais uma abstração do mundo real utilizando objetos e com dedução por fatos pre-conhecidos.?” É a mesma via mas a decisão é feita pelo computador expressado por “Computador faça isso… mas do jeito que você conhece”

Tenho uma cadela chamada Rubi, ela tem um algoritimo :), chego em casa, ela entra no carro, depois sai do carro, me espera no quarto, tiro meu tênis ela puxa minha meia e sai correndo.

Onde quero chegar com isso…

simples… apenas um teste com um titiu… vou fazer um “Segmentation Fault” na cadela. Cheguei do memo jeito mas descalço… o que aconteceu?!? ela ficou olhando para meu pé, com um pensamento ‘mineirogoiano’ “Uai! cadê a coisa de pano?” parada um minuto(coisa difícil para um basset)

Onde quero chegar com isso 2?

Eu apenas “gostaria” que estudássemos “se há pensamento padrão”, tipo um padrão elétrico nos neurônios …’acende no lobulo frontal 3 vezes em 0,00001 milesegundos’ – -dedução: “sem meia branca”.

Desculpe… só umas viagens aqui…

Mas o padrão existe temos que detectar e organizar os símbolos.

Leave a Comment