El antipatrón " Reinventar la rueda " es bastante común: en lugar de usar una solución lista, escriba la suya desde cero. La base de código crece innecesariamente, las interfaces ligeramente diferentes que hacen lo mismo pero abundan de manera ligeramente diferente, se pierde tiempo para escribir (¡y depurar!) Funciones que están fácilmente disponibles. Todos lo sabemos.
Pero hay algo en el extremo opuesto del espectro. Cuando, en lugar de escribir su propia función que son dos líneas de código, importa un marco / API / biblioteca, lo instancia, configura, convierte el contexto al tipo de datos como lo acepta el marco, luego llama a esa única función que hace exactamente lo que necesita, dos líneas de lógica de negocios bajo un gigabyte de capas de abstracción. Y luego debe mantener la biblioteca actualizada, administrar las dependencias de compilación, mantener las licencias sincronizadas, y su código de instancia es diez veces más largo y más complejo que si simplemente "reinventara la rueda".
Las razones pueden ser variadas: la administración se opone estrictamente a la "reinvención de la rueda" sin importar el costo, alguien impulsando su tecnología preferida a pesar de la superposición marginal con los requisitos, una función cada vez menor de un módulo anteriormente importante del sistema, o la expectativa de expansión y mayor alcance uso del marco, que nunca llega, o simplemente malinterpreta el "peso" que un par de instrucciones de importación / inclusión / carga llevan "detrás de escena".
¿Existe un nombre común para este tipo de antipatrón?
(No estoy tratando de comenzar una discusión cuando está bien o mal, o si es una verdadera antipatrón o algo basado en una opinión , esta es una pregunta simple y directa de la nomenclatura objetiva).
Editar: el "duplicado" sugerido habla sobre la ingeniería excesiva del propio código para que esté "listo para todo", completamente aparte de los sistemas externos. En ciertos casos, esto podría deberse a ello, pero en general se origina en la "aversión a reinventar la rueda": la reutilización del código a toda costa; Si existe una solución "lista para usar " para nuestro problema, la usaremos, sin importar cuán mal se ajuste y a qué costo. Favoreciendo dogmáticamente la creación de nuevas dependencias sobre la duplicación de código, sin tener en cuenta los costos de integración y mantenimiento de estas dependencias en comparación con el costo de creación y mantenimiento del nuevo código.
Respuestas:
No. No existe un nombre antipatrón de uso común que cubra lo que está describiendo.
fuente
Martillo de oro
El martillo dorado es una herramienta elegida solo porque es elegante. No es rentable ni eficiente para realizar la tarea prevista.
fuente: xkcd 801
(A pesar de los votos negativos, mantengo esta respuesta. Puede que no sea exactamente lo contrario de reinventar la rueda semánticamente, pero se ajusta a todos los ejemplos mencionados en la pregunta)
fuente
Robert Martin usa el término " Framework Bound " para referirse a la consecuencia negativa más obvia de este antipatrón. Como no creo que haya un nombre común para el patrón en sí, una referencia a esta consecuencia podría ser suficiente para la mayoría de los propósitos.
fuente
Esta página de Wikipedia en " Inventado aquí " describe una situación ligeramente diferente pero con resultados finales muy similares. Describe la aversión de un equipo hacia la creación de su propio código cuando se puede encontrar una funcionalidad equivalente.
Sin embargo, diría que el nombre es un poco engañoso. Tiene sentido cuando se pone en contexto con su opuesto No inventado aquí, lo que en mi humilde opinión es prácticamente un sinónimo de reinventar la rueda.
fuente
He escuchado " Buy Versus Build " e " Invented Here " como nombres antipatrón para un sesgo en contra de desarrollar cosas internamente, incluso cuando tenga sentido hacerlo. (Y aunque se supone que la frase "comprar versus construir" indica una elección entre alternativas viables, creo que generalmente se menciona cuando alguien cree que "comprar" es la opción correcta).
fuente
AKA Overkill
fuente
La hinchazón es un término amplio, pero puede incluir lo que usted describe. Nuestro software se vuelve demasiado complejo (hinchado) debido a todas las transformaciones y abstracciones adicionales requeridas, y tanto la complejidad como las dependencias mismas contribuyen a un menor rendimiento / menos eficiencia y un mayor consumo de recursos (disco, ancho de banda).
Si lo deseamos, podríamos aclarar con un término como dependencias hinchadas .
fuente
Creo que usar un mazo para romper una nuez está bastante cerca. Es algo que es posible, pero necesita una cantidad excesiva de trabajo para romper una tuerca de esa manera, sin que ocurra ninguno de los numerosos efectos secundarios no deseados posibles. (Y hay una bolsa entera de nueces para romper ...)
La frase también tiene la ventaja de que no es jerga informática, por lo que puede ser muy útil para transmitir una pista a alguien que no tiene ninguna.
Por cierto, hay que hacer una distinción con el infierno de la dependencia . Si alguien ya ha incluido todas las complejidades dentro de una encapsulación que crea interfaces simples, claras y fáciles de usar, y siempre que la penalización en los ciclos de la CPU o el uso de la memoria no sea excesiva, y siempre que sea poco probable que se produzca una futura modificación del código encapsulado es necesario, entonces un argumento restante en contra de usarlo es el infierno de dependencia que podría estar causando.
fuente
No creo que haya un análogo exacto, pero diría que el diseño excesivo o la ingeniería excesiva se acercan más.
Al menos, diría que esto es lo que realmente estaba sucediendo cuando me encontré con algo similar a lo que usted describe.
Usar una biblioteca en lugar de escribir su propio código para implementar la misma funcionalidad casi nunca es dañino.
Incluso en su ejemplo hipotético, puede que no sea necesario usar una biblioteca para reemplazar "dos líneas de código", pero es poco probable que le cause mucho dolor, si realmente es una biblioteca destinada a hacer lo mismo que sus dos líneas de código .
Una biblioteca para hacer algo simple también será simple. No es probable que te dé los dolores de cabeza que implica tu pregunta.
Usar una biblioteca complicada para hacer algo simple probablemente implica que está tratando de hacer más que implementar la funcionalidad requerida.
Como construir características que no son necesarias, prepararse para un futuro que nunca llegará, etc.
El problema aquí no es realmente no reinventar la rueda per se .
fuente
Si no ha reinventado la rueda, lo más probable es que esté utilizando un juego de ruedas existente proporcionado por un proveedor o un tercero.
Si se trata de un antipatrón, generalmente se denomina bloqueo de proveedor.
fuente
¿Seguridad en el empleo?
Usted menciona todo el esfuerzo de mantener las cosas sincronizadas, etc. Algunas personas prefieren administrar el código de otras personas que escribir el suyo. Gerentes, especialmente.
fuente