Os comentários são considerados uma forma de documentação?

11

Quando escrevo pequenos scripts para mim, empilhar meu código com comentários (às vezes comento mais do que codifico). Muitas pessoas com quem falo dizem que devo documentar esses scripts, mesmo que sejam pessoais, para que, se eu os vender, eu estaria pronto. Mas os comentários não são uma forma de documentação?

Não seria isso:

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

ser considerado documentação, especialmente se um desenvolvedor estiver usando meu código? Ou a documentação é considerada fora do próprio código?

Dinâmico
fonte
11
Se você estiver usando um sistema de geração de documentos como JavaDocs ou Doxygen, os comentários são literalmente documentação.
Gort the Robot
5
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ). Documente seu código para sua satisfação. Permita que o cliente (se houver algum) pague para que você escreva a documentação de forma satisfatória. Não se preocupe com o que muitas pessoas com quem você fala dizem (a menos que estejam pagando).
Emory
11
Dos seus 2 comentários, o 2º é inútil, por que não substituir $ foo por bar? Se isso não for verdade, o comentário está errado. O primeiro comentário está errado. É uma tarefa.
CTRL-ALT-DELOR
2
Sempre que você desejar adicionar um comentário, altere seu código para ser tão claro que ele não precise de comentários. Tudo é documentação, código é documentação, os comentários geralmente não têm informações [adicionais] ou estão errados. Documente a intenção, o quê (contratos de código podem ajudar com isso) e o porquê. Mantenha a documentação próxima ao código, use comentários. Documentação sobre documentos: Comentários sobre documentos, Limpar código sobre comentários.
CTRL-ALT-DELOR
2
É YANGNI "você não é não vai precisar dele"
Chris S

Respostas:

27

Comentários são definitivamente documentação. Para a maioria dos projetos, os comentários são (infelizmente) a forma principal (se não apenas) da documentação do projeto. Por esse motivo, é muito importante acertar. Você precisa garantir que esta documentação permaneça precisa, apesar das alterações no código. Este é um problema comum com comentários. Os desenvolvedores costumam "ajustá-los" quando estão trabalhando em um código familiar; portanto, esquecem de atualizar os comentários para refletir o código. Isso pode criar comentários desatualizados e enganosos.

Muitas pessoas sugerem tornar o código auto-documentado. Isso significa que, em vez de comentários, você reestrutura seu código para remover a necessidade deles. Isso pode se livrar da maioria dos comentários "o quê" e "como", mas não ajuda muito com os comentários "por que". Embora isso possa funcionar efetivamente para livrar-se da maioria dos comentários, ainda há muitas vezes em que escrever um comentário é a maneira mais simples e eficiente de documentar um pedaço de código.

Oleksi
fonte
3
"Para a maioria dos projetos, os comentários são a forma principal (se não apenas) da documentação do projeto." - tentador recusar a votação por isso, mas infelizmente deve ser admitida como uma afirmação verdadeira. Espero, no entanto, que não seja sua intenção afirmar que é assim que as coisas devem ser.
Edward Strange
2
Eu realmente discordo disso, pois a única documentação confiável que você possui é o próprio código-fonte. Comentários e "documentação" precisam ser mantidos com o código, o que raramente acontece. Portanto, a única fonte confiável de documentação é o seu código!
28712 martiert #
3
@martiert Eu costumava me sentir da mesma maneira, mas achei que isso realmente não funciona tão bem na prática. Todos esses comentários "por que" são muito mais claros do que tentar extrair o conhecimento "por que" do código. Certamente, o código de auto-documentação pode (e deve) ser usado para remover a maioria dos comentários, mas às vezes um comentário é a maneira mais simples, clara e com maior eficiência de tempo para documentar algo.
Oleksi
3
@martiert O problema com o código de auto-documentação é que ele não permite referências à documentação em outros lugares. Alguns dos melhores comentários em código que eu já vi foram referências a trabalhos acadêmicos que explicavam os detalhes do algoritmo usado ou a seleção de constantes mágicas. Nenhuma quantidade de auto-documentação vai ajudar a evitar o fato de que alguma documentação crítica é simplesmente não-óbvia. O "porquê" geralmente se enquadra nessa categoria e, às vezes, o "como" também.
Donal Fellows
3
Observe também que os comentários, em muitos idiomas, são usados ​​para gerar a documentação real ... portanto, eles são geralmente o mesmo. Veja o MSDN como um exemplo.
Steven Evers
12

Eles são uma forma de documentação, mas lembre-se de que a documentação está nos olhos de quem vê ....

  • Para alguns, o código de auto-documentação é suficiente. Mas isso pressupõe um nível de detalhe técnico como cliente. Devemos ter cuidado ao pensar que isso é suficiente, porque nosso ego pode nos dizer "é óbvio o que esse código está fazendo", mas o tempo pode provar o contrário. Também pressupõe que você conheça com antecedência as habilidades do leitor.

  • Para aqueles que procuram o código fonte, mas com menos conhecimento técnico, os comentários podem ser aceitáveis. Mas isso pressupõe que alguém esteja olhando o código fonte.

  • Se você é técnico, mas não tem tempo para ler todo o código fonte, pode ser necessário um manual técnico .

  • Se o usuário não possui habilidades técnicas, mas precisa apenas saber o que está acontecendo, é necessária a documentação do usuário .

