La domanda non è davvero se la meta-programmazione sia OK o meno, ma piuttosto se sia OK essere migliore degli altri nel team, quindi ecco alcuni punti controversi su come la vedo ...
Di recente mi sono trasferito in un nuovo lavoro dove lavoro in un team più ampio e questa [meta-programmazione] preoccupa alcuni dei miei colleghi, perché non lo comprendono.
Sono preoccupati che tu sia migliore di loro. Quello è buono. Sarai il nuovo esperto. Hai appena distrutto il loro mondo status quo.
Cerco sempre di sfruttare tutto il potenziale della lingua, ma alcuni (non tutti) dei miei colleghi lo percepiscono come un rischio (alcuni apprezzano l'approccio).
Certo, a nessuno piace essere meno abile di chiunque altro, quindi stanno cercando di impedirti di usare tecniche troppo complesse per loro. O non possono comprenderlo o non lo faranno, perché ora si sentono sicuri.
Sono d'accordo che è un problema scrivere codice che nessun altro membro del team può comprendere.
Io non. Penso che stia mostrando la tua esperienza.
La mia domanda è: chi ha ragione, cosa devo fare?
Dovresti usare tutte le tue abilità per scrivere il miglior codice che puoi scrivere e non guardare dietro a chi non lo capisce. Altrimenti rimarrai bloccato al loro livello e sarai solo un normale programmatore. È una buona cosa essere migliori degli altri, ed è una buona cosa cercare di essere migliori di loro. Non otterrai mai nuove esperienze se non provi a usare qualcosa di nuovo o fare cose in modo diverso.
So che sarò sottoposto a downgrade, ma è così. Non è un crimine essere migliore degli altri nella squadra, e non è un crimine usare le tue abilità. È solo che tutti hanno paura di ammetterlo ... perché sono dalla parte non qualificata e odiano il fatto che il nuovo ragazzo improvvisamente possa fare qualcosa che non può. Se fossero intelligenti, ti chiederebbero aiuto e consigli e non criticano il tuo codice per essere incomprensibile.
MODIFICARE
Sembra esserci molta confusione su questa domanda. Come mostrano i commenti, molte persone pensano che si tratti della leggibilità del codice generale. No non lo è. Si tratta di vietare o evitare determinate caratteristiche / costrutti del linguaggio perché alcuni membri del team non li comprendono.
La mia risposta è no . Non dovrebbero essere vietati. Se vuoi vietare qualcosa come lo faresti? Dovresti preparare una sorta di questionario per scoprire cosa possono e non possono fare i membri del tuo team - o piuttosto non vogliono imparare come penso che tutte le funzionalità di languague siano utili da qualche parte, quindi conoscerle ed essere in grado di usarle è 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: verrai assunto come ingegnere del software, ma il tuo futuro capo ti dirà che non ti sarà permesso di usare i do/while
loop perché ci sono un paio di persone su la squadra che non li ha mai usati prima e che non lo faranno perché usano sempre i for
loop per tutto, quindi trovano do/while
loop confusi.
Ora pensi che sia stupido e folle, vero? Ma così è vietare altre funzionalità. Alcuni possono usarli e altri non vogliono impararli.
Perché dovresti produrre codice peggiore se sai che esiste qualcosa che ti consente di fare lo stesso con molto meno sforzo e che tuttavia risulta in un codice robusto molto più leggibile?
E non importa se usi solo funzionalità di linguaggio di base o avanzate, puoi usare uno di essi per produrre un codice altrettanto incomprensibile e non realizzabile, quindi questo è un argomento completamente diverso.