¿Los comentarios se consideran una forma de documentación?

11

Cuando escribo pequeños scripts para mí, apilo mi código con comentarios (a veces comento más de lo que codifico). Muchas personas con las que hablo dicen que debería documentar estos guiones, aunque sean personales, de modo que si alguna vez los vendo, estaría listo. ¿Pero no son los comentarios una forma de documentación?

¿No sería esto?

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

ser considerado documentación, especialmente si un desarrollador está usando mi código? ¿O se considera que la documentación está fuera del código mismo?

Dinámica
fuente
11
Si está utilizando un sistema de generación de documentos como JavaDocs o Doxygen, los comentarios son literalmente documentación.
Gort the Robot
55
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ). Documente su código a su satisfacción. Deje que el cliente (si lo hay) le pague para escribir la documentación a su entera satisfacción. No se preocupe por la cantidad de personas con las que habla (a menos que le paguen).
emory
1
De sus 2 comentarios, el segundo es inútil, ¿por qué no reemplazar $ foo con barra? Si esto no es cierto, entonces el comentario es incorrecto. El primer comentario está mal. Es una tarea.
ctrl-alt-delor
2
Cuando quiera agregar un comentario, cambie su código para que sea tan claro que no necesite comentario. Todo es documentación, el código es documentación, los comentarios generalmente no tienen información [adicional] o están equivocados. Documente la intención del qué (los contratos de código pueden ayudar con esto) y el por qué. Mantenga la documentación cerca del código, use comentarios. Documentación sobre documentos: comentarios sobre documentos, código claro sobre comentarios.
ctrl-alt-delor
2
¿Es YANGNI "no lo vas a necesitar"
Chris S

Respuestas:

27

Los comentarios son definitivamente documentación. Para la mayoría de los proyectos, los comentarios son (desafortunadamente) la forma principal (si no solo) de documentación del proyecto. Por esta razón, es muy importante hacerlo bien. Debe asegurarse de que esta documentación se mantenga precisa a pesar de los cambios en el código. Este es un problema común con los comentarios. Los desarrolladores a menudo los "desconectan" cuando trabajan en un código familiar, por lo que se olvidan de actualizar los comentarios para reflejar el código. Esto puede crear comentarios desactualizados y engañosos.

Mucha gente sugiere hacer que el código se documente automáticamente. Esto significa que en lugar de comentarios, reestructura su código para eliminar la necesidad de ellos. Esto puede eliminar la mayoría de los comentarios de "qué" y "cómo", pero en realidad no ayuda con los comentarios de "por qué". Si bien esto podría funcionar de manera efectiva para deshacerse de la mayoría de los comentarios, todavía hay muchas veces en que escribir un comentario es la forma más simple y eficiente de documentar un fragmento de código.

Oleksi
fuente
3
"Para la mayoría de los proyectos, los comentarios son la forma principal (si no solo) de documentación del proyecto". - Es tentador hacer un voto negativo por esto, pero desafortunadamente debe admitirse como una declaración verdadera. Sin embargo, espero que no sea su intención afirmar que así es como deberían ser las cosas.
Edward Strange
2
Realmente no estoy de acuerdo con esto, ya que la única documentación confiable que tiene es el código fuente en sí. Tanto los comentarios como la "documentación" deben mantenerse con el código, lo que rara vez ocurre. ¡Entonces la única fuente confiable de documentación es su código!
Martiert
3
@martiert Solía ​​sentir lo mismo, pero descubrí que esto realmente no funciona tan bien en la práctica. Todos esos comentarios de "por qué" son mucho más claros como comentarios que tratar de extraer el conocimiento de "por qué" del código. Ciertamente, el código de autodocumentación puede (y debe) usarse para eliminar la mayoría de los comentarios, pero a veces un comentario es la forma más simple, clara y eficiente de documentar algo.
Oleksi
3
@martiert El problema con el código autodocumentado es que no permite referencias a documentación en otros lugares. Algunos de los mejores comentarios en código que he visto han sido referencias a artículos académicos que explican los detalles del algoritmo utilizado o la selección de constantes mágicas. Ninguna cantidad de autodocumentación ayudará a evitar el hecho de que parte de la documentación crítica no sea obvia. El "por qué" a menudo cae en esta categoría, y a veces el "cómo" también.
Donal Fellows
3
También tenga en cuenta que los comentarios, en muchos idiomas, se utilizan para generar la documentación real ... por lo que a menudo son lo mismo. Vea el MSDN como ejemplo.
Steven Evers
12

Son una forma de documentación, pero recuerde que la documentación está en el ojo del espectador ...

  • Para algunos, el código autodocumentado es suficiente. Pero eso supone un nivel de detalle técnico como el cliente. Debemos tener cuidado al pensar que esto es suficiente, porque nuestro ego puede decirnos "Es obvio lo que está haciendo este código" pero el tiempo puede demostrar lo contrario. También supone que conoce de antemano las habilidades del lector.

  • Para aquellos que buscan el código fuente pero con menos experiencia técnica, los comentarios podrían estar bien. Pero eso supone que alguien está mirando el código fuente.

  • Si es técnico, pero le falta tiempo para leer todo el código fuente, un manual técnico podría ser lo que se requiere.

  • Si el usuario carece de habilidades técnicas, pero solo necesita saber qué está sucediendo, la documentación del usuario es lo que se necesita.

