Annoter le code source avec des diagrammes en tant que commentaires

14

J'écris beaucoup de code (principalement c ++ et javascript) qui touche à la géométrie et aux graphiques de calcul et à ce genre de sujets, j'ai donc constaté que les diagrammes visuels étaient une partie indispensable du processus de résolution des problèmes.

J'ai déterminé tout à l'heure que "oh, ne serait-il pas tout simplement fantastique de pouvoir en quelque sorte attacher un diagramme dessiné à la main à un morceau de code", et cela me permettrait de revenir à quelque chose sur lequel j'ai travaillé, des jours, des semaines, des mois plus tôt et beaucoup plus rapidement re-grok mes algorithmes.

En tant qu'apprenant visuel, j'ai l'impression que cela a le potentiel d'améliorer ma productivité avec presque tous les types de programmation, car de simples diagrammes peuvent aider à comprendre et à raisonner sur tout type de structure de données non triviale. Des graphiques par exemple. Pendant les cours de théorie des graphes à l'université, je n'avais pu que vraiment comprendre les relations entre les graphes dont je pouvais réellement dessiner des représentations schématiques.

Donc...

Aucun IDE à ma connaissance ne vous permet d'enregistrer une image en tant que commentaire à coder.

Ma pensée était que moi ou quelqu'un d'autre pouvions trouver un outil raisonnablement facile à utiliser qui puisse convertir une image en une chaîne binaire base64 que je pourrais ensuite insérer dans mon code.

Si le processus de conversion / insertion peut être suffisamment rationalisé, cela permettrait une meilleure connexion entre le diagramme et le code réel, donc je n'ai plus besoin de rechercher chronologiquement dans mes blocs-notes. Encore plus génial: des plugins pour les IDE pour analyser et afficher automatiquement l'image. Il n'y a absolument rien de difficile à cela d'un point de vue théorique.

Je suppose que cela me prendrait un peu plus de temps pour comprendre comment étendre mes IDE préférés et maintenir ces plugins, donc je serais totalement satisfait d'une sorte de post-processeur de code qui ferait la même analyse et le rendu des images et les montrer côte à côte avec le code, à l'intérieur d'un navigateur ou quelque chose. Depuis que je suis un programmeur javascript par métier.

Que pensent les gens? Est-ce que quelqu'un paierait cela? Je voudrais. Mais je voudrais peut-être aussi souligner que, que moi ou un nombre important de mes pairs paierais pour une telle chose, la seule façon de réussir une telle chose serait par le biais d'une version open source.

Steven Lu
la source
4
Une alternative: commentez dans un lien vers un fichier image local qui s'ouvre dans la visionneuse d'image par défaut.
Hand-E-Food
Ma plus grande crainte serait l'abus du système. Bien sûr, cela commence par un diagramme significatif pour un algorithme complexe, mais combien de temps jusqu'à ce que quelqu'un télécharge des documents de spécification fragiles dans les commentaires de la classe? Avant de vous en rendre compte, tout ce qui concerne le projet + développeur est blobé dans les commentaires de code. Bien sûr, tout système puissant est ouvert aux abus. Je pense que le besoin est un créneau, mais si vous êtes dans ce créneau, ce serait un outil très utile.
Snixtor
@ Hand-E-Food Nice! Une URL de fichier dans un commentaire apparaît comme un lien cliquable dans Xcode hors de la boîte. Ma seule plainte à ce sujet est qu'il semble impossible de créer une URL de fichier de chemin relatif, donc l'aspect du lien cliquable se casse (selon toute probabilité) lors du changement de système.
Steven Lu
Vous pouvez être intéressé par les graphiques ou arbres
TehShrike
Je fais du javadoc qui va générer du HMTL, avec des images. Ou SimpleDocBook, documentation séparée, basée sur XML, on peut / doit faire référence dans le code des règles métier. Cela offre une belle prose et couvre le système du point de vue de toute logique métier, au lieu de distribuer des composants logiciels et des couches (classes). Chaque demande de changement, ajoute du code avec en référence au docbook + numéro de version / ticket, et le docbook a une liste de changements + numéro de ticket. Cela fonctionne en raison de sa couverture complète. Je ne sais pas comment cela conviendrait à votre situation.
Joop Eggen

Réponses:

6

Qu'en est-il du plugin d'insertion d'image pour Visual Studio ?

Si vous utilisez un IDE différent et qu'il ne prend pas en charge les images intégrées ou que vous n'avez pas le temps de l'étendre, alors qu'en est-il de mettre un lien vers une image dans les commentaires, alors que l'image résiderait quelque part dans le référentiel ?

