¿Hay alguna manera de admitir diferentes estilos de codificación en un equipo de desarrollo

13

El problema: dos desarrolladores => tres opiniones sobre sangría, llaves en una nueva línea o no, etc.

Por lo general, trabajamos con tres o cuatro personas en nuestros proyectos y cada uno de ellos tiene su propio estilo de código. Lo sé, la solución común es acordar un estilo de código que todos deben usar, pero no quiero forzar a los programadores creativos en un traje que no les quede bien.

Entonces la pregunta es: ¿Hay alguna manera de permitir que cada programador viva su propio estilo, pero que tenga una base de código común dentro del repositorio? Pienso en algún complemento git / svn / whatever, que cambia entre el estilo personal y el común al finalizar la compra y confirmar. Me parece que la parte difícil de este enfoque es admitir diferencias correctas entre las versiones de un archivo

Kai
fuente
1
Hay formateadores de código automáticos disponibles para la mayoría de los lenguajes, pero para algunos (por ejemplo, C ++) es extremadamente difícil hacerlos completamente confiables debido a las complejidades de analizar el lenguaje.
Joris Timmermans
55
Realmente una mala idea. Pídale a su equipo que presente un estándar consensuado, luego haga que lo apliquen. Si vino, dígales que crezcan un poco.
Clement Herreman
8
Tal vez la otra observación extremadamente común debe hacerse aquí: ¿hay un problema real con las diferencias en los estilos de código? ¡No arregles algo que no esté roto!
Joris Timmermans
55
"pero no quiero forzar a los programadores creativos con un traje que no les queda" - si sus programadores no pueden adaptarse a cosas simples como sangría o cambios de estilo de llaves, debe contratar mejores desarrolladores. Una vez que use un nuevo estilo durante una o dos semanas, lo olvidará.
Mike Weller
44
@MikeWeller ¿No podría discutirse lo contrario? Las convenciones de nomenclatura son lo único que he considerado importante, ya que facilita la identificación del propósito de una cosa fuera de su contexto de definición. Mientras alguien esté diseñando de forma semi consistente para tener claridad sobre dónde anidan, comienzan y terminan los bloques, nunca he entendido por qué debería ser tan importante.
Erik Reppen

Respuestas:

20

No, tendrás que hacer un estándar. Si tiene un cambio en el miembro B del equipo (ya sea con una herramienta IDE automatizada o manualmente), escribió un montón completo de código del miembro del equipo A, que se confirmará y se mostrará como un cambio.

Esto es algo que casi todos los equipos enfrentan y los estándares son "forzados" por esta misma razón. Te sugiero que sigas los estándares de las autoridades lingüísticas como referencia y los adoptes para adaptarlos a tu equipo.

Tener un estilo de codificación coherente también ayudará a mantener el proyecto y reducirá la barrera de entrada para las nuevas personas que trabajan en el código.

Sam
fuente
11

No, deberá definir un estándar de codificación (preferiblemente uno que ya exista) y que sus desarrolladores se adhieran a él. Ser un programador profesional significa que puede adaptarse a cualquier estándar de codificación que se use en el proyecto en el que está trabajando.

JesperE
fuente
2
+1. Déjelos elegir uno, pero haga que lo apliquen.
Clement Herreman
Deseaba que el formateo formara parte del estándar de un lenguaje de programación, de modo que los programas no solo sean "válidos" o "no válidos", sino que también tengan un tercer estado, "válido y bien formateado".
JesperE
44
Es (más o menos) el caso en Python, donde la sangría es un lenguaje semántico.
Clement Herreman
2
Libre no es la aplicación estricta de tales, pero viene con un sistema incorporado en el código fuente formater, go fmt. Ver golangtutorials.blogspot.fr/2011/06/…
Clement Herreman el
1
@JesperE Eso se implementa en Python con PEP8 y la herramienta correspondiente, llamada inventivamente pep8 .
phihag
8

SÍ, puede funcionar siempre y cuando los estilos sean todos sensibles y la gente no cambie el código de otras personas para que coincida con sus preferencias y / o mezcle estilos en un solo archivo de código.
No es ideal, pero no es diferente de heredar el código antiguo creado con un "estándar" diferente al suyo y tener que integrarlo con su base de código.
Entonces, si tiene que hacerlo, algunas pautas:

  • sin cambiar el código de estilo diferente para que coincida con sus preferencias, cuesta tiempo e introduce errores
  • permanecer coherente dentro de cualquier archivo único. Entonces, si el estilo A se usó para escribirlo inicialmente, todos usarán el estilo A al modificarlo
  • cree un estándar común para su interfaz pública, por lo que para todo lo que está expuesto al exterior (y sí, otros subcomponentes de un sistema son el exterior).
jwenting
fuente
2
Agregaría que los desarrolladores profesionales a menudo tienden a fusionar los estilos de los demás de todos modos. Tendrán breves debates informales sobre algunos puntos y llegarán a un acuerdo.
Joris Timmermans
Funciona muy bien, con la advertencia de que el uso de reformateo de código automático debe mantenerse al mínimo (si no está totalmente prohibido).
grahamparks
2
"sin cambiar el código de estilo diferente para que coincida con sus preferencias, cuesta tiempo e introduce errores", todo lo contrario: hacer coincidir un estándar no automatizado a mano es muy desperdiciador de tiempo, ejecuta un formateador de código y confirma el cambio como "formateado con opciones" lo que sea ", entonces hacer cambios funcionales es mucho más rápido.
Pete Kirkham
¿Creo que esta respuesta puede haber pasado por alto la parte de "formateo automático" de la pregunta?
Joris Timmermans
Una variedad de estilos entre archivos es mucho más difícil de manejar que simplemente tener un estilo consistente.
Andy
4

