Quais são as boas técnicas para manter seu lugar no código?

21

Entendo o uso de indicadores para lembrar um único ponto no seu código. No entanto, como acompanhar o fluxo do código que estão investigando? Por exemplo: vários favoritos e a ordem em que foram feitos.

Exemplo:

  1. Relatório de erro: "Colisões não estão funcionando nos cantos das paredes"

    1. A reprodução do bug atribui a certos polígonos que não colidem.
    2. O código de colisão foi gravado por um desenvolvedor indisponível. Portanto, a investigação é algo como:

Esquema de um fluxo

Durante a investigação, especialmente ao revisar itens que não são de código, como o Google, pode-se esperar que razoavelmente perca seu lugar no código ( eu já examinei esse caminho de código? Ou Qual caminho de código eu estava investigando? Existem vários que levam para esta função , etc). O mesmo vale para interrupções inevitáveis ​​(Chefe: preciso de [Relatório Inútil Longo] AGORA , etc)

Seria útil ter um recurso de técnicas ou ferramentas para fornecer uma maneira de acompanhar o lugar da pessoa no código.


Edit : O exemplo acima pretende ser uma ilustração em potencial, não um problema real que precise ser respondido.

Outra maneira de formular esta pergunta é:

Ao aprender um novo sistema, como você controla onde você está aprendendo o código? Não se trata de entender por que o código faz o que faz (que é para que os comentários devem ser), mas como ele faz (que é aprendido apenas através da leitura do código, não comentários).

Jess Telford
fonte

Respostas:

14

A interface de bolhas tenta resolver esse problema, mostrando vários bits de código de uma só vez. Você está preso no seu navegador para pesquisar no Google. Parece incrível, mas eu não tentei. Esta versão da ideia é uma implementação do Visual Studio para o Visual Studio Ultimate.