Entonces, la verdadera pregunta es ¿quién es su cliente? Si es así, entonces es suficiente documentar el código o los comentarios. Si es para otra persona, es posible que desee ampliar la forma en que documenta.

MathAttack
fuente
17
El código autodocumentado es una mentira.
Yannis
1
@YannisRizos Más como un objetivo inalcanzable que una mentira absoluta.
Ptharien's Flame
2
@ YannisRizos: puede que tengas razón, pero el código que necesita muchos comentarios es casi siempre un código muy malo y podría escribirse casi de una manera que necesite menos comentarios.
Doc Brown
99
@DocBrown depende. He visto a personas documentando para bucles y he visto a personas que afirman que una lógica de negocios de 100 loc era autodocumentada. El hecho es que los comentarios excesivos no pueden dañar (excepto si son obsoletos / incorrectos), y si tengo que elegir entre comentarios excesivos y un código de auto documentación, siempre elegiré el primero. Por supuesto, preferiría comentarios equilibrados y al grano, como describe Oleksi .
Yannis
1
@MathAttack La mayoría de los IDE decentes pueden ocultar / doblar comentarios. Pero sí, a veces simplemente se interponen en el camino.
Yannis
3

Sí, los comentarios son una forma de documentación. Si son o no documentación útil para alguien que tiene que mantener o actualizar su código es una pregunta abierta.

Sé que lo dijiste como un ejemplo de usar y tirar, pero cosas como

print $foo; # this prints "bar"

no es útil solo agrega desorden visual. No documentar lo obvio.

Los comentarios de bloque en la cabecera de un método o definición de función que describen el propósito de la función o método (en términos de alto nivel ), entradas, salidas, valor de retorno (si lo hay), excepciones (si las hay), condiciones previas y condiciones posteriores son útiles, pero solo en la medida en que le digan a alguien cómo se supone que se debe usar la función o el método. No explican por qué existe la función.

Si alguien más necesita mantener su código, entonces necesita documentar los requisitos y el diseño en algún lugar, y eso generalmente no se hace en el código fuente en sí.

John Bode
fuente
3

Creo que apegarse al enfoque de Bob Martin sobre esto, desde Clean Code, generalmente resuelve el problema de si crees que estás comentando demasiado o no estás comentando y dejando de lado la documentación:

Somos autores Y una cosa sobre los autores es que tienen lectores. De hecho, los autores son responsables de comunicarse bien con sus lectores. La próxima vez que escriba una línea de código, recuerde que es un autor y escribe para lectores que juzgarán su esfuerzo.

... la proporción de tiempo dedicado a leer frente a escribir es muy superior a 10: 1. Estamos constantemente leyendo el código antiguo como parte del esfuerzo para escribir código nuevo.

En otras palabras, ¿su código se explica por sí mismo sin la documentación? No hay una regla establecida para ello (a menos que trabaje para alguien como Microsoft cuya documentación sea de acceso público), se debe principalmente a ayudar al futuro lector del código, que a menudo es usted.

Chris S
fuente
2

La documentación debe documentar el por qué no el cómo . El Cómo debería ser evidente en el código, es decir, a menos que sea un truco de optimización arcano u otra técnica específica del lenguaje que no ocurre comúnmente.

El por qué probablemente no debería estar en el código, debería estar en otro lugar, como el trabajo atrasado de un producto, que está vinculado para confirmar comentarios con identificadores de historias que se pueden buscar en un registro de cambios o nombre de sucursal.


fuente
1
Las cosas realmente difíciles deben estar en un artículo académico (o, ocasionalmente, en una patente).
Donal Fellows
2

Los comentarios son una forma de documentación. Una forma inferior, y una que sugiere que ha localizado un área de su código que se puede factorizar mejor.

Parece que comentas cosas compulsivamente. Tener otras opciones puede ser algo bueno. Puedo pensar en tres formas superiores de documentación:

1) Factoriza mejor tu código. En lugar de agregar un comentario, extraiga un método o función cuyo nombre sea el texto del comentario que estaba a punto de escribir. Entonces el código dice lo que tu comentario estaba por decir.

2) Pruebas. Esta es la forma de documentación que generalmente busco. Las pruebas unitarias y las pruebas de aceptación son documentación viva y pueden leerse fácilmente si se utilizan muchos métodos significativos para expresar la intención, como en el punto 1.

3) Para los scripts, la opción --help. Aquí es donde puedes volverte loco con el doc. Pegue ejemplos, anticipe lo que el usuario necesitaría.

En resumen, si se encuentra inclinado a escribir un comentario, verifique si hay una manera de comunicarse con el lector estructurando mejor el código. ¿O hay una prueba que comunica por qué ese código está ahí? Si todavía te sientes inclinado a comentarlo, admite la derrota y hazlo.

Mike Hogan
fuente