É normal / aceitável anotar notas, pensamentos, algoritmos, decisões durante a codificação e manutenção? [fechadas]


22

Algumas pessoas têm esse problema que não conseguem pensar sem palavras. E anotar seus pensamentos e decisões é a maneira mais eficaz de proceder.

Então - é normal e aceitável anotar meus pensamentos e decisões em algum arquivo do Notepad ++ durante a codificação?

Às vezes, deve ser aceitável, por exemplo, ao recriar documentação técnica ou raciocinar sobre algoritmos mais complexos, mas às vezes pode ser estranho, por exemplo, quando estou pensando em opções de design e tentando julgar.

O impacto dessa prática na produtividade não é claro. Por um lado, o raciocínio com palavras interiores pode ser mais rápido do que com as palavras escritas. Do outro lado - problemas mais complexos requerem escrita. Além disso, se alguém está preso a mais opções de design, o sentimento é melhor quando a decisão é escrita, aumentando a moral.


5
Eu costumo fazer isso também, e geralmente me arrependo quando não o faço. É realmente útil ter algo para se lembrar mais tarde, para lembrar por que você fez algo de uma certa maneira, ou para poder tomar uma decisão mais tarde, quando não estiver com a visão do túnel. Quando esqueço de anotar algo, geralmente esqueço o motivo e passo mais tempo refazendo meus passos.
PseudoPsyche

21
Eu sinto que estamos perdendo parte do contexto? Essa observação foi feita em torno de uma reclamação sobre eficiência? Freqüentemente, as críticas vêm com sugestões de causa raiz que podem ou não ser relevantes.
Jim Corrida

9
"Comentários e documentação" precisam ser escritos no código fonte e mantidos. Seus pensamentos sobre a consideração de opções de design podem ser escritos, mas geralmente não mantidos, ou seja, coisas que raramente o ajudarão mais tarde (você pode fazer anotações sobre os resultados desse processo de pensamento, se não estiver claro no próprio código-fonte, mas não foi isso que você perguntou). Se você preferir um formulário eletrônico, um lápis e papel ou se puder fazer isso tudo em sua mente, é com você, ninguém mais, mas você pode dizer o que funciona melhor para você.
Doc Brown

4
... PS: Normalmente, prefiro lápis e papel, ou um quadro branco para essas coisas, e acho que não me tornaria um programador melhor se tentasse fazer isso tudo na minha cabeça, pelo contrário.
Doc Brown

7
Por que não seria aceitável? Aceitável para quem?
Paul D. Waite

Respostas:


62

Não é apenas normal, é uma boa ideia.

Há uma citação famosa

"Dê-me seis horas para cortar uma árvore e passarei os quatro primeiros afiando o machado".

Dedique um tempo para organizar seus pensamentos e planejar seu trabalho antes que a codificação seja um tempo bem gasto. Colocar esses pensamentos no papel dará a você tempo para refletir sobre seus planos, criticá-los e organizá-los de maneiras que seriam muito difíceis se feitas apenas "em sua cabeça".


8
É uma boa citação, embora eu remova a atribuição errônea. quoteinvestigator.com/tag/abraham-lincoln
Paul Draper

1
Certamente uma afirmação verdadeira e uma boa citação, mas, para meu entendimento, a questão tem um foco diferente. Até onde eu entendo, o OP não tem dúvidas sobre a importância do planejamento antecipado. Ele está perguntando se é mais eficiente escrever esses pensamentos / planejar, ou apenas mantê-los todos apenas em sua cabeça.
Doc Brown

2
Contar uma hora de nitidez é mais que suficiente. Essa tarefa deveria ter sido estimada em 3 horas no máximo, mas a folga foi gasta em excesso de preparação inútil. Qual era a moral de novo? ;-)
Steve Jessop

26

Sim, isso é perfeitamente aceitável e normal.

Documentar seu processo de tomada de decisão é frequentemente valioso ao revisitar o código, para ajudar a determinar por que o código foi escrito de uma certa maneira.

Essas notas podem ser incluídas diretamente no código como comentários, se forem curtas o suficiente. Comentários estendidos geralmente são mantidos como parte de um documento de design técnico externo.