Arseni Mourzenko
la source
C'est plutôt cool. J'utilise VS au travail donc je pourrais essayer ça! Merci. Enregistrer l'image dans le référentiel et la relier d'une manière ou d'une autre est certainement un moyen d'y parvenir, mais je suis sûr que c'est encore trop de travail de comptabilité pour que je puisse le mettre en œuvre de manière fiable. Je suis un programmeur assez paresseux.
Steven Lu
L'enregistrement des images dans le référentiel fonctionnerait également avec la plupart des méthodes de navigation dans les référentiels (par exemple, l'interface Web VCS Repo)
Steven Lu
4

Si vous n'êtes pas un artiste ASCII , vous pouvez utiliser doxygen comme outil de documentation avec dot / graphviz intégré.

Cela permet d'écrire une description textuelle des graphiques et de les rendre dans la documentation.

Par exemple, cette description:

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)" ];
}

s'affiche comme:

entrez la description de l'image ici

mouviciel
la source
C'est cool! Tout support d'outil pour les environnements Java? Je ne vois rien qui ressemble à un support pour cela dans ce Mojo par exemple: graphviz-maven-plugin.bryon.us/dot-mojo.html . Tous les autres viennent également de prendre en charge les fichiers .dot.
oligofren
2

Vous pouvez essayer le mode artiste emacs. Cela ferait de l'art ascii plutôt que des images en soi, donc cela peut ou non être ce que vous recherchez. En particulier, si votre IDE ne fait pas de polices à largeur fixe, cela ne serait pas utile. Étant du texte brut, il jouerait très bien avec le contrôle de version.

Voici une capture d' écran du mode artiste utilisé, afin que vous puissiez vous faire une idée si vous êtes intéressé ou non.

Pour démarrer le mode artiste dans emacs, faites Alt-x, tapez artist-mode et appuyez sur Entrée. Le bouton central de la souris fait apparaître le menu. Les raccourcis clavier pour couper et coller ne sont pas ceux de Windows normaux par défaut, mais vous pouvez activer le mode CUA pour changer cela.

Michael Shaw
la source
Wow c'est ... impressionnant. J'ai en fait quelques commentaires de style de diagramme ASCII dans mon code. Cela prend trop de temps. Je vais vouloir utiliser de meilleurs outils parce que la technologie est déjà là. J'avais l'habitude d'écrire du code dans Vim parfois, mais quels scripts de reconnaissance de code j'avais échoué par rapport aux vrais IDE. Mais merci de me montrer cette technique old school!
Steven Lu
Visiter quelques années plus tard et j'ai depuis recueilli quelques goodies Vim pour aider à assembler rapidement des diagrammes de boîte. que ce soit des caractères ascii ou unicode box, c'est une façon très cool d'embellir du code avec des commentaires sympas et utiles. Cependant, Vim ne vient pas avec tout cela.
Steven Lu
1

Que pensent les gens? Est-ce que quelqu'un paierait cela? Je voudrais.

ZOMG, je rentre dans une catégorie similaire à la vôtre et j'aimerais une telle fonctionnalité directement dans l'IDE.

Pour l'instant, j'ai tendance à faire beaucoup "d'art" ASCII comme ceci:

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

La principale valeur que je trouve est de voir les noms de variables correspondant au diagramme visuel, en particulier lorsque nous utilisons des traversées complexes de maillages et autres pour de nouveaux algorithmes de maillage. Cette astuce génératrice de graphiques doxygen montrée dans l'une des réponses est super cool - je devrais essayer plus.

Il y a tellement de choses qui sont plus faciles à communiquer visuellement, pas nécessairement même à l'aide de graphiques. Exemple:

entrez la description de l'image ici

... ou ceci (comparaison de mon algorithme que j'appelle "subdivision du crochet" à la subdivision CC standard telle qu'utilisée par Pixar):

entrez la description de l'image ici

Cela donnerait au code tellement de contexte pour simplement voir ce que font ces opérations et comment elles diffèrent à l'intérieur du code, car certaines choses sont simplement mieux affichées visuellement. Les images peuvent vraiment capturer mille mots.

Il serait donc totalement rêveur d'avoir un IDE qui me permettrait de voir le code et les images côte à côte, ce qui me permettrait d'incorporer des images dans le code source.

Surtout lorsque nous inventons de nouveaux algorithmes, il est difficile de trouver un bon moyen de les décrire très précisément (d'un point de vue technique, pas exactement du point de vue de l'utilisateur) sans entrer dans leurs étapes algorithmiques car il n'y a rien à comparer vraiment directement. Ces types d'images avant et après ont tendance à montrer totalement ce que vous pouvez attendre de l'algorithme tout de suite.

