Creo que en realidad hay dos cosas que abordar, y de hecho las consideraría por separado porque no pueden abordarse de la misma manera, aunque considero que ambas son importantes.
- El aspecto técnico: que tiene como objetivo evitar el código arriesgado o mal formado (incluso si es aceptado por el compilador / intérprete)
- El aspecto de la presentación: que se refiere a hacer que el programa sea claro para los lectores
El aspecto técnico que califico de Coding Standard , al igual que Herb Sutter y Andrei Alexandrescu con sus estándares de codificación C ++ . La presentación califico de Estilo de codificación , que incluye la convención de nomenclatura, sangría, etc.
Norma de codificación
Debido a que es puramente técnico, un estándar de codificación puede ser principalmente objetivo. Como tal, cada regla debe estar respaldada por una razón. En el libro al que me referí cada elemento tiene:
- Un título, simple y al grano.
- Un resumen, que explica el título.
- Una discusión, que ilustra la cuestión de hacer lo contrario y, por lo tanto, expone la justificación
- opcional Algunos ejemplos, porque un buen ejemplo vale más que mil palabras
- opcional Una lista de excepciones para las cuales no se puede aplicar esta regla, a veces con soluciones alternativas
- Una lista de referencias (otros libros, sitios web) que han discutido este punto
La justificación y las excepciones son muy importantes, ya que resumen el por qué y cuándo.
El título debe ser lo suficientemente explícito como para que durante las revisiones uno solo necesite tener una lista de títulos (hoja de trucos) para trabajar. Y obviamente, agrupe los artículos por categoría para que sea más fácil buscar uno.
Sutter y Alexandrescu lograron tener una lista de solo cien artículos, a pesar de que C ++ se considera peludo;)
Estilo de codificación
Esta parte es generalmente menos objetiva (y puede ser francamente subjetiva). La intención aquí es garantizar la coherencia, porque esto ayuda a los mantenedores y los recién llegados.
No desea entrar en una guerra santa sobre qué estilo de sangrado o llave es mejor aquí, hay foros para esto: por lo tanto, en esta categoría, usted hace las cosas por consenso> voto mayoritario> decisión arbitraria de los líderes.
Para ver un ejemplo de formato, consulte la lista de opciones de Estilo artístico . Idealmente, las reglas deben ser lo suficientemente claras y completas como para que un programa pueda reescribir el código (aunque es poco probable que alguna vez codifique uno;))
Para la convención de nomenclatura, trataría de distinguir fácilmente las clases / tipos de las variables / atributos.
También es en esta categoría que clasifico las "medidas" como:
- prefieren métodos cortos a largos: generalmente es difícil acordar cuánto dura
- prefiera regresar temprano / continuar / descanso para reducir la sangría
Misceláneo
Y como última palabra, hay un elemento que rara vez, si alguna vez, se discute en los Estándares de Codificación, tal vez porque es particular de cada aplicación: la organización del código. El problema arquitectónico es quizás el problema más sobresaliente, arruine el diseño inicial y se verá afectado por años dentro de este momento. Tal vez debería agregar una sección para el manejo básico de archivos: encabezados públicos / privados, gestión de dependencias, separación de preocupaciones, interacción con otros sistemas o bibliotecas ...
Pero esos son nada si no se aplican realmente y hacen cumplir .
Cualquier violación debe ser mencionada durante las revisiones de código, y ninguna revisión de código debe estar bien si hay una violación pendiente:
- arreglar el código para que coincida con la regla
- arregla la regla para que el código ya no se destaque
Obviamente, cambiar una regla significa obtener el "avance" de los líderes.