Embora eu seja um pouco novo no conceito de programação alfabética (e, portanto, é provável que eu esteja perdendo totalmente o barco), parece muito alinhado com o conceito de DSL .
A idéia por trás de uma DSL é destilar um domínio de problemas em uma gramática simples, orientada para a linguagem natural, que pode ser usada para criar algoritmos para resolver esses problemas.
Para mim, essa mesma idéia, ou pelo menos a base principal dela, é a mesma ou pelo menos intimamente relacionada à programação alfabetizada.
No mundo do groovy, por exemplo, há um forte impulso para usar DSLs com mais regularidade e criar novos DSLs para resolver problemas comuns. Esse impulso vem das duas ferramentas da linguagem (easy builders), bem como das bibliotecas principais que oferecem suporte a uma API baseada em DSL.
Dado que a tendência, pelo menos naquele canto do mundo, é para a programação alfabetizada, eu diria que é uma boa metodologia para lutar.
Infelizmente, o nível de pensamento necessário para criar um bom dsl está além da maioria dos programadores, pelo que vi. Sei que luto pessoalmente com alguns dos conceitos necessários de tempos em tempos. Pode ser essa dificuldade que impediu que essas técnicas ganhassem uma adoção mais ampla.
É o seu caso clássico de quando usar a ferramenta é uma coisa, mas criá-la é em um nível totalmente diferente.
Para expandir um pouco o meu ponto de vista, não é muito o fato de DSLs serem a mesma coisa que programação alfabetizada, mas o fato de tornar a programação alfabética muito mais possível . Especialmente quando são DSLs de linguagem natural .
Na versão 1.8 do groovy, o recurso DSL em linguagem natural foi substancialmente aprimorado com a adição de cadeias de comando mais poderosas.
Por exemplo, as seguintes linhas de código estão programando , não apenas pseudo-sentenças:
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Nota: O exemplo de código vem do blog de Guillaume Laforge
A idéia central por trás da programação alfabetizada é que a linguagem natural é mais compreensível para os seres humanos e é isso que importa. Os recursos DSL de linguagem natural do Groovy tornam essa realidade muito mais próxima, na minha opinião. Especialmente quando essas DSLs são usadas para criar regras de negócios para um aplicativo.
Ser capaz de "codificar" os componentes críticos de um sistema usando linguagem natural é a própria essência da programação alfabetizada. Ter que intercalar a linguagem natural com pedaços de código é uma forma bastardizada de programação alfabetizada. Embora útil, acredito que as DSLs de linguagem natural que permitem usar a linguagem natural como o próprio código representam um grande salto em frente.
Expandir a capacidade de programação em geral é o próximo passo no processo, mas em grande parte as ferramentas para isso já estão em vigor. Sim, ainda não existe uma DSL "geral", mas para domínios menores, a capacidade existe.
Para mais exemplos disso em ação (em nenhuma ordem específica):