La respuesta corta es no.

Si bien las opiniones deben valorarse en el trabajo, especialmente en un trabajo basado en el conocimiento, como el Desarrollo de software, los desarrolladores deben darse cuenta de que una opinión es solo una opinión y que están allí para escribir software y no discutir sobre qué estándar de sangría de línea es el mejor.

El objetivo de un documento de estándares debe ser hacer cumplir / sugerir un conjunto de estándares / convenciones de codificación comunes que aborden

  1. Elementos de diseño como tabulación, sangría, uso de {, (,
  2. Nombre de variable, objeto y función, es decir, CamelCase, notación húngara
  3. Manejo de excepciones cómo / cuándo / dónde se realizará
  4. Comentarios de código ¿Siempre hace referencia a un documento de diseño, un número de error, etc.

Los documentos de estándares ayudan a asegurar que el código sea fácil de leer, mantener y consistente en sus convenciones.

Esto es invaluable al revisar el código antes de registrarse, depurar el código de otra persona o modificar el código varios años después de que el desarrollador original haya abandonado la empresa.

Normalmente, al crear un documento de Estándares de codificación, reviso los estándares de la industria para el lenguaje que estoy usando (C, C #, SQL), uso los estándares más apropiados, hago circular los comentarios entre los desarrolladores más importantes / influyentes, incorporo los comentarios cuando corresponde. liberar el documento.

armitage
fuente
1
En la práctica, muchas tiendas tienen un desarrollador que suele ser Old Hand o PrimaDonna, que parece deleitarse en crear Formatting Holy Wars para que el resto de la gente se encargue de ello. Profesional == Lo que yo diga. Lo que ustedes digan == No profesional. Y luego se delega. He visto estándares de codificación que imponen cosas groseras como "Use muchas variables globales, nunca cree nuevas clases, evite la programación orientada a objetos a toda costa, y nunca cambie nada". Lamentablemente, no hay límite para lo que las personas intentan incluir en el alcance de algo llamado "estándares de codificación".
Warren P
4

En teoría, es posible reformatear automáticamente el código antes de comprometerlo con su sistema de control de versiones.

Sin embargo , hay un gran problema: las herramientas de formateo automático de código no son 100% confiables. Por lo tanto, podría introducir problemas en su código con este sistema. En mi mente, eso mata la idea. ¡Siempre es más importante tener un código funcional que un código con el estilo adecuado!

Si el proyecto está dividido en compartimentos, y la mayoría de las partes del código tienden a ser "propiedad" de programadores individuales, entonces puede estar bien permitirles usar sus propios estilos (dentro de lo razonable). Sin embargo, si varias personas trabajan con frecuencia en el mismo código, probablemente sea necesario aplicar un estilo.

Aquí hay una discusión similar sobre Stack Overflow .

Comunidad
fuente
2
¡Tenga en cuenta la respuesta aceptada en la discusión vinculada también!
Joris Timmermans
1

El reformateo automático de código unidireccional puede ser una solución viable si usted:

  1. Encuentre un autoformatter que realmente funcione para la convención que desea implementar y su lenguaje de programación.
  2. Puede hacerlo antes de la confirmación para que el reformateo no se muestre en los registros de cambios mezclados e indistinguibles de los cambios funcionales reales.
  3. Consiga que su equipo acuerde qué convención se debe aplicar (porque, en términos generales, no existe un "camino de regreso" en la salida a la preferencia personal de un desarrollador, al menos no que yo sepa).

Ninguno de esos es realmente fácil de hacer en muchos casos, ¡así que considera elegir tus batallas aquí! He visto a los equipos hacer esto con éxito para un proyecto C # /. NET donde el reformateo ya se realizó en la PC del desarrollador, por lo que es posible en algunas circunstancias.

Joris Timmermans
fuente
1

absolutamente puedes. Se trata de no sudar las cosas pequeñas.

El único estándar que importa es "mantener sus cambios con el mismo estilo que el código existente". Siempre que pueda ajustarse a un estilo de codificación que no sea el preferido, puede trabajar con cualquier estilo de codificación.

Entonces, ¿cuál es el problema de trabajar en 3 estilos diferentes dentro de la misma empresa? Sus desarrolladores necesitan entender esto, que escribir código de la manera que les gusta es encontrar su código, pero una vez que hacen cambios a un archivo diferente que usa un estilo diferente, tienen que mantener ese estilo (o realmente se verá mal) . No se permite volver a formatear (o simplemente volverán a formatear continuamente y las diferencias de scm serán inútiles) (y si hace esto, entonces debería emplearse un formateo automático).

Lo más probable es que, una vez que comiencen con esto, lleguen a un consenso sobre qué estilo usar o su estilo se desviará en su mayor parte. Si van a ser infantiles al respecto y reformatearán el código de los demás todo el tiempo, entonces será hora de descargar un estándar de Internet y exigir que lo usen. Es posible que desee hacer esto de todos modos, solo para agitarlo en sus caras como una carta de "jugar bien o no".

gbjbaanb
fuente