psr
fonte
+1, pois é uma solução prática e pronta para o problema. (É também um pouco demais!)
Jess Telford
Uma das coisas que eu inventei na minha cabeça de anos atrás, apenas para descobrir que existe já :( 1
phresnel
parece semelhante ao que você pode fazer no Squeak e em outros Smalltalks, onde você abre novas janelas de navegação de código e pode navegar para quaisquer métodos / classes que desejar neles.
Rudolf Olah
bastante incrível ... Eu criei um pequeno aplicativo de brinquedo que fornece uma visualização da sua navegação na Internet de maneira semelhante (ao clicar nos links, um novo nó seria adicionado e vinculado à origem). Nunca pensei em aplicar isso à visualização de código.
Michael Brown
12

Além de todas as excelentes tecnologias mencionadas, descobri que o pedaço de papel A3 à moda antiga é uma excelente ajuda para esses problemas. Anote suas idéias e organize-as no estilo mindmap.

thiton
fonte
Sim Sim. Melhor resposta de longe.
Patrick Hughes
10

Tanto o editor quanto o depurador podem pular para a definição de uma função e ter um botão "voltar" multinível como um navegador da web para retornar onde eu estava antes. Isso geralmente é suficiente para acompanhar um fluxo de depuração complexo. Também ajuda a ter um controle de origem que permite comprometer muito . Isso me dá uma mensagem de confirmação explicando por que estou tentando algo, bem como uma maneira rápida de recuperar a alteração, se não funcionar. Fora isso, um quadro branco simples para listar os leads potenciais e explorados preenche todas as lacunas restantes para mim.

Karl Bielefeldt
fonte
1
Muito prático. Eu não tinha pensado em usar o controle de origem dessa maneira.
Jess Telford
Qual editor e depurador?
John Gaines Jr.
Vim e o depurador MULTI de Green Hill.
Karl Bielefeldt
No Visual Studio, é CTRL + - para voltar e CTRL + = para avançar.
VitalyB
O Eclipse pode mostrar a definição do símbolo atual sob o cursor em um painel separado.
3

Várias maneiras que eu acompanho:

  • Escreva . Você tem uma reunião em dois minutos? Anote o que estava fazendo e onde. Sempre tenho papel e caneta ao meu lado para escrever as coisas enquanto codifico.
  • Marcadores . Tenho 10 marcadores numerados que posso definir.
  • Stacktrace . Você pode visualizar facilmente toda a hierarquia de código pela qual passou. Meu editor também me permite copiar o rastreamento da pilha e salvá-lo. Na próxima vez que abro meu editor, posso carregar o stacktrace para uma navegação rápida.
  • Navegação do editor . Vá para o membro base, vá para o herdeiro, encontre usos, vá para a referência, ...
Carra
fonte
1

Eu uso a solução simples - nunca feche nada até terminar a tarefa. Isso significa que geralmente uma das 50 janelas ou guias abertas tem algo que me lembrará o que eu estava pensando quando voltar a fazê-lo.

Tom Clarkson
fonte
O problema dessa abordagem tende a ser como você rastreia vários ramos simultâneos de pensamento / pesquisa?
Jess Telford
1
Não acho que seja um problema - eles são todos abertos da mesma maneira, e não importa muito para qual ramo eu retorne. Isso funciona melhor para o navegador da Web do que o IDE, mas pode ser apenas porque minha base de código atual não é realmente organizada conceitualmente.
Tom Clarkson
1

Obtenha uma ferramenta / IDE real para desenvolvedores, o que você quiser. Vi, Emacs, Eclipse ou qualquer outra coisa (a escolha é tão grande quanto as discussões sobre qual é o melhor, mas isso é outro problema) e aprenda a usá-lo adequadamente . Não, como muitos fazem, use-o como o Bloco de notas com destaque de sintaxe. Aprenda a usar teclas de atalho, e não confie no mouse para ações comuns (é muito lento). Uma tela grande (no mínimo 1920 x 1200) é benéfica.

Minha ferramenta de desenvolvimento nomeou (nomes mais lentos, mas úteis, tornam-nos persistentes) e marcadores sem nome (Rápido para inserir e excluir), navegação e consulta direta e anterior e pesquisa de referências em uma única anotação, tarefas e desenvolvedores (pessoal e de grupo) anexada a um linha específica do código fonte. Ele faz todos os idiomas sob o sol, sem precisar instalar outro plug-in.

Trabalho em uma base de código composta por uma dúzia ou mais de 1 milhão de módulos SLOC, usando meia dúzia de idiomas. Obviamente, não trabalho com todos eles de uma vez, mas concentro-me em pequenas partes de um ou dois, mas posso navegar com algumas ações para qualquer ponto do código que seja relevante para o que estou fazendo.

mattnz
fonte
Concordo que um IDE adequado é o melhor. Eu uso ótimas marcas e recursos de salto de marca do vim. No entanto, ambos têm limitações: as marcas são locais de buffer e os históricos de tags são lineares. Para situações complexas, isso ainda não é suficiente (portanto, fazendo esta pergunta).
Jess Telford
1
Sou amador, mas já vi o que pode ser feito nas mãos de um usuário avançado que está preparado para escrever alguns scripts curtos, gastar algum tempo para aprender a realmente usar o VIM ou mudar para uma ferramenta que possui recursos configurados no de uma maneira que funciona para você e passou um tempo aprendendo isso. Esse é meu argumento. Aprenda suas ferramentas. Um bom comerciante não culpa suas ferramentas, mas um bom programador.
mattnz
Acordado. Sou iniciante no vim (posso usar sem pensar a maior parte do tempo, mas mal arranhei a superfície), por isso tenho certeza de que há coisas que não sei. Mesmo assim, não acredito que seja possível fazer algo como a resposta do psr no vi (m) (pelo menos, não da minha pesquisa).
Jess Telford
@ Jess: as marcas não são necessariamente buffer local. Marcas usando letras maiúsculas são globais.
Dave Kirby
@DaveKirby Awesome - Adoro aprender coisas novas sobre o vim: D
Jess Telford
1

Com o Visual Studio, em uma sessão de depuração, você pode usar a janela 'Pilha de chamadas' (você pode habilitá-la no Debug / Windows / Call Stackou com o atalho Ctrl+Alt+c) para rastrear o fluxo de código.

Jim G.
fonte
1
Como na maioria dos depuradores. A questão é mais parecida com a navegação manual do código, incluindo pesquisas fora da sua base de códigos.
Jess Telford
1

Estou surpreso que ninguém tenha mencionado as muitas ferramentas que podem criar gráficos de chamada. Eu achei o doxygen uma grande ajuda. Você nem precisa se comprometer a usar doxygen em todo o seu programa, basta marcar as funções que deseja rastrear.

Charles E. Grant
fonte
0

Eu uso o modo org para o emacs, que é uma ferramenta de super-estrutura de tópicos. Com ele, posso escrever um esboço que imita a pilha de chamadas do código e incluir links diretos para o próprio código fonte (via org-store-link). Você pode incluir texto explicativo, links para páginas da Web etc. (por exemplo, quando você pesquisa no Google por números mágicos)

Não é perfeito. Por exemplo, a estrutura de estrutura de tópicos não tem noção de voltar um nível acima, por isso é difícil rastrear um caminho de execução, em vez de apenas uma pilha. Mas é a próxima melhor coisa nos diagramas em papel que eu encontrei.

Mike B
fonte