A questão não é realmente se a metaprogramação é boa ou não, mas sim se é melhor ser melhor que os outros membros da equipe, então aqui estão alguns pontos controversos sobre como eu a vejo ...
Recentemente, mudei para um novo emprego, onde estou trabalhando em uma equipe maior e isso [metaprogramação] preocupa alguns de meus colegas, porque eles não o compreendem.
Eles estão preocupados que você seja melhor que eles. Isso é bom. Você será o novo especialista. Você acabou de destruir o mundo do status quo deles.
Eu sempre tento aproveitar todo o potencial da linguagem, mas alguns (não todos) dos meus colegas percebem isso como um risco (alguns aceitam a abordagem).
Claro, ninguém gosta de ser menos habilidoso do que qualquer outra pessoa, então eles estão tentando impedi-lo de usar técnicas que são muito complexas para eles. Eles não podem compreendê-lo ou não vão, porque se sentem seguros agora.
Concordo que é um problema escrever código que ninguém mais na equipe possa compreender.
Eu não. Eu acho que está mostrando sua experiência.
Minha pergunta é: quem está certo, o que devo fazer?
Você deve usar todas as suas habilidades para escrever o melhor código possível e não olhar para trás para aqueles que não o entendem. Caso contrário, você ficará preso no nível deles e será apenas um codificador comum. É bom ser melhor que os outros, e é bom se esforçar para ser melhor que eles. Você nunca ganhará nenhuma nova experiência se não tentar usar algo novo ou fazer coisas diferentes.
Eu sei que vou ter voto negativo, mas é assim que parece. Não é crime ser melhor que os outros da equipe, e não é crime usar suas habilidades. Só que todo mundo tem medo de admitir ... porque eles são do lado não qualificado e odeiam que o novo cara possa fazer algo que de repente não pode. Se eles fossem espertos, pediam ajuda e conselhos e não criticavam seu código por ser incompreensível.
EDITAR
Parece haver muita confusão sobre essa questão. Como os comentários mostram, muitas pessoas pensam que é sobre legibilidade geral do código. Não, não é. É sobre se certos recursos / construções de idiomas devem ser proibidos ou evitados, porque alguns membros da equipe não os entendem.
Minha resposta é não . Eles não devem ser proibidos. Se você quer proibir algo, como faria isso? Você precisaria preparar algum tipo de questionário para descobrir o que os membros da sua equipe podem ou não - ou melhor, não querem aprender, pois acho que todos os recursos da languague são úteis em algum lugar, portanto, conhecê-los e poder usá-los é sempre bom e quanto mais você souber, melhor o código poderá escrever. Você também precisaria de uma escala para definir quais recursos são iniciantes, intermediários ou avançados.
Para demonstrar o quão tolas são essas restrições, vamos dar um exemplo muito simples: você será contratado como engenheiro de software, mas seu futuro chefe lhe dirá que não será permitido o uso de do/while
loops, porque existem algumas pessoas a equipe que nunca os usou antes e também não o faz, porque sempre usa for
loops para tudo, para que eles considerem do/while
confusos.
Agora você acha que isso é estúpido e louco, não é? Mas o mesmo está proibindo outros recursos. Alguns podem usá-los e outros não querem aprendê-los.
Por que você deveria produzir código pior se você sabe que existe algo que permite fazer o mesmo com muito menos esforço e ainda assim resultar em um código robusto e muito mais legível?
E não importa se você usa apenas recursos básicos de linguagem ou avançados, você pode usar qualquer um deles para produzir um código igualmente incompreensível e impossível de manter; portanto, este é um tópico totalmente diferente.