Cómo hacer acuerdos sobre la base del código con un compañero de trabajo cuando se tienen opiniones diferentes

Estoy trabajando como desarrollador frontend y un nuevo colega se unió a mi equipo. Él tiene más experiencia que yo, pero tengo más conocimiento sobre la aplicación en la que estamos trabajando.

Así que estamos haciendo la revisión del código de cada uno de los demás y sé que él está muy interesado en diseñar el código y ser consistente en toda la aplicación.

Ahora revisé su código e hice algunas sugerencias sobre algunas convenciones y estilos de código y siempre di la razón por la que creo que esto es mejor.

Respondió a mis sugerencias básicamente diciendo que no está de acuerdo y dando algunos ejemplos.

Luego respondí su declaración nuevamente usando estos ejemplos y tratando de explicar nuevamente por qué lo prefiero de la manera que sugerí.

Luego respondió que le gustaría posponer esta discusión. Supongo que todavía no está de acuerdo conmigo y nunca lo adivinaré. Y creo que esta discusión nunca volverá a surgir.

Mi pregunta es ¿cómo puedo hacer que esté de acuerdo conmigo sin forzarlo? ¿Y qué debo hacer cuando él nunca estará de acuerdo con mis puntos? Tampoco me gusta que haya decidido posponer esta discusión. ¿Debería preguntarle cuándo lo discutiríamos entonces?

Muchos IDE permiten reglas de formato. Donde trabajo, evitamos su problema por completo al tener un conjunto predefinido de estilos de codificación y el formato automático formateará los archivos según esas reglas. Aparece el único estilo de tiempo "por favor, formatea automáticamente tu código" y eso es todo. Las reglas fueron acordadas en la empresa y están abiertas a discusión pero todos deben acatar lo acordado.
Usamos Linters e IDE, pero se trata más de descubrir las reglas que queremos seguir. y esto genera mucha discusión.
Espera, ¿cuál de ustedes está abogando por "mejoras" que difieren del estilo actual de la casa / forma de hacer las cosas? tu o el?

Respuestas (2)

Esto sucede en casi todas partes (para que no estés solo), te daré el consejo que les doy a todos:

Deje de comentar sobre ideales estilísticos/cosméticos en sus revisiones de código.

Sí, sería bueno si una base de código fuera estilísticamente consistente, pero la realidad es que eso nunca sucederá cuando dos o más personas trabajen en un proyecto. Puede comenzar de esa manera, pero nunca terminará de esa manera. Aquí hay una lista de lo que busco al hacer una revisión de código en orden de importancia:

  1. Errores de lógica
  2. Requisitos perdidos
  3. Casos de borde
  4. Estilo (solo si el código no tiene sentido y necesitará refactorización)

Si paso por todo el proceso de revisión de código y no encuentro nada que no se ajuste a esas 4 cosas, entonces podría comentar sobre el estilo y dejar muy claro que es solo mi preferencia. Hago esto porque no creo que una revisión de código deba contener sugerencias para el autor. Mientras el código tenga sentido, no comentes sobre el estilo a menos que literalmente no haya nada más que comentar.

Incluso entonces, esto es realmente solo para mostrar que, de hecho, leyó el código y es capaz de hacer sugerencias. Si el compañero de trabajo no quiere implementar el enfoque estilístico que recomendó, déjelo en paz (a menos que cause problemas de legibilidad o sea confuso hasta el punto de refactorizar).

En mi opinión, si la revisión de su código consiste principalmente en diseñar, es posible que no lo esté revisando lo suficiente. Puedo contar con los dedos de una mano la cantidad de veces que solo pude comentar sobre el estilo.

Ya estaría feliz si solo hay una persona trabajando en el proyecto y hay un estilo consistente en todo el código base. Pero a menos que haya herramientas automáticas para la sangría y demás, por lo general no tendrá suerte.
Me gusta su evaluación de las revisiones de código y qué decir en ellas, pero me gustaría agregar un punto. También está permitido dar retroalimentación positiva. Si algo es realmente genial, ¡no hay nada de malo en señalarlo!
@simbabque Estoy completamente de acuerdo, también hago esto. Especialmente para la gente nueva. Decir algo como "Me gusta mucho la forma en que manejaste a X" o "No habría pensado en Y" puede contribuir a su confianza y autoestima.
¿Qué sucede si comenta un caso límite pero tampoco puede ponerse de acuerdo sobre eso (por ejemplo, "ese caso límite es 'imposible', etc."). Todavía necesita una forma de resolver las diferencias de opinión.
En ese momento, tendría que tener una discusión. Una vez que haya hecho sus sugerencias (por escrito), tenga una discusión. Si el autor es simplemente obstinado y no quiere, esa es su prerrogativa. Usted lo mencionó durante una revisión del código y depende de esa persona asegurarse de que se implementen los comentarios de la revisión del código. Si eligen no hacerlo, es mejor que esperen que ese caso extremo no surja porque se vería bastante mal si se identificara y eligieran no hacerlo.
"Dejen de comentar sobre ideales estilísticos/cosméticos en sus revisiones de código". Podría trabajar en una empresa pequeña, pero intente escribir código para una empresa de ingeniería multinacional y salirse con la suya. Caballos para cursos, etc...

El aspecto importante es eliminar la discusión 'él dijo, yo dije' fuera de la ecuación.

Necesita algunas cosas en su lugar;

  1. Un estándar de codificación definido. Ignore todo lo que ya se haya publicado en sus repositorios; definir cómo se vería una pieza de código bien escrita en el futuro.
  2. Un flujo de trabajo definido para mover el código a través del desarrollo, la revisión por pares, la revisión de control de calidad y la publicación. Esa definición de flujo de trabajo incluiría el siguiente punto...
  3. Una herramienta de análisis de código estático, como Lint (hay otras disponibles, según los lenguajes de desarrollo). Si el código no pasa la verificación de Lint, no debe pasar a la revisión por pares.

Los estándares de codificación son importantes. Todavía hay espacio para la individualidad en la forma en que se escribe el código, pero tener un conjunto básico de estándares de codificación significa que los futuros desarrolladores pueden ponerse al día con la base del código rápidamente.

Tendrá una gran deuda técnica en la base de código existente, pero eso está hecho y funcionando: avance, no retroceda . Esa deuda técnica existirá como un proyecto de "mojarse los pies" para cualquier futuro desarrollador que se una al equipo.