2010-11-19 9 views
23

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 nombre de todas las declaraciones globales y ligeramente modificando la implementación. Así que terminamos con dos archivos grandes que son casi idénticos aparte del cambio de nombre.¿Cómo convencer a un colega de que la duplicación de código es mala?

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

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

Está relacionado con this questions, 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 intentado argumentos simples y no he tenido éxito.

+24

La próxima vez que algo necesita ser cambiado en ambos ficheros, asegúrese de que la tarea se le asigna a él. Mejor aún, vea si puede convencerlo de que, como cree que la duplicación está bien, debe * ser dueño de * todas esas tareas futuras. LUEGO ve cómo le gusta hacer el mismo trabajo dos veces. – FrustratedWithFormsDesigner

+0

Wiki de la comunidad? – Caladain

+2

Tengo un compañero de trabajo así ... Siento tu dolor. :( –

Respuesta

22

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

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

+1

o necesita una nueva caracteristica. –

+2

@Downvoter - ¿te importa explicarlo? – Oded

8

Dale una copia de Refactorado.

+1

Esa es una buena sugerencia. De hecho, esperaba obtener alguna referencia como esta. Gracias. – vitaut

+2

Así como una referencia futura para un novato como yo: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672 – Max

2

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

+0

Si alguien está en su camino, apelando a una autoridad superior a menudo es la única forma de hacer que cumplan. El viejo dicho acerca de llevar un caballo al agua. – Caladain

3

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

5

Mejore su versión del código tanto que él se siente frustrado por los celos, pues, dicen - si acababa relacionado con mi código ...

+0

+1 Y si después de esto encuentras un error en tu "versión" - necesita arreglarlo en el suyo. Funciona particularmente bien si sus "versiones" han divergido mucho. – Audrius

1

le dicen que nunca se sabe cuando una solicitud puede ir en una negocio ... Una aplicación de prueba simple a veces se puede modificar una y otra vez, y finalmente se usa mucho ... He visto esto a menudo en pequeñas empresas. Y luego, en lugar de comenzar todo y perder el tiempo en cosas que podrían haberse solucionado antes, simplemente puede hacerlo ahora, breve y dulce, mientras que puede ser ...

11

Cuando desea café, hágale obtener es 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 deberán ser embolsados ​​en porciones minúsculas. Esto debería ilustrar cómo las tareas repetitivas son muy engorrosas y agotadoras (como corregir 20 códigos en lugar de uno).

Luego, envíele un enlace a esta publicación para que pueda ver a todas las personas que le rodean.

9

Hay dos opciones aquí:

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

  2. Él es un asno obstinado: Entonces no debes gastar energía en él. Ve con su jefe y deja que el jefe se encargue de eso. Algunas personas son asi.

Si bien la primera opción es obviamente mucho mejor, a veces no tiene otra opción. Y si usted será quien eventualmente necesitará mantener su código a las 3 de la mañana porque un cliente importante comienza a gritar al otro lado de la tierra, entonces definitivamente es su problema, y ​​su jefe debería manejarlo.

Y, por último, si su jefe piensa que usted está equivocado, probablemente esté en el lugar equivocado.

+0

Él es una tercera opción. Tiene mucha experiencia en programación con su extraña forma de copiar y pegar. En realidad, logró desarrollar una sorprendente capacidad para mantener un gran cuerpo de dicho código que está más o menos funcionando. Afortunadamente, la mayor parte está en un proyecto diferente y preferiría rasgar mis ojos para ver este código. Pero tal vez él no es completamente desesperado y podría estar convencido de que hay una mejor manera. – vitaut

+0

Esto se convierte en un problema de gestión. Los programadores experimentados que tienen malos hábitos de codificación son difíciles de entrenar. La mayoría de las veces, hacer que vean el error de sus caminos es simplemente dejándolos sentir el dolor. Hágales saber que serán responsables de mantener todas las duplicaciones que crearon, independientemente del programador original. Lamentablemente, no estás en el puesto de gerente. Esperemos que su gerente esté de acuerdo con usted :-) –

+0

@ vitaut, basado en su descripción de él, digo que es del tipo 2: el asno obstinado. Competente en la redacción de un código de calidad, tal vez, pero rígido en sus ideales en detrimento propio. – Brad

2

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

Haz que se dé cuenta de que está siendo injusto con el equipo & del proyecto. Si todavía no está de acuerdo con eso, llévele una taza de café y pídale que se siente bebiéndola, mientras que usted podría tomar su teclado y arreglar el código que tenía delante.

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

Buena suerte.

1

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

Quizás podría romperlo para él, para mostrar lo fácil que es. Si no puedes, quizás tiene razón.

+1

Si el código original está funcionando, probablemente "no está roto". Sin embargo, tomar el concepto de "si no está roto, no lo arregles" demasiado lejos también significa "nunca MEJORAS nada". Estar intacto no significa ser bueno, y el código no solo se mide por el número de errores, también se mide por la capacidad de mantenimiento de las métricas, la claridad, la reutilización y muchas otras. –

+0

Esto es cierto. Solo estoy pensando en cómo convencer a alguien que está muy concentrado en esta copia/pega en particular. Supongo que debes traer prioridad. ¿Qué es más importante en tu proyecto ahora? ¿Alguna fecha límite viene? ¿Hay una revisión general del código? – Carlos

+0

Estoy de acuerdo, tal vez ahora es demasiado tarde ya que lo hizo, y la solución para copiar/pegar tendrá que esperar. Además, tal vez haya una razón específica para este copy/paste específico, aunque me parece bastante difícil de justificar. –

2

Hay 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 imagínese si 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 algún día? ¿Tu equipo quiere mantener esta basura? :) Si no es así, 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".

1

Si es superior (o supervisor) para usted, solicite más explicaciones - es posible que sepa más sobre el contexto ... tal vez no valga la refactorización del código (quizás sea un proyecto pequeño).

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

Si usted es superior a él, simplemente "pedir" lo que hacer su camino ...

3

Su compañero de trabajo es la optimización de su eficacia a corto plazo a costa de sacrificar la eficacia ya plazo de la organización (por ejemplo, el resto de sus compañeros también como él mismo). Es probable que se requiera cualquier cambio requerido en el primer archivo en el segundo, pero nadie recordará ... y que causará 2 ciclos de búsqueda y reparación, en lugar de uno.

Puede ejecutar un detector clónico sobre el código y simplemente mostrar los resultados a su gerente.

Consulte Wikipedia on duplicate code para obtener una lista.

Puede ver ejemplos de detección de clonación para varios idiomas con nuestro detector CloneDR. Está diseñado para encontrar una detección de grandes bloques de código con un nuevo nombre y puede mostrar exactamente lo que sucedió.

0

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

Luego, supongamos 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 ser. Está introduciendo el desorden, el desorden, y cuanto más desorden tiene, más difícil es trabajar con un sistema. Aplicar un poco de esfuerzo ahora para organizarlo mejor (por lo general) valdrá la pena a largo plazo. Es como mantener organizado su escritorio o sala.

Esta es la idea de Ivar Jakobson de software entropy

Cuestiones relacionadas