Une autre chose dont je rêve est un débogueur visuel qui me permet de le programmer afin que je puisse faire en sorte que certains de mes types de données produisent une image dans le débogueur, par exemple, pour voir les résultats visuellement pendant que je parcours le code et que je m'assure que les algorithmes J'essaie d'inventer fonctionne correctement à chaque étape et correspond à la façon dont je l'ai rédigé sur papier. Par exemple, faire en sorte que ma structure de données de maillage génère une image rendue dans la fenêtre de surveillance du débogueur - idéal si je pouvais même faire pivoter la vue et ainsi de suite.

De plus, lorsque vous travaillez dans des bases de code à très grande échelle (des dizaines de millions de LOC) écrites par des équipes lâches avec un millier de plugins, cela peut parfois être un cauchemar juste pour comprendre comment exécuter le code que nous recherchons pour certains obscurs, plugin rarement utilisé de l'interface utilisateur. Ce serait tellement génial dans ces cas si le code pouvait incorporer une capture d'écran miniature montrant comment réellement invoquer ce code à partir de l'interface utilisateur (pourrait être sujet à être obsolète de temps en temps, mais généralement les interfaces utilisateur ne sont pas si instables à travers versions pour rendre les anciennes captures d'écran inutiles).

Est-ce que quelqu'un paierait cela? Je voudrais.

De toute façon, oui, totalement! Je veux cela!!!


la source
1
De superbes photos et merci pour la rédaction (même si c'est probablement plus un commentaire qu'une réponse)! J'ai récemment décidé de faire une pause complète dans les trucs graphiques et de simulation sympas et de créer des outils de débogage et de traçage de nouvelle génération . Ce dont vous rêvez est très similaire à ce dont je rêve ....
Steven Lu
1
@StevenLu J'ai souvent rêvé de créer ce type d'IDE que vous proposez avec le débogueur visuel (même si je pensais le faire de fond en comble car je ne pouvais pas imaginer une solution de plugin faisant si bien le côté débogueur). Mais oui - je suppose que cette réponse était une sorte de commentaire ... mais j'étais tellement heureux de voir quelqu'un d'autre qui le souhaitait. Dans le passé, mes collègues étaient plus technophiles et mathématiques - ils ne comprenaient pas très bien mon désir de tout communiquer visuellement.
1
Peut-être qu'une façon pseudo-scientifique de le voir est que le système visuel est de loin l'interface la plus large bande passante que nous avons en tant qu'humains, et bien qu'il soit nul que nous ne l'avons que pour une utilisation en entrée, l'intégration profonde du système visuel dans l'accès à la mémoire cérébrale permet aux formats visuels un avantage sans équivoque pour la documentation et la diffusion de concepts abstraits. ... À cette fin, je travaille sur un outil IDE-agnostique (suivant la philosophie Unix) qui permet aux applications compilées de générer automatiquement des représentations visuelles structurées de ses composants internes afin que nous puissions les comprendre.
Steven Lu
0

Cela ressemble à un cas d'utilisation pour la programmation littéraire où vous pouvez ajouter des diagrammes et autres à votre documentation.

Réintégrer Monica - M. Schröder
la source
Pourquoi le downvote?
Reinstate Monica - M. Schröder
Je t'ai voté. C'est une très bonne observation, ce dont je discute relève presque entièrement de ce cadre.
Steven Lu
1
J'ai également voté contre parce que cela ne donne pas vraiment de réponse. Il ne veut clairement pas passer son programme entier à un style de programmation alphabétisé, et même s'il l'a fait, la programmation alphabétisée n'est qu'une approche de la programmation - cela ne signifie pas nécessairement que les diagrammes et les images sont pris en charge.
Timmmm
0

Doxygen vous permet d'insérer des images dans des commentaires comme celui-ci:

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

Malheureusement, il semble qu'aucun IDE n'affichera ces images en ligne, mais je pense qu'il ne serait pas trop difficile d'écrire une extension VSCode pour le faire par exemple.

J'ai également trouvé une extension VSCode qui la prend déjà en charge avec une syntaxe différente commentimg . Cela se fait via un survol:

VSCode ajoute une fonctionnalité qui permet des images en ligne - "encart de code" - mais il ne semble pas encore tout à fait prêt.

Voici une capture d'écran de l' extension exemple (que je n'ai pas pu trouver réellement - n'a probablement pas encore été publiée car l'API de l'encart de code n'est pas encore publiée)

Timmmm
la source