Anotar código fonte com diagramas como comentários


14

Eu escrevo muito código (principalmente c ++ e javascript) que aborda geometria computacional e gráficos e esses tipos de tópicos, então descobri que os diagramas visuais têm sido uma parte indispensável do processo de solução de problemas.

Eu determinei agora que "oh, não seria fantástico se de alguma forma eu pudesse anexar um diagrama desenhado a mão a um pedaço de código como um comentário", e isso me permitisse voltar para algo em que trabalhei, dias, semanas, meses antes e muito mais rapidamente re-grok meus algoritmos.

Como aprendiz visual, sinto que isso tem o potencial de melhorar minha produtividade com quase todos os tipos de programação, pois diagramas simples podem ajudar a entender e raciocinar sobre qualquer tipo de estrutura de dados não trivial. Gráficos, por exemplo. Durante as aulas de teoria dos grafos na universidade, eu só consegui compreender verdadeiramente as relações gráficas das quais eu realmente podia desenhar representações diagramáticas.

Então...

Nenhum IDE que eu saiba permite salvar uma imagem como comentário no código.

Meu pensamento era que eu ou outra pessoa poderia criar uma ferramenta razoavelmente fácil de usar que possa converter uma imagem em uma string binária base64 que eu possa inserir no meu código.

Se o processo de conversão / inserção puder ser simplificado o suficiente, permitiria uma conexão muito melhor entre o diagrama e o código real, portanto, não preciso mais pesquisar cronograficamente através dos meus cadernos. Ainda mais impressionante: plugins para os IDEs analisarem e exibirem a imagem automaticamente. Não há absolutamente nada de difícil nisso do ponto de vista teórico.

Meu palpite é que levaria algum tempo extra para eu realmente descobrir como estender meus IDEs favoritos e manter esses plug-ins, então eu ficaria totalmente feliz com um tipo de pós-processador de código que faria o mesmo analisando e renderização das imagens e mostrá-las lado a lado com o código, dentro de um navegador ou algo assim. Desde que eu sou um programador javascript por profissão.

O que as pessoas pensam? Alguém pagaria por isso? Eu gostaria. Mas talvez eu também indique que, independentemente de eu ou algum número significativo de meus colegas pagar por isso, a única maneira de obter sucesso seria com um lançamento de código aberto.


4
Uma alternativa: comente em um link para um arquivo de imagem local que é aberto no visualizador de imagens padrão.
Mão-E-Comida

Meu maior medo seria o abuso do sistema. Claro que começa com um diagrama significativo para um algoritmo complexo, mas quanto tempo até alguém carregar arquivos de especificação frágeis nos comentários da classe? Antes que você perceba, tudo o que é relacionado ao projeto + ao desenvolvedor é incluído nos comentários do código. Obviamente, qualquer sistema poderoso está aberto a abusos. Eu acho que a necessidade é um nicho, mas se você estiver nesse nicho, seria uma ferramenta muito útil.
Snixtor 19/11/12

@ Mão-E-Comida Nice! Um URL de arquivo em um comentário aparece como um link clicável no Xcode pronto para uso. Minha única reclamação é que parece impossível criar uma URL de arquivo de caminho relativo; portanto, o aspecto do link clicável é interrompido (com toda a probabilidade) ao mudar de sistema.
9788 Steven Universo Lu

Você pode estar interessado em ASCII não dirigida gráficos ou árvores
TehShrike

Eu faço javadoc que irá gerar HMTL, com imagens. Ou o SimpleDocBook, documentação separada, baseada em XML, pode / deve ser referenciada no código para regras de negócios. Isso fornece uma boa prosa e cobre o sistema fora da perspectiva de toda lógica de negócios, em vez de distribuir componentes e camadas de software (classes). Toda solicitação de alteração adiciona código com como referência ao livro de documentos + número da versão / ticket, e o livro de documentos possui uma lista de alterações + número do ticket. Isso funciona por causa de sua cobertura completa. Não tenho certeza de como isso se adequaria à sua situação.
Joop Eggen

Respostas:


6

E o plug-in de inserção de imagem do Visual Studio ?

Se você estiver usando um IDE diferente e ele não suportar imagens incorporadas ou não tiver tempo para estendê-lo, que tal colocar um link para uma imagem nos comentários, enquanto a imagem residiria em algum lugar do repositório ?


Isso é bem legal. Eu uso o VS no trabalho para que eu possa experimentar isso! Obrigado. Salvar a imagem no repositório e, de alguma forma, vinculá-la é definitivamente uma maneira de conseguir isso, mas tenho certeza de que ainda há muito trabalho de contabilidade para implementar de maneira confiável. Eu sou um programador bastante preguiçoso.
9189 Steven Universo Lu

