O que você acha sobre o assunto?
A metaprogramação é mais comumente associada a linguagens não-dinâmicas, uma vez que é mais difícil atingir certos comportamentos (como implementar um ORM) sem muitas linhas de código não produtivas e não-inteligentes.
Mas, mesmo em linguagens mais dinâmicas, como o PHP, a geração de código pode realmente salvar vidas e aumentar a produtividade em grande quantidade. Em estruturas modernas, é muito comum ter um scaffold que gere a maior parte do modelo, forma, teste e ações comuns para um determinado objeto de negócio que você declara. É uma das razões pelas quais frameworks como o symfony ou o RoR têm tanto sucesso, essas ferramentas de geração de código fazem código consistente muito rapidamente e aumentam a produtividade dos programadores.
Nos sites, a maior parte da interação gira em torno de quatro ações principais:
- Crie um elemento
- Recuperar um conjunto de elementos (com possível filtragem)
- Atualize um elemento com novos atributos
- Excluir um conjunto de elementos
Pelo menos tudo o que gira em torno dessas 4 ações principais poderia e IMHO DEVE ser alcançado usando ferramentas de geração de código para alcançar a máxima produtividade.
Na minha empresa, usamos o symfony, e seu admin-generator é uma ferramenta excepcional, que gera código em tempo de execução (e armazena em cache), o que significa que nem precisamos usar qualquer tipo de tarefa ou ferramenta externa para gerar novo código, só precisamos limpar nosso cache. Eu recomendo vivamente a utilização deste tipo de ferramenta para operações CRUD.
Mas, fazer o que os contribuidores incríveis do symfony fizeram, não é uma tarefa fácil. Já implementei algumas tarefas de geração de código e fazer algo que seja realmente consistente e com uma implementação ampla para cobrir a maioria dos casos-chave não é fácil.
É algo que realmente aumentará sua produtividade?
Eu acredito que a metaprogramação é muito importante em níveis mais baixos de trabalho (frameworks, caching, compiladores, etc.), mas algo que devemos abordar com extrema cautela se estamos fazendo coisas na camada de negócios.
Usar a geração de código é, sem dúvida, um grande impulsionador da produtividade. Implementando suas próprias ferramentas de geração de código, não muito, a menos que você esteja construindo uma estrutura por conta própria.
Quais são alguns bons recursos sobre o assunto, entre livros, blogs, apresentações de slides, etc.
O melhor recurso para entender a programação é sempre um código-fonte bom e bem comentado. Eu diria que olhando para RubyOnRails e Geradores de administração do symfony é uma boa idéia.