Question

Salutations. Je me suis un peu penché sur la programmation alphabétisée à présent et j'aime bien l’idée qui la sous-tend: vous écrivez un petit article sur votre code et écrivez autant de décisions de conception, le code entourant probablement le module, les travaux internes de le module, les hypothèses et les conclusions résultant des décisions de conception, l'extension potentielle, tout cela peut être écrit de manière agréable en utilisant tex. D'accord, le premier point: c'est la documentation. Il faut le tenir à jour, mais cela ne devrait pas être si grave, car votre changement devrait avoir une justification et vous pouvez l'écrire.

Cependant, comment la programmation alphabète est-elle plus étendue? Dans l'ensemble, la programmation littéraire n'est toujours que du texte. Texte très lisible par l'homme, bien sûr, mais toujours du texte, et il est donc difficile de suivre de grands systèmes. Par exemple, j'ai retravaillé de grandes parties de mon compilateur pour utiliser > > et de la magie pour enchaîner des étapes de compilation, car certaines "x.register_follower (y); y.register_follower (z); y.register_follower (a); ... " vraiment difficile à manier, et changer cela en x > > y > > z > > a fait un peu mieux, même si cela est à son point de rupture, aussi.

Alors, comment la programmation alphabétisée s’adapte-t-elle aux grands systèmes? Est-ce que quelqu'un essaie de faire ça?

Je pensais utiliser LP pour spécifier les composants qui communiquent les uns avec les autres à l'aide de flux d'événements et les relier tous ensemble à l'aide d'un sous-ensemble de graphviz. Ce serait une extension assez naturelle de LP, car vous pouvez extraire une documentation - un diagramme de flux de données - du réseau et en générer très bien le code. Qu'est-ce que tu en penses?

- Tetha.

Était-ce utile?

La solution

Excellente question. La motivation pour une programmation alphabète ne disparaîtra jamais, mais je pense qu'elle devrait être traitée comme un fluide. Cela signifie "donnez au lecteur une pause et informez-le de ce que vous essayez de faire". Je ne pense pas que cela signifie "rendre votre code vraiment verbeux".

Cela dit, le lecteur devra s’efforcer de le faire, en fonction de ses connaissances. Vraisemblablement, le code mérite d’être compris et rien n’est gratuit.

Je pense également que cela signifie plus que la création de code lisible. Probablement la raison pour laquelle quelqu'un lit le code est-elle parce qu'elle doit effectuer un changement. Vous devez anticiper les éventuels changements nécessaires et leur dire comment le faire si nécessaire.

Autres conseils

Le livre "Physically Based Rendering" (pbrt.org) est le meilleur exemple de programmation littéraire à grande échelle que je connaisse. Le livre implémente un système de rendu complet, et le texte du livre et le code de raytracer sont générés à partir du même "source".

En pratique, j'ai constaté que le simple fait d'utiliser un système tel que Doxygen et de vraiment exploiter et exploiter toutes ses fonctionnalités est préférable à un véritable "alphabète". programmation, sauf pour des choses comme celle-ci, c’est-à-dire les manuels scolaires, le matériel pédagogique.

J'ai réalisé une programmation littéraire avec WEB il y a une quinzaine d'années. Plus récemment, j'ai essayé d'extraire du code d'un wiki et de générer de la documentation à partir d'un environnement Squeak Smalltalk.

La partie ascendante peut être relativement bien gérée en générant des documents à partir de frameworks TDD / BDD, mais LP se concentre sur l'explication du code pour le lecteur.

Il y a quelques problèmes:

  • l'histoire à raconter est différente pour différents intervenants / lecteurs;
  • la structure du projet dans la plupart des environnements n’est pas la structure nécessaire pour raconter une histoire;
  • le support pour raffinement / divulgation successifs est manquant;
  • en plus du texte, un support pour les images est nécessaire;
  • à partir des commentaires dans le système de contrôle de code source, on peut déduire comment le système a été construit. L'histoire devrait être comment le système aurait pu être construit (avec un recul parfait).