Salvando as imagens para o repo também trabalhar com a maioria dos métodos de repo-navegação (por exemplo, VCS repo de interface web)
Steven Lu

4

Se você não é um artista ASCII , pode usar o doxygen como ferramenta de documentação junto com o dot / graphviz integrado a ele.

Isso permite escrever uma descrição textual dos gráficos e renderizá-los na documentação.

Por exemplo, esta descrição:

digraph finite_state_machine {
    rankdir=LR;
    size="8,5"
    node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
    node [shape = circle];
    LR_0 -> LR_2 [ label = "SS(B)" ];
    LR_0 -> LR_1 [ label = "SS(S)" ];
    LR_1 -> LR_3 [ label = "S($end)" ];
    LR_2 -> LR_6 [ label = "SS(b)" ];
    LR_2 -> LR_5 [ label = "SS(a)" ];
    LR_2 -> LR_4 [ label = "S(A)" ];
    LR_5 -> LR_7 [ label = "S(b)" ];
    LR_5 -> LR_5 [ label = "S(a)" ];
    LR_6 -> LR_6 [ label = "S(b)" ];
    LR_6 -> LR_5 [ label = "S(a)" ];
    LR_7 -> LR_8 [ label = "S(b)" ];
    LR_7 -> LR_5 [ label = "S(a)" ];
    LR_8 -> LR_6 [ label = "S(b)" ];
    LR_8 -> LR_5 [ label = "S(a)" ];
}

renderiza como:

insira a descrição da imagem aqui


Isso é legal! Alguma ferramenta de suporte para ambientes Java? Não consigo ver nada parecido com suporte para isso neste Mojo, por exemplo: graphviz-maven-plugin.bryon.us/dot-mojo.html . Todos os outros também têm suporte para arquivos .dot.
precisa

2

Você pode experimentar o modo de artista do emacs. Seria arte ascii em vez de imagens em si, por isso pode ou não ser o que você está procurando. Em particular, se o seu IDE não executar fontes de largura fixa, não seria útil. Sendo texto simples, ele seria muito bem reproduzido com o controle de versão.

Aqui está um screencast do modo artista sendo usado, para que você possa ter uma ideia se estiver interessado ou não.

Para iniciar o modo artist no emacs, pressione Alt-x, digite artist-mode e pressione return. O botão do meio do mouse exibe o menu. As combinações de teclas para recortar e colar não são as normais do Windows por padrão, mas você pode ativar o modo CUA para alterar isso.


Uau, isso é impressionante. Na verdade, tenho alguns comentários em estilo de diagrama ASCII no meu código. É muito demorado. Eu vou querer usar ferramentas melhores, porque a tecnologia já está aqui. Às vezes, eu escrevia código no Vim, mas quais scripts de reconhecimento de código eu tinha ficado aquém em comparação aos IDEs reais. Mas obrigado por me mostrar essa técnica da velha escola!
Steven Lu

Visitando alguns anos depois e, desde então, colecionei alguns itens do Vim para ajudar na montagem rápida de diagramas de caixas. sejam caracteres de caixa ascii ou unicode, essa é uma maneira muito legal de embelezar algum código com comentários interessantes e úteis. No entanto, o Vim não vem com nada disso.
Steven Lu

1

O que as pessoas pensam? Alguém pagaria por isso? Eu gostaria.

ZOMG, eu me encaixo em uma categoria semelhante à sua e adoraria esse recurso diretamente no IDE.

Por enquanto, apenas costumo fazer muita "arte" ASCII como esta:

// ******************************************************
// *v3            |e5          v4*           |e6      v6*
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |p1        *
// *              |            e1*-----------~----------*
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *cen           |p0          v0*           |        v5*
// *--------------~--------------************************
// *e4            |              *           |e7        *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |p2        *
// *              |            e2*-----------~----------*
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *              |              *           |          *
// *v2            |e3          v1*           |e8      v7*
// ******************************************************

O principal valor que encontro é ver os nomes de variáveis ​​correspondentes ao diagrama visual, especialmente quando estamos usando passagens complexas de malhas e tal para novos algoritmos de malha. Esse truque de geração de gráfico doxygen mostrado em uma das respostas é super legal - eu deveria tentar mais.

Existem muitas coisas que são mais fáceis de se comunicar visualmente, nem mesmo usando gráficos. Exemplo:

insira a descrição da imagem aqui

... ou isso (comparação do meu algoritmo que estou chamando de "subdivisão do gancho" com a subdivisão CC padrão usada pela Pixar):

insira a descrição da imagem aqui

Isso daria muito contexto ao código para apenas ver o que essas operações fazem e como elas diferem dentro do código, porque algumas coisas são apenas mostradas visualmente. As imagens podem realmente capturar mil palavras.

