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


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 contenía la implementación de una característica similar del mismo proyecto, creando una copia del mismo renombrando todas las declaraciones globales y modificando ligeramente la implementación. Así que terminamos con dos archivos grandes que son casi idénticos aparte de renombrar.

Traté de explicar que hace que nuestro proyecto sea más difícil de mantener, pero él no quiere cambiar cualquier cosa que diga que es más fácil para él programar de tal manera y que no hay razón para arreglar el código si "no está roto".

¿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 éxito.

Author: Community, 2010-11-19

14 answers

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

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

 23
Author: Oded,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:33:57

Cuando desee café, hágale tomar 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 repartidas 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 otras personas que te respaldan.

 11
Author: Brad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:12:24

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 duplicación de código a otra persona en su código. También puede encontrar un error en la copia original (o incluso mejor, algunos errores), y decirle ahora que su código ESTÁ roto y debe solucionarlo.

  2. Es un culo terco: Entonces no debes desperdiciar energía en él. Ve con su jefe y deja que el jefe se encargue. Algunas personas son así.

Mientras que la primera opción es obviamente mucho mejor, a veces no tienes opción. Y si usted será el que eventualmente tendrá que mantener su código a las 3 AM de la mañana porque algún cliente importante comienza a gritar al 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.

 10
Author: Eldad Mor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:17:30

Dale una copia de Refactorización.

 8
Author: Etienne de Martel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:10:53

Mejorar su versión del código tanto que se siente frustrado por los celos, a continuación, decir - si usted acaba de vincular a mi código...

 5
Author: Alex Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:11:38

Su compañero de trabajo está optimizando su efectividad a corto plazo sacrificando el tiempo eficacia del término de la organización (e. g., el resto de sus compañeros de trabajo también como él mismo). Cualquier cambio requerido en el primer archivo es probable que se requieran en el segundo, pero nadie lo recordará... y eso causará 2 ciclos de buscar y arreglar, en lugar de uno.

Podría ejecutar un detector de clones sobre el código y simplemente mostrar los resultados a su manager.

Ver Wikipedia en duplicar código para una lista.

Puede ver muestras de detección de clones para varios idiomas usando nuestro detector CloneDR. Está diseñado para encontrar un detectar grandes bloques de código con renombres consistentes y se puede muestra exactamente lo que pasó.

 3
Author: Ira Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-22 17:04:58

Porque cuando encuentre un error, debe cambiarlo en dos lugares. Porque cuando desea agregar una nueva función, debe agregarla en dos lugares.

 3
Author: khachik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-01 03:44:50

Apela a tu jefe por motivos técnicos. Si el jefe está de acuerdo con los métodos de tu colega/y/o no le hace arreglarlo, entonces no hay mucho que puedas hacer si apelar a la razón no funciona.

 2
Author: Caladain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:11:02

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

Haz que se dé cuenta de que está siendo injusto con el equipo y el proyecto. Si todavía no está de acuerdo, consíguele una taza de café y pídale que se siente sorbiéndolo, mientras que usted podría tomar su teclado y realmente arreglar el código frente a él.

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

Buena suerte.

 2
Author: Jinesh Parekh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:18:35

Hay muchas razones válidas para no duplicar el código, sino simplemente preguntar... ¿su equipo quiere 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 SECO, pero imagine si duplica más y más código durante los próximos 5 años. Quién va a mantener ese código? Su equipo? ¿Y si deja el trabajo algún día? ¿Su equipo quiere mantener esto ¿mierda? :) Si no, entonces ya hizo un caso muy convincente para no duplicar el código, por no mencionar "más duplicaciones" = "más propensos a tener más errores en el futuro".

 2
Author: limc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:18:49

Dile que nunca se sabe a 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 terminar siendo utilizado mucho... He visto esto a menudo en pequeñas empresas. Y luego, en lugar de empezar todo de nuevo y perder el tiempo en cosas que podrían haberse arreglado antes, simplemente podrías hacerlo ahora, corto y dulce, mientras pueda ser...

 1
Author: Pacane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:12:16

Probablemente está asumiendo que no se rompió, y no lo será. Además, lo perfecto es enemigo de lo bueno. No creo que sea ajeno a los peligros de copiar/pegar, solo que tiene una evaluación diferente del potencial de error que tú.

Tal vez usted podría romper para él, para mostrar lo fácil que es. Si no puedes, quizá tenga razón.

 1
Author: Carlos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:18:48

Si es superior (o supervisor) a usted, pida más explicaciones - es posible saber más sobre el contexto... tal vez no vale la pena refactorizar el código (tal vez es un proyecto pequeño).

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

Si eres superior a él, solo "pídele" que haga lo que quieras...

 1
Author: csg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-19 15:21:30

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

Entonces, digamos 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 estar. Está introduciendo desorden, desorden, y cuanto más desorden tienes, más difícil es trabajar con un sistema. Aplicar algún esfuerzo ahora para organizarlo mejor (por lo general) dará sus frutos a largo plazo. Es como mantener tu escritorio o habitación organizado.

Esta es la idea de Ivar Jakobson de entropía de software

 0
Author: reinierpost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-24 09:09:07