smells smell lazy guru feature envy data code bad refactoring coding-style copy-paste code-duplication

refactoring - lazy - feature envy code smell



¿Cómo convencer a un colega de que la duplicación de código es mala? (14)

Un colega mío estaba implementando una nueva característica en un proyecto en el que trabajamos juntos y lo hizo tomando un archivo que contiene la implementación de una característica similar del mismo proyecto, creando una copia del mismo cambiando el nombre de todas las declaraciones globales y modificando ligeramente la implementación. Así que terminamos con dos archivos grandes que son casi idénticos, aparte del cambio de nombre.

Traté de explicar que hace que nuestro proyecto sea más difícil de mantener, pero él no quiere cambiar nada diciendo que es más fácil para él programar de esa manera y que no hay razón para corregir el código si no es así. rompió".

¿Cómo puedo convencerlo de que tal duplicación de código es algo malo?

Está relacionado con estas preguntas , pero estoy más interesado en las respuestas dirigidas a una persona técnica (otro programador), por ejemplo, una referencia a una fuente autorizada como un libro sería genial. Ya he probado argumentos simples y no he tenido éxito.


Apelar a su jefe por razones técnicas. Si el jefe está de acuerdo con los métodos de su colega y / o no lo obliga a arreglarlo, entonces no hay mucho que pueda hacer si apelar a la razón no funciona.


Aquí hay dos opciones:

  1. Es una persona racional que simplemente no tiene demasiada experiencia . En este caso, posiblemente puede racionalizar su argumento, tal vez mostrándole un ejemplo más claro de la duplicación de código de alguien más en su código. También puede encontrar un error en la copia original (o incluso mejor, algunos errores), y decirle que ahora su código está roto y que debe solucionarlo.

  2. Es un asno obstinado : entonces no deberías desperdiciar energía en él. Ve con su jefe y deja que el jefe se encargue de ello. Algunas personas son asi.

Si bien la primera opción es obviamente mucho mejor, a veces no tienes otra opción. Y si usted será el que finalmente necesitará mantener su código a las 3 am de la mañana porque algún cliente importante comienza a gritar en el otro lado de la tierra, entonces definitivamente es su problema y su jefe debe manejarlo.

Y finalmente, si tu jefe piensa que estás equivocado, probablemente estés en el lugar equivocado.


Cuando desee café, hágale que beba un sorbo a la vez de la cafetera en lugar de una taza entera. Esto es especialmente efectivo si agrega crema y azúcar, que tendrán que ser eliminados en porciones minúsculas. Esto debería ilustrar cómo las tareas repetitivas son muy engorrosas y agotadoras (como corregir 20 piezas de código en lugar de una).

Luego, envíale un enlace a esta publicación para que pueda ver a todas las demás personas que tienen tu espalda.


Dale una copia de Refactorización .


Existen muchas razones válidas para no duplicar el código, pero solo pregunte ... ¿su equipo desea mantener 100K líneas de código (con duplicaciones de código), o 50K líneas de código? Puede parecer que la duplicación de código en este punto es mínima, por lo que su compañero de trabajo no ve la importancia del concepto DRY, pero imagine que duplica más y más código durante los próximos 5 años. ¿Quién va a mantener ese código? ¿Tu equipo? ¿Qué pasa si él / ella deja el trabajo un día? ¿Tu equipo quiere mantener esta mierda? :) Si no, entonces ya hizo un caso muy convincente para no duplicar el código, sin mencionar "más duplicaciones" = "más propenso a tener más errores en el futuro".


Mejore tanto su versión del código que se sienta frustrado por los celos, luego diga: si acabara de enlazar mi código ...


No se trata de hacer que tu amigo arregle esto ahora. Se trata de hacer crecer tu equipo.

Haz que se dé cuenta de que está siendo injusto con el equipo y el proyecto. Si aún no está de acuerdo con ello, tráele una taza de café y pídale que se siente tomando un sorbo, mientras que usted puede tomar su teclado y, de hecho, corregir el código que tiene delante.

Podría avergonzarse y no hacerlo la próxima vez (gran victoria). ¡Lo he usado 4 veces y siempre ha funcionado!

Buena suerte.


Porque cuando encuentras un error, necesitas cambiarlo en dos lugares. Porque cuando desea agregar una nueva característica, necesita agregarla en dos lugares.


Pregúntele qué hará cuando encuentre un error en su código. ¿En cuántos lugares necesitará arreglarlo ahora?

También puede mostrarle las respuestas a esta pregunta (¿Por qué es peligroso "copiar y pegar" del código?).


Primero, reconozca que tiene razón: copiar y pegar es más rápido ahora .

Luego, diga que el problema es el costo a largo plazo y que el costo aumentará porque con la duplicación, el sistema no está tan bien ordenado como podría estarlo. Está introduciendo el desorden, el desorden y cuanto más desorden tengas, más difícil es trabajar con un sistema. Aplicar algún esfuerzo ahora para organizarlo mejor (generalmente) dará sus frutos a largo plazo. Es como mantener tu escritorio o habitación organizada.

Esta es la idea de Ivar Jakobson sobre la entropía del software.


Probablemente está asumiendo que no está roto, y no lo estará. Además, lo perfecto es enemigo de lo bueno. No creo que ignore los peligros de copiar / pegar, solo tiene una evaluación diferente del potencial de error que usted.

Quizás puedas romperlo por él, para mostrar lo fácil que es. Si no puedes, tal vez tenga razón.


Si es superior (o supervisor) a usted, solicite más explicaciones; es posible que conozca más sobre el contexto ... tal vez no valga la pena refactorizar el código (tal vez sea un proyecto pequeño).

Si él es igual a usted, puede informar a su superior, proponiendo esta solución (que es mejor).

Si eres superior a él, simplemente "pídele" que haga tu camino ...


Su compañero de trabajo está optimizando su efectividad a corto plazo al sacrificar la efectividad a largo plazo de la organización (por ejemplo, el resto de sus compañeros de trabajo, así como a sí mismo). Cualquier cambio requerido en el primer archivo probablemente se requiera en el segundo, pero nadie lo recordará ... y eso causará 2 ciclos de búsqueda y reparación, en lugar de uno.

Puede ejecutar un detector de clones sobre el código y simplemente exhibir los resultados a su gerente.

Ver Wikipedia en el código duplicado para una lista.

Puede ver muestras de detección de clones para varios idiomas utilizando nuestro detector CloneDR . Está diseñado para encontrar grandes bloques de código de detección con renombrados consistentes y puede mostrar exactamente lo que sucedió.


Dígale que nunca sabe dónde puede ir una aplicación en un negocio ... Una aplicación de prueba simple a veces puede modificarse una y otra vez, y finalmente termina siendo usada mucho ... He visto esto a menudo en pequeñas empresas. Y luego, en lugar de comenzar de nuevo y perder el tiempo en cosas que podrían haberse solucionado antes, simplemente podría hacerlo ahora, corto y dulce, mientras que puede ser ...