Então a verdadeira questão é quem é seu cliente? Se você é, o código ou os documentos auto-documentados são suficientes. Se for para outra pessoa, convém ampliar a forma como documenta.

MathAttack
fonte
17
O código de auto-documentação é uma mentira.
Yannis 14/05
11
@YannisRizos Mais como um objetivo inatingível do que uma mentira direta.
Chama de Ptharien
2
@YannisRizos: você pode estar certo, mas o código que precisa de muitos comentários é quase sempre muito ruim e pode ser quase sempre escrito de uma maneira que precisa de menos comentários.
Doc Brown
9
@DocBrown Depends. Vi pessoas documentando loops e vi pessoas alegando que um lócus de 100 locos de negócios era auto-documentado. O fato é que comentários excessivos não podem prejudicar (exceto se obsoletos / incorretos), e se eu tiver que escolher entre comentários excessivos e código de auto-documentação, sempre escolherei o primeiro. Obviamente, eu preferiria comentários equilibrados e direto ao ponto, como Oleksi descreve .
Yannis 14/05
11
@MathAttack A maioria dos IDEs decentes pode ocultar / dobrar comentários. Mas sim, às vezes eles apenas atrapalham.
Yannis 14/05
3

Sim, os comentários são uma forma de documentação. Se é ou não uma documentação útil para alguém que precisa manter ou atualizar seu código, é uma questão em aberto.

Eu sei que você quis dizer isso como um exemplo descartável, mas coisas como

print $foo; # this prints "bar"

não é útil; apenas adiciona confusão visual. Não documente o óbvio.

Bloqueie comentários no início de um método ou definição de função que descrevam a função ou a finalidade do método (em termos de alto nível ), entradas, saídas, valor de retorno (se houver), exceções (se houver), pré-condições e pós-condições são úteis, mas apenas na medida em que dizem a alguém como a função ou método deve ser usado. Eles não explicam por que a função existe.

Se alguém precisar manter seu código, você precisará documentar os requisitos e o design em algum lugar, o que normalmente não é feito no próprio código-fonte.

John Bode
fonte
3

Acho que seguir a abordagem de Bob Martin, a partir do Clean Code, geralmente resolve o problema de você pensar que está comentando demais ou comentando e deixando de fora a documentação:

Nós somos autores. E uma coisa sobre os autores é que eles têm leitores. De fato, os autores são responsáveis ​​por se comunicar bem com seus leitores. Na próxima vez que escrever uma linha de código, lembre-se de que você é um autor, escrevendo para leitores que julgarão seu esforço.

... a proporção de tempo gasto lendo e escrevendo é bem superior a 10: 1. Estamos constantemente lendo código antigo como parte do esforço para escrever um novo código.

Em outras palavras, seu código é auto-explicativo sem a documentação? Não existe uma regra definida para isso (a menos que você trabalhe para alguém como a Microsoft, cuja documentação é acessível ao público), é principalmente ajudar o futuro leitor do código que geralmente é você.

Chris S
fonte
2

A documentação deve documentar o Por que não o Como . O Como deve ser evidente no código, a menos que seja algum truque de otimização arcano ou outra técnica específica de linguagem que não ocorra normalmente.

O Por que provavelmente não deve estar no código, deve estar em outro lugar, como um backlog do produto, vinculado a confirmar comentários com os IDs da história que podem ser pesquisados ​​em um log de alterações ou nome de filial.


fonte
11
Coisas realmente complicadas devem estar em um artigo acadêmico (ou, ocasionalmente, em patente).
Donal Fellows
2

Comentários são uma forma de documentação. Uma forma inferior e que sugere que você localizou uma área do seu código que pode ser melhor fatorada.

Parece que você comenta as coisas compulsivamente. Ter outras opções pode ser uma coisa boa. Posso pensar em três formas superiores de documentação:

1) Fatore melhor seu código. Em vez de adicionar um comentário, extraia um método ou função cujo nome seja o texto do comentário que você estava prestes a escrever. Portanto, o código diz o que seu comentário estava prestes a dizer.

2) testes. Essa é a forma de documentação que eu costumo pesquisar. Testes de unidade e testes de aceitação são documentação viva e podem ser lidos facilmente se vários métodos significativos forem usados ​​para expressar intenção, como no ponto 1.

3) Para scripts, a opção --help. É aqui que você pode enlouquecer no documento. Dê exemplos, preveja o que o usuário precisaria.

Em resumo, se você se inclinar a comentar, verifique se há uma maneira de se comunicar com o leitor estruturando melhor o código. Ou existe um teste que comunica por que esse código existe? Se você ainda se sente inclinado a comentar, admita a derrota e faça-o.

Mike Hogan
fonte