4
Eu recomendaria fortemente não incluir notas sobre considerar opções de design e tentar julgar como comentários no código-fonte, eles nunca são "curtos o suficiente". Apenas os resultados finais desse processo de pensamento, mas isso é bem diferente do que o OP estava pedindo.
Doc Brown

3
Muitas vezes me encontro em discussões como "por que tomamos essa decisão". É incrivelmente útil voltar às minhas anotações diárias do projeto para fornecer contexto, incluindo as alternativas que discutimos. Acho que estou em boa companhia: de acordo com The Everything Store, Jeff Bezos faz o mesmo.
precisa saber é o seguinte

8
@DocBrown - às vezes é uma boa idéia para incluir razões por que você fez não usam outros possíveis métodos / algoritmos para que um desenvolvedor futuro não vai tentar substituir o que você fez
HorusKol

1
@HorusKol: claro, em alguns casos raros, isso é trivial senso comum. Mas isso é bem diferente de "documentar o processo de tomada de decisão" .
Doc Brown

1
@DocBrown certo, acho que ninguém quer páginas de anotações em seu código-fonte. :)
mcknz

20

É uma ideia muito boa. Até que se torne uma maneira de procrastinar.

A chave é o equilíbrio. Acho que sou mais produtivo se não me encaixar, mas capturar idéias à medida que elas surgirem.

Se eu estiver trabalhando em um nível baixo e surgir uma idéia de alto nível, basta anotá-la e voltar mais tarde.

Planejar o trabalho é uma boa idéia, mas, a menos que você precise se comunicar ou apresentar diante do público, as melhores ferramentas são caneta e guardanapo. Capture a ideia. Não perca tempo fazendo bonito.


Markdown é outra ótima maneira de fazer essas anotações. Mantém as mãos no teclado, para que haja uma interrupção mínima no processo de pensamento.
precisa

1
Quer abrir um editor ou pegar uma caneta e um guardanapo é a melhor alternativa, depende inteiramente de suas habilidades pessoais de digitação por toque e escrita à mão. Para mim, a melhor solução é claramente o editor.
precisa saber é

9

Em qualquer situação profissional, não é apenas "normal e aceitável", é obrigatório. O ciclo de desenvolvimento típico consiste em duas fases da documentação antes que qualquer codificação comece:

  1. Documento de Requisitos Funcionais: normalmente escrito por analistas de negócios, especificando a funcionalidade a ser implementada.

  2. Documento de projeto detalhado: que é basicamente o que você está falando, apenas mais formal, especificando a decomposição funcional (fatoração) do sistema, algoritmos, etc. Alguns dos meus (muito) antigos estão online, por exemplo, isso .

Para documentação menos formal, eu 110% concorda com as observações anteriores sobre comentários embutidos. Esse é o único caminho a percorrer; de um jeito ou de outro, tudo o mais acaba se perdendo. Mas comentar em linha, puro e atencioso, é uma habilidade de codificação separada, desenvolvida através do esforço e da prática como qualquer outra habilidade. Você pode ver algumas das minhas coisas (muito) antigas em, por exemplo, isso . Esse estilo pode ou não apelar para você. Eu recomendo encontrar primeiro um código bem comentado com o estilo que você gosta e emular esse código no seu próprio código. Depois de um tempo, adapte-o como achar melhor.


4

Um ótimo lugar para colocar esse tipo de informação está diretamente na mensagem de confirmação do seu sistema de controle de versão (SVN, git, etc). Dessa forma, você pode ver as alterações e o raciocínio delas no mesmo local.


1
Também os torna pesquisáveis. Você pode pesquisar mensagens de confirmação na linha de comando git e sourcetree, por exemplo. Se você apenas usar o bloco de notas, provavelmente os arquivos nunca serão abertos novamente e são difíceis de pesquisar sem conhecer uma extensa lista e escrever um script que pesquisa todos os locais relevantes.
que você

Eu tento fazer isso nas minhas declarações de confirmação, bem como na solicitação de bug ou recurso com links para a confirmação. Também datado de comentários embutidos no código, com os motivos pelos quais alterei o código. Isso ajuda drasticamente em nossa base de códigos antiga e barulhenta, onde os comentários são amplamente desconhecidos.
delliottg

