La pregunta no es realmente si la meta-programació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 ...
Hace poco me mudé a un nuevo trabajo en el que trabajo en un equipo más grande y esta [meta-programación] preocupa a algunos de mis colegas, porque no lo comprenden.
Están preocupados de que estés mejor que ellos. Eso es bueno. Vas a ser el nuevo experto. Acabas de destruir su mundo de statu quo.
Siempre trato de aprovechar todo el potencial del lenguaje, pero algunos (no todos) de mis colegas lo perciben como un riesgo (algunos aceptan el enfoque).
Claro, a nadie le gusta ser menos hábil que nadie, así que están tratando de evitar que uses técnicas que son demasiado complejas para ellos. O bien no pueden comprenderlo o no lo van a hacer porque se sienten seguros ahora.
Estoy de acuerdo en que es un problema escribir un código que nadie más en el equipo puede comprender.
Yo no. Creo que está mostrando su experiencia.
Mi pregunta es quién tiene razón, ¿qué debo hacer?
Debes usar todas tus habilidades para escribir el mejor código que puedas escribir y no mirar atrás a aquellos que no lo entienden. De lo contrario, te quedarás atascado en su nivel y serás solo un programador ordinario. Es bueno ser mejor que los demás, y es bueno esforzarse por ser mejor que ellos. Nunca obtendrás una nueva experiencia si no intentas usar nada nuevo o hacer las cosas de manera diferente.
Sé que voy a ser votado, 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 capacitado y odian que el nuevo chico de repente pueda hacer algo que no pueden. Si fueran inteligentes, te pedirían ayuda y consejo, y no criticarían tu código por ser incomprensible.
EDIT
Parece que hay mucha confusión sobre esta pregunta. Como muestran los comentarios, muchas personas piensan que se trata de la legibilidad del código general. 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 deben ser prohibidos. Si quieres prohibir algo, ¿cómo harías eso? Tendría que preparar algún tipo de cuestionario para averiguar lo que los miembros de su equipo pueden y no pueden, o más bien no quieren aprender, ya que creo que todas las características de Languague son útiles en algún lugar, por lo que conocerlas y poder usarlas es siempre Bien y cuanto más sepa, mejor código puede escribir. También necesitaría una escala para definir qué funciones son principiantes, intermedias o avanzadas.
Para demostrar cuán tontas son estas restricciones, tomemos un ejemplo realmente simple: usted será contratado como ingeniero de software, pero su futuro jefe le dice que no se le permitirá usar do/while
loops porque hay un par de personas en el equipo que nunca las han usado antes y tampoco van a hacerlo porque siempre han estado usando for
loops para todo, por lo que encuentran confusa a do/while
loops.
Ahora crees que esto es estúpido y loco, ¿verdad? Pero también lo es prohibir 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, a la vez, dar como resultado un código más robusto y legible?
Y no importa si usa solo las funciones básicas del lenguaje o las 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.