La pregunta no es realmente si la metaprogramación está bien o no, sino más bien si está bien ser mejor que los demás en el equipo, así que aquí hay algunos puntos controvertidos sobre cómo lo veo ...
Recientemente me mudé a un nuevo trabajo donde estoy trabajando en un equipo más grande y esto [metaprogramación] preocupa a algunos de mis colegas, porque no lo comprenden.
Les preocupa que seas mejor que ellos. Eso es bueno. Serás el nuevo experto. Acabas de destruir su mundo de status quo.
Siempre trato de aprovechar todo el potencial del lenguaje, pero algunos (no todos) de mis colegas lo perciben como un riesgo (algunos agradecen el enfoque).
Claro, a nadie le gusta ser menos hábil que cualquier otra persona, por lo que están tratando de evitar que uses técnicas que son demasiado complejas para ellos. O no pueden comprenderlo o no lo harán, porque ahora se sienten seguros.
Estoy de acuerdo en que es un problema escribir código que nadie más en el equipo pueda comprender.
Yo no. Creo que está mostrando tu experiencia.
Mi pregunta es, ¿quién tiene razón, qué debo hacer?
Debe usar todas sus habilidades para escribir el mejor código que pueda escribir y no mirar hacia atrás a aquellos que no lo entienden. De lo contrario, te quedarás atascado en su nivel y serás un simple codificador. Es bueno ser mejor que otros, y es bueno esforzarse por ser mejor que ellos. Nunca obtendrás ninguna experiencia nueva si no intentas usar algo nuevo o hacer las cosas de manera diferente.
Sé que voy a ser rechazado, pero así es como se ve. No es un crimen ser mejor que otros en el equipo, y no es un crimen usar tus habilidades. Es solo que todos tienen miedo de admitirlo ... porque están en el lado no calificado y odian que el nuevo chico de repente pueda hacer algo que no puede. Si fueran inteligentes, le pedirían ayuda y consejos y no criticarían su código por ser incomprensible.
EDITAR
Parece haber mucha confusión sobre esta pregunta. Como muestran los comentarios, muchas personas piensan que se trata de la legibilidad general del código. No, no es. Se trata de si ciertas características / construcciones del lenguaje deben prohibirse o evitarse porque algunos miembros del equipo no las entienden.
Mi respuesta es no . No deberían estar prohibidos. Si quieres prohibir algo, ¿cómo lo harías? Tendría que preparar algún tipo de cuestionario para averiguar qué pueden y qué no pueden aprender los miembros de su equipo, o más bien no quieren aprender, ya que creo que todas las características del lenguaje son útiles en algún lugar, por lo que conocerlas y poder usarlas siempre es bueno y cuanto más sepa, mejor código podrá escribir. También necesitaría una escala para definir qué características son principiantes, intermedias o avanzadas.
Para demostrar cuán tontas son tales restricciones, tomemos un ejemplo realmente simple: va a ser contratado como ingeniero de software pero su futuro jefe le dice que no se le permitirá usar do/while
bucles porque hay un par de personas en el equipo que nunca los ha usado antes y que tampoco lo harán porque siempre han estado usando for
bucles para todo, por lo que los encuentran do/while
confusos.
Ahora crees que esto es estúpido y loco, ¿no? Pero también está prohibiendo otras características. Algunas personas pueden usarlas y otras no quieren aprenderlas.
¿Por qué debería producir un código peor si sabe que hay algo que le permite hacer lo mismo con mucho menos esfuerzo y, sin embargo, resulta en un código robusto mucho más legible?
Y no importa si usa solo funciones de lenguaje básicas o avanzadas, puede usar cualquiera de las dos para producir un código igualmente incomprensible e imposible de mantener, por lo que este es un tema completamente diferente.