La question n'est pas vraiment de savoir si la méta-programmation est correcte ou non, mais plutôt de savoir s'il est correct d'être meilleur que les autres membres de l'équipe. Voici donc quelques points controversés sur la façon dont je le vois ...
J'ai récemment déménagé dans un nouvel emploi où je travaille dans une équipe plus grande et cette [méta-programmation] inquiète certains de mes collègues, car ils ne le comprennent pas.
Ils craignent que vous soyez mieux qu'eux. C'est bon. Vous allez être le nouvel expert. Vous venez de détruire leur monde de statu quo.
J'essaie toujours d'exploiter tout le potentiel de la langue, mais certains de mes collègues (pas tous) y voient un risque (certains se félicitent de l'approche).
Bien sûr, personne n'aime être aussi qualifié que quiconque et essaie donc de vous empêcher d'utiliser des techniques trop complexes pour eux. Ils ne peuvent pas le comprendre ou ne vont pas le faire, car ils se sentent en sécurité maintenant.
Je conviens que l'écriture de code que personne d'autre sur l'équipe ne peut comprendre est un problème.
Je ne. Je pense que cela montre votre expertise.
Ma question est la suivante: qui a raison, que dois-je faire?
Vous devriez utiliser toutes vos compétences pour écrire le meilleur code que vous puissiez écrire et ne pas regarder en arrière vers ceux qui ne le comprennent pas. Sinon, vous resterez coincé à leur niveau et ne serez qu'un codeur ordinaire. C'est une bonne chose d'être meilleur que les autres et s'efforcer d'être meilleur qu'eux. Vous ne gagnerez jamais de nouvelle expérience si vous n'essayez pas d'utiliser quelque chose de nouveau ou de faire les choses différemment.
Je sais que je vais avoir un vote négatif, mais voici à quoi ça ressemble. Ce n’est pas un crime d’être meilleur que les autres membres de l’équipe, ni d’utiliser ses compétences. C'est juste que tout le monde a peur de l'admettre ... parce qu'ils sont du côté des non-qualifiés et détestent le fait que le nouveau type puisse soudainement faire quelque chose qu'ils ne peuvent pas. S'ils étaient intelligents, ils vous demanderaient de l'aide et des conseils et ne critiqueraient pas votre code pour son incompréhensible.
MODIFIER
Il semble y avoir beaucoup de confusion sur cette question. Comme les commentaires le montrent, de nombreuses personnes pensent qu'il s'agit d'une lisibilité générale du code. Non ce n'est pas. Il s'agit de savoir si certaines fonctionnalités / constructions de langage doivent être interdites ou évitées car certains membres de l'équipe ne les comprennent pas.
Ma réponse est non . Ils ne devraient pas être interdits. Si vous voulez interdire quelque chose, comment feriez-vous cela? Vous devrez préparer une sorte de questionnaire pour savoir ce que les membres de votre équipe peuvent ou ne peuvent pas - ou plutôt ne veulent pas apprendre, car je pense que toutes les fonctionnalités de la langue sont utiles quelque part, il est donc toujours utile de les connaître et de les utiliser. Bien et plus vous en savez, meilleur est le code que vous pouvez écrire. Vous aurez également besoin d'une échelle pour définir les fonctionnalités débutantes, intermédiaires et avancées.
Pour montrer à quel point ces restrictions sont stupides, prenons un exemple très simple: vous allez être embauché en tant qu’ingénieur logiciel mais votre futur patron vous dit que vous ne serez pas autorisé à utiliser des do/while
boucles car il y a plusieurs l’équipe qui ne les a jamais utilisées auparavant et n’y va pas parce qu’elle a toujours utilisé des for
boucles pour tout, donc elle trouve les do/while
boucles confuses.
Maintenant, vous pensez que c'est stupide et fou, n'est-ce pas? Mais il en va de même pour d'autres fonctionnalités. Certains peuvent les utiliser et d'autres ne veulent pas les apprendre.
Pourquoi devriez-vous produire du code pire si vous savez qu'il y a quelque chose qui vous permet de faire la même chose avec beaucoup moins d'effort tout en ayant pour résultat un code beaucoup plus lisible et robuste?
Et peu importe que vous utilisiez uniquement des fonctionnalités langagières de base ou avancées, vous pouvez utiliser l’une ou l’autre pour produire un code tout aussi incompréhensible et non maintenable, c’est donc un sujet totalement différent.