Pour que LP fonctionne sur de plus grands systèmes, vous avez besoin d’un meilleur support IDE qu’un wiki ou un navigateur d’objets.

  

"Dans l’ensemble, la programmation alphabète est   toujours juste du texte "

Faux.

Les diagrammes vont bien.

  

Mon idée serait d'utiliser LP pour spécifier des composants qui communiquent les uns avec les autres à l'aide de flux d'événements

C'est juste de l'architecture, et c'est bien.

  

vous pouvez extraire une documentation - un diagramme de flux de données - du réseau et également en générer du code. Qu'en pensez-vous?

Les diagrammes de flux de données ne sont pas vraiment utiles pour générer du code détaillé. Il s’agit d’un résumé pratique et non d’une source d’information précise.

Un bon outil d’écriture (comme LaTex) peut coder le diagramme dans le document. Vous pourriez probablement trouver un chemin vers le diagramme à partir d'autres parties de la documentation.

Résultat net

À long terme, il est préférable de générer le diagramme sous forme de résumé du texte.

Pourquoi?

Les diagrammes suppriment intentionnellement les détails. Un diagramme est un résumé ou une vue d'ensemble. Mais en tant que source de code, les diagrammes sont terribles. Afin de fournir tous les détails, les diagrammes deviennent très encombrés.

Mais un résumé schématique d'un autre balisage pour LP fonctionnera correctement.

pbrt est un traceur de rayons à base physique écrit dans le style alphabétisé destiné à l'éducation des diplômés en informatique ( et moi), c’est un système de taille moyenne. En tant que programmeur non spécialisé, ce niveau de documentation est assez essentiel pour comprendre ce que fait le programme et pourquoi il le fait.

J'ai également accès à un moteur de rendu de recherche, en Java, qui est bien écrit mais relativement non documenté, mais pour quelques papiers SIGGRAPH. C’est aussi relativement compréhensible, mais j’ai aussi accès aux auteurs.

J'ai également beaucoup utilisé ImageJ , et j'ai regardé sous le capot de Java sous-jacent - il est assez difficile à suivre sans une idée de la philosophie sous-jacente.

En résumé, j’estime que la programmation alphabétisée est excellente si quelqu'un peut trouver le temps de bien le faire et que cela se fera probablement dans des contextes éducatifs. Il est difficile de voir cela se faire dans la production de code commercial. Je suis sceptique quant à l'idée que le code peut être entièrement auto-documenté.

L’idée de la programmation littéraire est de mettre l’accent sur la documentation, avec du code parsemé de documentation, plutôt que par des commentaires parsemé de code.

Il s'agit d'une philosophie fondamentalement différente, et les différences telles que les noms de variables, les espaces de noms et les classes plus longs n'affectent pas la philosophie. Une programmation littéraire prône des noms de variables significatifs.

Il évolue vers des systèmes plus grands, car le rapport de base documentation / code évolue de manière linéaire avec la taille du code.

La programmation alphabète a été développée à une époque où de longs noms de variables et de fonctions étaient tout simplement impossibles. Pour cette raison, le code n'était vraiment pas lisible.

Évidemment, beaucoup de choses se sont passées depuis.

Dans le monde actuel, le code lui-même est la documentation, d'où le terme "code auto-documentant". La réalisation est qu'aucun ensemble de commentaires ou de documentation externe ne peut jamais rester synchronisé avec le code sous-jacent. L’objectif de beaucoup de programmeurs actuels est donc d’écrire le code de manière à ce qu’il soit lisible par d’autres.

Essayez l’outil extensible NanoLP - LP, prend en charge de nombreux formats de document (Markdown, OpenOffice, Créole, TeX, Asciidoc et autres), l’importation d’un autre programme LP, la création de modèles, etc. L'utilisateur peut ajouter ses propres commandes / macros (en Python), par exemple pour effectuer une importation spéciale, par exemple à partir de VCS ... http://code.google.com/p/nano-lp

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top