La questione non è in realtà se la metaprogrammazione sia OK o meno, ma piuttosto se sia OK essere migliore degli altri nel team quindi ecco alcuni punti controversi su come la vedo ...
I recently moved to a new job where I am working in a larger team and this [meta-programming] worries some of my colleagues, because they do not comprehend it.
Sono preoccupati che tu stia meglio di loro. Quello è buono. Sarai il nuovo esperto. Hai appena distrutto il loro mondo di status quo.
I always try to leverage the full potential of the language, but some (not all) of my colleagues perceive that as a risk (some welcome the approach).
Certo, a nessuno piace essere meno esperto di chiunque altro, quindi stanno cercando di impedirti di usare tecniche troppo complesse per loro. Non possono comprenderlo o non lo faranno, perché ora si sentono al sicuro.
I agree it is a problem to write code that nobody else on the team can comprehend.
Non lo so. Penso che stia mostrando la tua esperienza.
My question is, who is right, what should I do?
Dovresti usare tutte le tue abilità per scrivere il miglior codice che puoi scrivere e non guardare indietro a chi non lo capisce. Altrimenti rimarrai bloccato al loro livello e sarai solo un normale programmatore. È positivo essere migliori degli altri ed è una buona cosa sforzarsi di essere migliori di loro. Non acquisirai mai nuove esperienze se non proverai a usare qualcosa di nuovo o non farai le cose in modo diverso.
So che verrò downvoted, ma è così che sembra. Non è un crimine essere migliori degli altri nella squadra, e non è un crimine usare le tue abilità. È solo che tutti hanno paura di ammetterlo ... perché sono dal lato non esperto e odiano il fatto che il nuovo tipo possa improvvisamente fare qualcosa che non possono. Se fossero intelligenti, ti chiederebbero aiuto e consiglio e non criticheranno il tuo codice per essere incomprensibili.
Modifica
Sembra che ci sia molta confusione su questa domanda. Come mostrano i commenti, molte persone pensano che riguardi la leggibilità generale del codice. No non lo è. Riguarda se certe caratteristiche / costrutti linguistici dovrebbero essere vietati o evitati perché alcuni membri del team non li capiscono.
La mia risposta è no . Non dovrebbero essere vietati. Se vuoi proibire qualcosa, come faresti? Dovresti preparare una sorta di questionario per scoprire cosa possono o non possono fare i membri del tuo team, o piuttosto non vuoi imparare, perché penso che tutte le caratteristiche languide siano utili da qualche parte, quindi conoscerle e poterle usare è sempre buono e più conosci il codice migliore che puoi scrivere. Avresti anche bisogno di una scala per definire quali funzioni sono principianti, intermedie o avanzate.
Per dimostrare quanto siano sciocche tali restrizioni, facciamo un esempio molto semplice: sarai assunto come ingegnere del software ma il tuo futuro capo ti dirà che non ti sarà permesso usare do/while
loops perché lì ci sono un paio di persone nel team che non li hanno mai usati prima e inoltre non lo faranno perché hanno sempre utilizzato for
loops per tutto, quindi trovano do/while
loops confusion.
Ora pensi che sia stupido e pazzo, vero? Ma così è vietando altre funzionalità. Alcune persone possono usarle e altre non vogliono impararle.
Perché dovresti produrre codice peggiore se sai che c'è qualcosa che ti permette di fare lo stesso con molto meno sforzo e tuttavia ottenere un codice molto più leggibile?
E non importa se usi solo le funzioni linguistiche di base o quelle avanzate, puoi usare uno dei due per produrre un codice ugualmente incomprensibile e non gestibile, quindi questo è un argomento completamente diverso.