Mientras leía esta pregunta , la respuesta más votada citaba al tío Bob sobre los estándares de codificación , pero este consejo me confundió:
- No los escriba si puede evitarlo. Más bien, deje que el código sea la forma en que se capturan los estándares.
Esto rebotó en mi cerebro, pero no pude encontrar un lugar donde quedarme. Si una nueva persona se une al equipo, o los estándares de codificación cambian, ¿no podría haber confusión de información?
¿Por qué no debería escribir un estándar de codificación?
development-process
coding-standards
Legal perezoso
fuente
fuente
Respuestas:
Hay unas pocas razones.
Los estándares de codificación no se refieren a lo que las personas deberían hacer, sino a lo que realmente hacen. Cuando las personas se desvían de los estándares, esto debería ser recogido y cambiado a través de un proceso de revisión de código y / o herramientas automatizadas.
Recuerde, el objetivo de los estándares de codificación es hacernos la vida más fácil. Son un atajo para nuestro cerebro para que podamos filtrar las cosas necesarias de las cosas importantes. Es mucho mejor crear una cultura de revisión para hacer cumplir esto que formalizarlo en un documento.
fuente
Hay otra interpretación. No creo que sea lo que quería decir tío Bob, pero vale la pena considerarlo.
No capture estándares de codificación en un documento. Captúrelo en código al tener un proceso automatizado que verifique que se cumplen los estándares .
No confíe en que las personas hagan referencia a un documento, pero al mismo tiempo, no confíe en que las personas interpreten el código que ya existe e identifiquen qué es una convención y qué es una coincidencia.
Incorpora algo como Checkstyle en tu build de commit. Esto puede hacer cumplir las reglas básicas como los estándares de formato y nomenclatura, y luego, en lugar de gastar esfuerzo mental al considerar el estilo, todo eso puede descargarse en un proceso tonto que al menos se garantiza que sea exhaustivo.
Si es importante, defina estrictamente qué es lo que desea y falle si está mal.
fuente
After the first few iterations, get the team together to decide.
con solo la regla n. ° 3 parece que no defiende ningún estándar de codificación, pero al considerar todas las reglas juntas y, sobre todo, el n. ° 6, parece que realmente está diciendo: "No forzar un estándar de codificación al principio. Dejar que se desarrolle orgánicamente y, después de un tiempo, sentarse con su equipo para resolver los detalles ". Lo cual es muy diferente de "No formalice su estándar de codificación" (que parece ser la esencia de muchas respuestas).La gente pasa por alto el verdadero propósito de un documento de estándares de codificación, que es resolver disputas .
La mayoría de las decisiones en el estándar de codificación tendrán un efecto muy pequeño en la legibilidad y la productividad. Especialmente si adopta el estilo "normal" para el idioma, y los diseñadores de idiomas comienzan a darse cuenta de que esto debería ser parte de la especificación (por ejemplo, Ir).
Debido a que son tan triviales, los argumentos pueden ser realmente acalorados y continuar sin parar, causando un daño real a la productividad y la cohesión del equipo. O puede ocultar su historial de cambios con un reformateo interminable entre los estilos preferidos de dos o más personas.
Tener un estándar escrito termina el argumento. Los gerentes pueden señalarlo y desviar la insatisfacción hacia el documento. Puedes discutir con un pedazo de papel pero no te va a escuchar.
(Ver también La tiranía de la falta de estructura )
fuente
Porque los comentarios son mentiras .
El estándar de codificación es un gran comentario sobre cuál debería ser el código. El código en sí es la última fuente de verdad. La verdad en este caso no es el comportamiento del código, es el estilo en el que se expresa. Si sus estándares ya no se reflejan en su código, tiene mucho trabajo por delante.
El tío Bob ve un comentario como una falla personal del programador, porque demuestra que no logró expresar el propósito del fragmento de código con el lenguaje de programación en sí. Del mismo modo, un documento estándar es una falla al expresar un estilo coherente en la base del código.
Los nuevos programadores deberían pasar tiempo mirando el código, no pasar días leyendo un documento de estándares de varios capítulos (he tenido que hacer esto, suspiro).
Un documento de estándares no es una mala idea, pero he estado en talleres de programación donde mantener los documentos de estándares era el trabajo a tiempo completo de alguien. Por favor, si debe mantener un documento estándar, guárdelo en una página. Pero si ya tiene un código, ¿nadie debería poder armar el mismo documento en menos de un día?
Tener estándares de código es importante. Tener un documento que dicta lo que son no lo es.
fuente
Si está preguntando razones detrás de su opinión, entonces puede tener una respuesta solo si él publicará una respuesta aquí ( nuestra opinión es irrelevante), sin embargo ...
Si está preguntando si tiene razón al respecto: déjeme ser el único impopular (hasta ahora) que diga que no tiene ninguna razón para evitarlo.
ESCRIBIRLO ABAJO . Sin embargo, intentaré explicar mis razones ...
David sugirió en un comentario que el punto principal de la respuesta de Stephen no es por qué no debería escribir documentos, sino en qué forma están. Si las pautas se formalizan en las herramientas (no solo en la revisión manual del código), entonces puedo estar de acuerdo (cuando la ley no requiere otra cosa). Tenga en cuenta que desafortunadamente las herramientas no pueden verificar todo (la teoría de la computación no es nuestra amiga) a menudo porque están limitadas a una unidad o paquete de traducción específico o como su idioma favorito llame a un límite .
Sin embargo, la redacción del tío Bob no me hace pensar que está hablando de eso.
¿Puedo estar en desacuerdo con un experto tan alto? Lo hago, para casi todos los puntos en la publicación citada (ver también la segunda parte de esta respuesta para más detalles). Tratemos de entender por qué (suponiendo que ya sepa que las pautas de codificación no son solo problemas menores de formato ).
La "programación de autoorganización gratuita" es buena para un chico ninja de 16 años, pero las organizaciones tienen otros requisitos :
Si está pensando en las personas antes del proceso , solo puedo sugerirle que lea sobre TPS: los seres humanos son una parte central de Lean, pero los procedimientos están altamente formalizados.
Por supuesto, una organización pequeña con un solo equipo puede dejar que el equipo decida los estándares a adoptar, pero luego debe anotarse. Aquí en Programmers.SE puede leer publicaciones de Eric Lippert: Supongo que todos estamos de acuerdo en que es un desarrollador experimentado, cuando trabajó para Microsoft tuvo que cumplir con sus pautas escritas (incluso si algunas reglas pueden ser incorrectas , no aplicables o inútiles) a él.) ¿Qué pasa con Jon Skeet? Las pautas de Google son bastante estrictas (y muchas personas no están de acuerdo con ellas), pero debe cumplirlas. ¿Les falta el respeto? No, probablemente trabajaron para definir y mejorar tales pautas, una empresa no está compuesta por un miembro (o un equipo) y cada equipo no es una isla .
Ejemplos
Tío Bob
Es cierto, hasta que no tenga un estándar y su organización le haya asignado la tarea de construir uno.
No, por todas las razones explicadas anteriormente. Incluso si piensas formalizar solo el formateo de código (lo menos útil que quieras formalizar), todavía tengo memoria de guerras interminables (e inútiles) sobre el formateo. No quiero vivirlos una y otra vez, configúrelo de una vez por todas.
No, por todas las razones explicadas anteriormente (por supuesto, a menos que refactorice todo su código de una sola vez cuando cambien las pautas). ¿Quieres dejar tu código tal como está? ¿Cómo inspecciona la base de código para comprender las pautas actuales ? ¿Busca por antigüedad del archivo y adapta su estilo de codificación a la antigüedad del archivo de origen?
Es cierto que las pautas deben ser cortas o nadie las leerá. No repitas lo obvio.
No solo, un buen estándar se trata de calidad a menos que desee tener un estándar solo sobre detalles menores .
Vea el primer punto y no olvide que un estándar de codificación suele ser un proceso que tardó muchos años en desarrollarse y refinarse: ¿pocas iteraciones, tal vez con desarrolladores junior? De Verdad? ¿Desea confiar en la memoria de un miembro senior (si lo hay)?
Tres notas:
fuente
fuente
Hay muchas razones para esto. Aquí hay algunas consideraciones:
¿Cuánto tiempo pasan las personas "aprendiendo" los estándares del código solo para tener mucho tiempo para que todo el equipo revise, discuta, documente, revise ... etc. estándares del código? Esto es como discutir constantemente su "Manual del Empleado": ¿con qué frecuencia aparece en la agenda de una reunión de equipo?
Cuando un proyecto es financiado / archivado / etc. entonces las pocas personas que quedan generalmente no pueden seguir adhiriéndose (o tal vez ni siquiera han leído) los estándares. Lo siguiente que sabes es que, de todos modos, todo ese esfuerzo para "mantener limpio el código" se desperdició.
Si el proyecto se detiene o se presenta un nuevo cliente potencial, es muy probable que la persona ignore por completo las reglas anteriores y quiera hacerlo de una nueva manera. Nuevamente, ¿qué se ganó codificando estándares?
Debes asegurarte de leer # 6:
En otras palabras, cuando llegue el momento de comenzar un proyecto, simplemente siga la corriente por un tiempo. Luego discuta las reglas generales de los estándares de codificación que el equipo actual está usando, y básicamente sígalas. De esa manera, maximiza el esfuerzo que se necesita para mejorar el producto y minimiza el esfuerzo necesario para escribir, revisar y documentar el "azúcar sintáctico" que se utilizó para obtener el código ejecutable.
Muy pocos equipos obtienen enormes beneficios de los estándares de codificación. Por lo general, "legibilidad" es demasiado vago - y la mayoría de los desarrolladores no se benefician en gran medida de exactas reglas sobre el espaciamiento, nuevas líneas, etc., pero se puede evitar constantemente molestos desarrolladores por tener al menos un par de reglas.
fuente
Otra respuesta que no creo que se haya dicho con suficiente claridad es que también significa que las personas no siguen las reglas a ciegas. Significa que las personas tienen que presentar justificaciones reales para sus decisiones de diseño y convenciones de codificación, en lugar de solo depender del hecho de que se ha escrito para justificarlo.
fuente
En primer lugar, que yo sepa, el tío Bob es una persona de Java, esto es muy importante para entender lo que dice.
Cuando trabajo en un equipo Java o C #, si el código actual ha sido escrito por desarrolladores experimentados, es fácil para mí elegir el estilo de codificación y seguir el ritmo. Si no estoy dispuesto a hacerlo, tal vez no era la persona adecuada para el trabajo ... Si no hay revisión de código o programación de pares para recogerme cuando no sigo con el estilo, entonces la compañía tiene un ¡Un problema mayor que la forma en que nombro los campos de miembros!
Tanto Java como C #, junto con la mayoría de los lenguajes modernos, se han definido para que haya pocas trampas "simples" en las que pueda caer un programador.
Sin embargo, cuando comencé a programar, estaba usando C (y luego C ++). En C puedes escribir código como
El compilador no dará un error, y eso es difícil de detectar cuando se lee mucho código. Sin embargo, si escribes:
El compilador da un error, y es fácil cambiar el código
3 == a
. Del mismo modo, si el estándar de codificación no permite=
ser utilizado dentro de unaif
condición o "if
declaración vacía ", entonces se puede usar un verificador de código como parte del sistema de compilación para rastrear este error.Mis puntos de vista sobre los estándares de codificación cambiaron mucho cuando me alejé de C / C ++: solía gustarme los estándares de codificación que se aplicaban estrictamente y tenían muchas páginas. Ahora creo que solo necesita enumerar las herramientas que se utilizan y obtener un acuerdo informal entre los miembros del equipo original en algunas convenciones de nomenclatura. Ya no vivimos en un mundo de equipos de más de 30 desarrolladores que escriben aplicaciones en C / C ++ ...
Hay una razón por la que nunca me gustó JScript, y creo que TypeScript es lo mejor que le ha pasado al desarrollo web durante años. Espero que los desarrolladores de IU web todavía necesiten estándares de codificación debido a los defectos en el diseño de HTML / CSS / JScript, etc.
fuente
Que la fuente sea el estándar de codificación autodocumentado implica dos cosas.
fuente
Un documento de estándares de código bien actualizado y bien escrito puede ser muy útil, pero generalmente este no es el caso. El documento de estándares no refleja los estándares de codificación reales utilizados por la compañía, ya que es muy difícil crear un buen documento de estándares y aún más difícil mantenerlo actualizado.
En lugar de tener un documento de estándares de codificación pobre y engañoso, es mejor no tener ninguno y dejar que el código mismo represente esos estándares. De cualquier manera, la parte más importante es aplicar los estándares en el código, y esto requiere mucho más que un simple documento. La motivación, los procesos, los entrenamientos, las herramientas, etc. son mucho más importantes.
fuente
Una cosa muy importante que no se ha establecido con suficiente claridad es que los estándares de codificación son como el lenguaje: evolucionan. Un estándar de codificación escrito se interpone en el camino de esto, y si no lo hace, está continuamente desactualizado e inútil.
No tener un estándar de codificación definido no es tan malo. Si realiza revisiones por pares en el check-in, cada vez que algo que no cumple con el estándar de codificación ingresa al repositorio, eso significa que 2 personas lo pensaron * y decidieron que el beneficio de esta variación supera la inconsistencia con el resto del código.
No tener un estándar escrito también elimina la burocracia que evitaría que un equipo de una empresa intente una nueva variación del estándar de codificación para un nuevo proyecto, ya sea porque quieren probar algo o tal vez porque un estándar diferente tiene aplicaciones prácticas en algunas de las herramientas automatizadas que usan.
Escribir un estándar tiene una tendencia a eliminar más flexibilidad de lo que se pretendía originalmente, al tiempo que consume bastante tiempo que podría dedicarse a otras cosas. No digo que nunca debas escribir estándares de codificación, los estándares escritos ciertamente tienen sus beneficios, especialmente si los equipos que trabajan en diferentes ubicaciones trabajan en la misma base de código.
Muy relacionado: Evolución en los estándares de codificación, ¿cómo los maneja?
* Si las personas no piensan mientras revisan el código por pares en el check-in, sus problemas son mucho más grandes que los estándares de codificación.
fuente
Cambiarlos se convierte en un obstáculo importante, y las personas se adherirán con seguridad a la letra de la ley en lugar de comprometerse con el cerebro y hacer lo correcto.
Llegará el día en que parte del estándar no sea útil y empeore el código. Algunas personas se adherirán al estándar, porque está escrito y son seguras, y porque las reglas están ahí para ser seguidas. Las personas que desean escribir un buen código en lugar de un código que cumpla con los estándares se sentirán frustradas y enojadas. Habrá argumentos y desacuerdos, mientras que si el estándar no fuera escrito, habría exploración y discusión.
fuente
Creo que muchas publicaciones aquí son un estándar de codificación confuso con una guía de estilo .
Asegurarse de que los módulos desarrollados por diferentes equipos tengan las mismas opciones de compilación y ABI es un tipo diferente de cuántos espacios están sangrados.
Deben documentarse cosas como la forma adecuada de estructurar #incluir archivos y no contaminar el espacio de nombres global en un archivo de encabezado para que puedan usarse como una lista de verificación durante la codificación inicial y las revisiones de código.
En particular, "no uses XXX porque causa problemas de compatibilidad con YYY" no es algo que verías por ejemplo al seguir otro código, ya que no está allí. Por lo tanto, deje que el código sea la forma en que se capturan los estándares, puede que no esté claro o que falte por completo para algunos tipos de estándares, por lo que este no puede ser un plan universal.
Algo gravemente dominante e importante como no usar excepciones o no usar
new
en ciertos sistemas integrados no puede dejarse simplemente como conocimiento cultural común, ya que "la información es cultural (solo)" contradice los principios fundamentales de los estándares de fabricación como ISO-9000, que el El desarrollador de estos sistemas integrados está utilizando (por ejemplo, para aplicaciones automotrices). Estas cosas importantes deben documentarse, firmarse y archivarse de manera formal.Pero eso se aplica a la codificación , no al estilo .
Los inventores de C y C ++ muestran, por ejemplo, el uso de nombres en minúsculas y no CaMelCaSe. Entonces, ¿por qué tantos desarrolladores no siguen el ejemplo implícito de la fuente? ¿No debería ser el estilo de la biblioteca estándar y los materiales de enseñanza canónicos el estilo implícito a seguir?
Mientras tanto, las personas hacen seguir el ejemplo de los encabezados de biblioteca estándar para las cosas que no deben ser copiados, al igual que el uso de
__Ugly
los nombres de los parámetros macro y el archivo de inclusión patrón no repetición.Por lo tanto, tener cosas a menudo no se considera un estilo importante o, por el contrario, tener ejemplos puede no ser claro en cuanto a lo que no se debe seguir en el código del proyecto. Ambos son contraejemplos de la tesis de que "estilo" (o convenciones de codificación) es mejor dejarlo implícito.
fuente