Portanto, seria totalmente sonhador para mim ter um IDE que me permitisse ver código e imagens lado a lado, permitindo incorporar imagens no código-fonte.

Especialmente quando estamos inventando novos algoritmos, é difícil encontrar uma boa maneira de descrevê-los com muita precisão (de uma perspectiva técnica, não exatamente da perspectiva do usuário) sem entrar em suas etapas algorítmicas, pois não há nada para realmente compará-los diretamente. Esses tipos de imagens antes e depois tendem a mostrar totalmente o que você pode esperar do algoritmo imediatamente.

Outra coisa que eu sonho é com um depurador visual que me permite programá-lo para que alguns tipos de dados produzam uma imagem no depurador, por exemplo, para ver os resultados visualmente enquanto passo o código e certificando-me de que os algoritmos Estou tentando inventar que estão funcionando corretamente a cada passo e combinando como eu o escrevi no papel. Por exemplo, faça com que minha estrutura de dados de malha produza uma imagem renderizada na janela de inspeção do depurador - ideal se eu pudesse girar a visualização e outras coisas naquele momento.

Além disso, ao trabalhar em bases de código de grande escala (dezenas de milhões de LOC) escritas por equipes soltas com mil plug-ins, às vezes pode ser um pesadelo descobrir como executar o código que estamos procurando por algo obscuro, plug-in raramente usado na interface do usuário. Seria incrível nesses casos se o código pudesse incorporar uma captura de tela em miniatura mostrando como realmente chamar esse código a partir da interface do usuário (pode ser propenso a ficar desatualizado de tempos em tempos, mas geralmente as UIs não são tão instáveis ​​entre elas versões para tornar inúteis os screenshots anteriores).

Alguém pagaria por isso? Eu gostaria.

Enfim, sim, totalmente! Eu quero aquilo!!!


1
Fotos impressionantes e obrigado pela redação (embora seja provavelmente mais um comentário do que uma resposta)! Decidi recentemente fazer uma pausa completa em gráficos e simulações interessantes e criar ferramentas de depuração e rastreamento de última geração . O que você sonha é muito parecido com o que eu sonho ...
Steven Lu

1
@StevenLu Eu sempre sonhei em criar esse tipo de IDE que você está propondo com o depurador visual (embora eu estivesse pensando em fazê-lo desde o início, pois não conseguia imaginar uma solução de plug-in fazendo o lado do depurador tão bem). Mas sim - acho que essa resposta foi meio que um comentário ... mas fiquei muito feliz em ver alguém desejando isso. Meus colegas de trabalho no passado eram mais técnicos e matemáticos - eles não entendiam bem o meu desejo de comunicar tudo visualmente.

1
Talvez uma maneira pseudo-científica de olhar para isso seja que o sistema visual é de longe a interface de maior largura de banda que temos como seres humanos e, embora seja uma pena que só tenhamos disponível para uso como entrada, a profunda integração do sistema visual em o acesso à memória cerebral permite aos formatos visuais uma vantagem inequívoca para documentação e disseminação de conceitos abstratos. ... Para esse fim, estou trabalhando em uma ferramenta independente de IDE (seguindo a filosofia Unix) que permite que aplicativos compilados gerem automaticamente representações visuais estruturadas de seus internos para que possamos entendê-los.
Steven Lu

0

Soa como um caso de uso para programação alfabética, onde você pode adicionar diagramas e qualquer outra coisa à sua documentação.


Por que o voto negativo?
Restabeleça Monica - M. Schröder

Eu votei em você. É uma observação muito boa, o que estou discutindo cai quase inteiramente sob esse guarda-chuva.
Steven Lu

1
Também diminuí a votação porque isso realmente não fornece uma resposta. Ele claramente não quer mudar todo o seu programa para um estilo de programação alfabetizado, e mesmo que quisesse, a programação alfabética é apenas uma abordagem da programação - não significa necessariamente que diagramas e imagens sejam suportados.
Timmmm

0

O Doxygen permite inserir imagens em comentários como este:

  /*! Here is a snapshot of my new application:
   *  \image html application.jpg
   */

Infelizmente, parece que nenhum IDEs exibirá essas imagens em linha, mas suspeito que não seria muito difícil escrever uma extensão VSCode para fazê-lo, por exemplo.

Eu também encontrei uma extensão VSCode que já suporta isso com uma sintaxe diferente commentimg . Isso é feito através de um hover:

O VSCode está adicionando um recurso que permite imagens embutidas - "inserção de código" -, mas ainda não parece estar pronto.

Aqui está uma captura de tela da extensão de amostra (que eu realmente não consegui encontrar - presumivelmente ainda não foi lançada porque a API de inserção de código ainda não foi lançada)

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.