Actualizar
Mi respuesta entre comillas para enfatizar:
Creo que la respuesta que establece que los comentarios no deben abordarse en los Estándares de codificación y luego enumera un conjunto de preguntas defensivas para combatirla, es la única respuesta correcta.
El problema aquí es que un estándar de codificación es solo eso, un estándar . Las ideas extremadamente subjetivas no deberían estar en un estándar de codificación . Puede estar en una guía de Mejores Prácticas, pero esa guía no se puede usar contra un desarrollador durante la Revisión de Código. En mi opinión personal, un estándar de codificación debe ser lo más cercano posible a la automatización. Hay mucho tiempo perdido en las revisiones de código discutiendo sobre nombres, espacios, pestañas, corchetes, comentarios, etc., etc., cuando TODO se puede automatizar. Incluso la respuesta sobre tables
y chairs
se puede automatizar. LINT'ers permite diccionarios, verificaciones de capitalización por concepto (variable, función, método, clase, etc.).
Incluso la comprobación de JavaDoc puede ser implementada por un Robot LINT'er antes de que se acepte una solicitud de extracción. Muchos proyectos de código abierto hacen exactamente esto. Envíe su solicitud de extracción, el código se crea con un archivo Travis-CI, incluido el análisis estático, y debe pasar todos los estándares de codificación que pueden expresarse objetivamente. No hay señales humanas sobre 'hacerlo incorrectamente' o no 'proporcionar valor' con un comentario, o la forma incorrecta de nombrar variables, et el. Esas discusiones no aportan ningún valor y es mejor dejarlas en manos de un robot de terceros que pueda recibir la peor parte de nuestra codificación emocional.
Para responder realmente a la pregunta, deberíamos abordar cómo escribir un Estándar que aborde cómo responder a la siguiente pregunta: ¿Este comentario proporcionó valor? Un estándar de codificación no puede dictar el 'valor' de un comentario. Por lo tanto, se hace necesario que un humano revise esa lista de verificación. La mera mención de comentarios en un Estándar de codificación crea una lista de verificación que el Cartel original quiere evitar.
Es por eso que los comentarios generalmente no son procesados por el compilador y eliminados. Su valor no puede determinarse. ¿Es valioso el comentario en cuestión? ¿si o no?. Responder esta pregunta es NP-hard. Solo los humanos tienen la oportunidad de responderlo adecuadamente, e incluso entonces solo puede ser respondido en el momento en que se lee, por la persona que lo está leyendo; donde el valor de ese comentario se ve afectado por el clima, su vida hogareña, la última reunión a la que asistieron y no terminó bien, la hora del día, la cantidad de café que tomaron. Confío en que la imagen se está volviendo más clara.
¿Cómo puede expresarse correctamente en alguna Norma? Un estándar no es útil a menos que se pueda aplicar de manera consistente y justa, donde lo justo es más sobre la objetividad y no emocional.
Confieso que un estándar de codificación debe permanecer tan objetivo como sea posible. La forma en que las variables se denominan objetivo IS. Pueden verificarse fácilmente en un diccionario para determinar la ortografía, la estructura gramatical y la carcasa adecuadas. Cualquier cosa más allá de eso es un "partido de meado" que gana la persona con más poder o "golpe de cejas". Algo que, personalmente, me cuesta no hacer.
Cuando comento, siempre comento hablar con mi futuro yo en tercera persona. Si vuelvo a este código en 5 años, ¿qué necesito saber? ¿Qué sería útil, qué sería confuso y qué estaría desactualizado con el código? Existe una diferencia entre el código de documentación para generar una API pública de búsqueda y el código de comentario que proporciona valor a un tercero desconocido, incluso si ese tercero es usted mismo.
Aquí hay una buena prueba de fuego. Si fueras el ÚNICO en el proyecto. Sabías que serías el único en el proyecto. ¿Cuál estaría en su estándar de codificación? Desearía que su código sea claro, autoexplicativo y comprensible para usted en el futuro. ¿Tendrías una revisión de código contigo mismo sobre por qué no pusiste un comentario en cada línea? ¿Revisaría cada comentario que creó en los 100 archivos que registró? Si no, ¿por qué obligar a otros?
Algo que creo que se pierde en estas discusiones es que Future You también es un desarrollador de este proyecto. Al preguntar sobre el valor, mañana usted también es una persona que puede obtener valor del comentario. Entonces, el tamaño del equipo, en mi opinión, no importa. La experiencia del equipo no importa, cambia con demasiada frecuencia.
Ninguna cantidad de código de comentario que revise esto evita que un marcapasos se estrelle y mate a un paciente. Una vez que habla de un comentario que afecta el código, ahora está hablando del código, no del comentario. Si todo lo que se necesita es un comentario faltante para matar a alguien, hay algo más que huele en el proceso.
La solución a este tipo de codificación rigurosa ya se ha proporcionado como una metodología para escribir el software en sí. Y no tiene nada que ver con los comentarios. El problema con los comentarios es que NO tienen impacto en la forma en que funciona el producto. Los mejores comentarios del mundo no pueden evitar que el software se bloquee cuando está integrado en un marcapasos. O al medir las señales eléctricas con un electrocardiograma portátil.
Tenemos dos tipos de comentarios:
Comentarios legibles por máquina
Los estilos de comentarios como Javadoc, JSDoc, Doxygen, etc. son todas formas de comentar la interfaz pública que proporciona un conjunto de códigos. Esa interfaz solo puede ser utilizada por otro desarrollador único (código de propiedad para un equipo de dos personas), un número desconocido de desarrolladores (por ejemplo, JMS) o para un departamento completo. Este código puede leerse mediante un proceso automatizado que luego produce una forma diferente de leer esos comentarios, como HTML, PDF, etc.
Es fácil crear un estándar para este tipo de comentario. Se convierte en un proceso objetivo de asegurar que cada método, función, clase públicamente invocable contenga los comentarios requeridos. Encabezados, parámetros, descripción et. el. Esto es para garantizar que sea fácil para otro equipo encontrar y usar el código.
Estoy haciendo algo que parece loco, pero realmente no
Estos comentarios están aquí para ayudar a otros a ver POR QUÉ este código fue escrito de cierta manera. Quizás haya un error numérico en los procesadores en los que se está ejecutando el código y siempre se redondea, pero los desarrolladores suelen lidiar con el código que se redondea. Por lo tanto, comentamos para asegurarnos de que un desarrollador que toca el código entienda por qué el contexto actual está haciendo algo que normalmente parece irrazonable, pero en realidad se escribió de esa manera a propósito.
Este tipo de código es lo que causa tantos problemas. Por lo general, no se comenta y luego es encontrado por un nuevo desarrollador y 'arreglado'. Rompiendo así todo. Incluso entonces, los comentarios solo están ahí para explicar el POR QUÉ no evitar que algo se rompa.
No se puede confiar en los comentarios
Los comentarios son en última instancia inútiles y no se puede confiar. Los comentarios normalmente no cambian la forma en que se ejecutan los programas. Y si lo hacen, entonces su proceso está causando más problemas de lo que debería. Los comentarios son ideas posteriores y nunca pueden ser otra cosa que no sea. El código es todo lo que importa, ya que es todo lo que procesa la computadora.
Esto puede sonar tonto, pero tengan paciencia conmigo. ¿Cuál de estas dos líneas realmente importa?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
En este ejemplo, todo lo que importa es que no tenemos idea de qué es 'n', no hay ninguna verificación de que n sea 0 E incluso si lo hubiera, nada impide que un desarrollador ponga n = 0
DESPUÉS de la verificación de 0. Por lo tanto, el comentario es inútil y nada automatizado puede captar esto. Ningún estándar puede atrapar esto. El comentario, aunque bonito (para algunos) no tiene relación con el resultado del producto.
Desarrollo guiado por pruebas
¿Qué tiene un resultado en el producto? Las industrias en las que el código que se está escribiendo literalmente puede salvar o matar a alguien deben ser rigurosamente controladas. Esto se hace a través de revisiones de código, revisiones de código, pruebas, pruebas, revisiones de código, pruebas unitarias, pruebas de integración, ensayos, estadificación, meses de prueba, revisiones de código y ensayos de una sola persona, puesta en escena, revisiones de código, prueba, y luego tal vez finalmente entrando en producción. Los comentarios no tienen nada que ver con nada de esto.
Prefiero codificar que NO tenía comentarios, tenía una especificación, tenía pruebas unitarias que verificaban la especificación, estudios de los resultados de ejecutar el código en el dispositivo de producción, luego un código bien documentado que nunca había sido probado, ni tenía nada para comparar el código en contra.
La documentación es agradable cuando intenta averiguar POR QUÉ alguien hizo algo de cierta manera, sin embargo, a través de los años he descubierto que la documentación se usa típicamente para explicar por qué se hizo algo "inteligente", cuando realmente no era necesario ser escrito de esa manera.
Conclusión
Si trabaja en una empresa que REQUIERE que se comente cada línea, GARANTIZARÉ que al menos dos de los ingenieros de software del proyecto ya han escrito un programa de documentación automática en Perl, Lisp o Python que determina la idea general de lo que está haciendo la línea. , luego agrega un comentario sobre esa línea. Debido a que esto es posible, significa que los comentarios son inútiles. Encuentre a los ingenieros que han escrito estos scripts para documentar automáticamente el código y úselos como evidencia de por qué el "Comentario en cada línea" está desperdiciando tiempo, sin proporcionar valor y potencialmente perjudicando.
Por otro lado, estaba ayudando a un amigo cercano con una tarea de programación. Su maestro había establecido el requisito de que cada línea debía ser documentada. Entonces puedo ver de dónde vendría este proceso de pensamiento. Pregúntese, ¿qué está tratando de hacer? ¿Es esto lo correcto? Entonces pregúntate a ti mismo; ¿Hay alguna forma de 'jugar' el sistema con este proceso? Si lo hay, ¿está realmente agregando algún valor? Uno no puede escribir automáticamente pruebas unitarias que prueben que el código cumple con una determinada especificación, y si pudieran, eso no sería malo.
Si un dispositivo tiene que funcionar bajo ciertas condiciones porque estará dentro de un ser humano, la única forma de asegurarse de que no los matará es años de pruebas, revisión por pares, ensayos y NUNCA vuelva a cambiar el código. Esta es la razón por la cual la NASA todavía está / estaba usando hardware y software tan antiguo. Cuando se trata de la vida o la muerte, no solo "hace un pequeño cambio y lo registra".
Los comentarios no tienen nada que ver con salvar vidas. Los comentarios son para humanos, los humanos cometen errores, incluso cuando escriben comentarios. No confíes en los humanos. Ergo, no confíes en los comentarios. Los comentarios no son su solución.