Não, isso é outra coisa. As mensagens de confirmação devem descrever o que foi feito, não o porquê. O motivo está nos comentários dos códigos de documentação, documentação que acompanha e resolução do rastreador de problemas. Você não pode colocar cinco páginas de anotações e trabalhos de design em uma mensagem de confirmação, nem deve desejar.
Lightness Races com Monica

É ótimo colocá-lo no sistema de controle de versão. Um lugar melhor é um arquivo de texto sem formatação dentro dele. Essas são mais fáceis de usar do que confirmar mensagens.
Thorbjørn Ravn Andersen

2

Além das outras boas respostas, acrescentarei que muitas vezes escrevo meus pensamentos sobre o que estou tentando fazer.

Ser muito explícito sobre a articulação do que estou tentando fazer me ajuda a perceber pressupostos, suposições e / ou requisitos que não necessariamente se aplicam.

Isso então sugere alternativas, as quais eu posso refletir melhor cada uma delas; essa escrita ajudando a salvar meu lugar se eu pensar em outra coisa.

Faço anotações rápidas para explorar a respiração e a profundidade, para que funcione recursivamente, ajudando-me a elaborar, navegar e avaliar uma árvore de soluções, fazendo backup, explorando, descobrindo, percebendo e decidindo.


1

Anotar tudo o que pode economizar tempo para você / (novos) membros da equipe é um tempo bem gasto. Apenas certifique-se de que é algo que alguém possa precisar mais tarde e não pense demais, a menos que seja um projeto de longo prazo.

Também não deve demorar algum tempo. Se você passa um tempo pensando, pode escrever seus pensamentos de 1 para 1 (contanto que eles sejam úteis para alguém).

O verdadeiro problema pode estar exagerando no que você escreve. Só porque você está escrevendo não significa que você precisa aderir a algum formato já existente ou precisa fazer todo o caminho para criar uma documentação completa.

Se você optar por não escrever nada e apenas escrever notas não-formais em um bloco de notas, basta escrever notas não-formais.


1

Você diz: "Algumas pessoas têm esse problema que não conseguem pensar sem palavras. E escrever seus pensamentos e decisões é a maneira mais eficaz de proceder".

Se anotar seus pensamentos e decisões é a maneira mais eficaz de proceder, por que não seria normal e aceitável proceder da maneira mais eficaz? Você faz o que funciona melhor para você. Pode não ser o que funciona melhor para outra pessoa. Nesse caso, você não deixa que outra pessoa lhe diga o que é melhor para você e não diz o que é melhor para ela. Todo mundo faz o que é melhor para eles.


1

Os humanos só podem segurar cerca de sete "coisas" na cabeça de uma só vez. Essa é a razão dos números de telefone de sete dígitos. Para que os programadores trabalhem com eficiência, eles precisam encontrar algum tipo de sistema para descarregar as coisas da memória e recuperá-las rapidamente mais tarde, conforme necessário. Suas anotações são uma maneira óbvia e direta, mas todos que trabalham em algo moderadamente complexo precisam fazê-lo de alguma forma . Quando você emparelha um programa com alguém, procure um método.

Uma maneira comum é o desenvolvimento orientado a testes. Nesta metodologia, você escreve um teste com falha, escreve apenas o código suficiente para obter a aprovação do teste e refatora o código para torná-lo mais agradável, mantendo todos os testes existentes aprovados. Essa metodologia mantém todas as suas "notas" codificadas dentro dos testes. As pessoas podem trabalhar muito rapidamente dessa maneira sem parecer fazer anotações, porque estão focadas apenas no próximo teste.

Outra maneira comum é simplesmente escrever suas anotações em seu código como comentários ou stubs de pseudocódigo e substituí-lo gradualmente pela coisa real. É assim que eu costumo escrever algoritmos. Meu primeiro rascunho é apenas uma função principal do pseudocódigo e, gradualmente, ele se preenche em níveis cada vez mais profundos de abstração.

Não se sinta mal ao usar qualquer método que funcione para você, mas tente perceber quais métodos seus colegas "eficientes" estão usando. Eles têm as mesmas limitações humanas que você.


1
TDD é um exercício de anotações? Acho que não.
Robert Harvey
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.