Question

Alors, j'ai utilisé le gribouillis / lp module pour écrire mon premier programme lettré utilisant plt-système:

#lang scribble/lp
(require scribble/lp)

<<lp_scheme.ss>>

@chunk[<squarefunction>
        (define (f x)
         (* x x))]

Rien d'utile là, bien sûr. Maintenant, je suis une sorte de se demander pourquoi je tout simplement pas utiliser les commentaires simples, au lieu des constructions de programmation littéraire. Tous les avis sont les bienvenus. Ce serait vraiment génial si quelqu'un qui a probablement eu plus d'exposition / exp. avec elle pour éventuellement donner une explication plus intuitive des différences entre le code et le code bien documenté par écrit en utilisant des constructions de programmation alphabétisés.

Était-ce utile?

La solution

(je suppose que vous utilisez la définition de Donald Knuth de programmation littéraire.)

La principale différence est une séquence de .

En écrivant une application régulière, il y a des restrictions sur l'ordre dans lequel vous exprimez les choses.

Pour illustrer:

  • Tout le code pour une classe particulière doit être exprimé en un seul endroit
    (Ou dans un très petit nombre d'endroits, par exemple C # classes partielles)
  • Tout le code pour une méthode doit être donnée en une seule fois, dans le bon ordre pour l'exécution
  • Les dépendances doivent être déclarés avant les choses à leur charge
    (Variables déclarées avant l'utilisation dans la plupart des langues, des procédures / fonctions déclarées avant utilisation dans Pascal, les ensembles de bibliothèques compilées avant les autres dans .NET)

programmation littéraire sont libérés de cette restriction et permis de libérer pour exprimer vos concepts dans l'ordre qui est logique pour vous d'utiliser pour expliquer le programme à un autre développeur.

a une autre conséquence - dans certaines formes, vous pouvez exprimer un concept une fois (par exemple, « Toutes les propriétés se déclenche l'événement PropertyChanged lorsque changé »), et ont que tissé tout au long de votre application dans un myriade d'autres endroits.

Pour les programmes très simples, un programme lettré et un bien commenté pourrait regarder la même chose -. Mais que la complexité du système se développe, les deux commencent à apparaître très différents

Autres conseils

motivation principale, comme pour moi, est que chaque utilisation de programmeur des feuilles de papier / bloc-notes à l'architecture « design », développer des idées, il écrit qu'il schémas, diagrammes, essayez un peu de mathématiques et ainsi de suite. Après avoir terminé le programme, tous ces ordinateurs portables / feuilles de papier sont perdus, si supportabilité du programme est d'obtenir vers le bas. J'ai écrit à ce sujet dans mon outil de WiKi LP NanoLP: http://code.google .com / p / nano-lp / wiki / AboutLP .

motivation Deuxièmement, pas explicitement, est moindre bugs. Mais ce n'est pas chose « théorique », il est fait l'expérience (pour moi) - quand vous êtes « pensée » sur le papier, dessiner des schémas, des schémas d'algorithmes - votre programme auront moins de bugs. LP est tel 'papier', rien d'autre.

Il y a beaucoup de développeurs, qui ne tire jamais quelque chose, aucun commentaire même (!), Ils écrivent que le programme ... Terrible!

LP vous aide à créer une bonne documentation (pas de façon formelle - la description des fonctions, il est args, et ce qu'il retourne, et que cela est bien connu avec la signature de la fonction, alors pourquoi cette documentation est nécessaire ??), mais il aide à écrire REAL documentation rÉEL avec sémantique, avec des images, avec la description des actions réelles ...

De nombreuses motivations :) Et bien sûr est parfois préférable d'utiliser seulement renverser LP (Doxygen, par exemple), parfois -. LP réel dépend de nombreux facteurs

Programmation lettrée repose sur trois déclarations simples:

  1. Les programmeurs doivent écrire du code, que l'ordinateur peut comprendre
  2. Les programmeurs doivent écrire la documentation, que les gens peuvent comprendre
  3. Si ce sont des documents distincts, il est inévitable qu'ils seront hors de synchronisation

En effet, dans mon expérience, # 2 obtient généralement sans ménagement. J'ai perdu le compte de combien de fois QA m'a dit « le doc dit, mais le code est-ce que, est le code incorrect ou est le doc out-of-jour? » Je ne pense pas que mon travail est hors de l'ordinaire, à cet égard. De plus, dans un de mes premiers projets, je tentais de garder la documentation mise à jour que l'arrière-et-vient avec les parties prenantes ont donné lieu à l'évolution des besoins. Ce fut suffisamment de temps que je l'ai dit, par la direction, d'arrêter de jouer avec les docs et juste obtenir le travail du projet. Nous sommes passés aux processus de documentation moins fastidieux, depuis (Dieu merci!).

Nous avons des outils d'examen de code où, quand nous faisons une modification du code, plusieurs personnes peuvent voir les changements, clairement définis, et les commentaires peuvent être faits, poser des questions, en expliquant des choses, en offrant des améliorations. Si le code a été écrit avec alphabétisés techniques de programmation, une grande partie de cette question / réponse serait superflu parce que l'explication serait inclus.

Une grande partie de l'état d'esprit de la programmation moderne est que votre code devrait être sa propre documentation. De nombreux experts soutiennent que, si vous vous trouvez avoir besoin d'expliquer votre code dans les commentaires, vous devriez probablement reformater le code (changement de noms de variables / fonction, etc.) de sorte que les commentaires sont inutiles. Je trouve cela très bien en théorie, moins pratique dans la réalité. Je veux dire, quand j'utilise les bibliothèques créées / maintenues par quelqu'un d'autre, leur choix de noms méthode / fonction est pas toujours intuitive pour moi. Par exemple:

Set<String> statesWeCareABout = new HashSet<String>(Arrays.asList(new String[] { "one", "two", "three" }));
Set<String> statesWeFound = <some function>;
statesWeFound.retainAll(statesWeCareAbout);

Si vous n'êtes pas familier avec l'ensemble <> ou HashSet <>, vous savez peut-être pas que .retainAll () signifie me donner l'intersection des deux, avec le résultat dans l'ensemble <>.

modifié

Enfin, la programmation lettrée permet généralement vous cassez les choses afin que vous puissiez expliquer ce morceau de code dans l'isolement, puis en ligne dans cet autre morceau de code. Ceci est plus en ligne avec la façon dont fonctionne la compréhension humaine. Expliquez-moi comment cela fonctionne, construire sur cette compréhension pour expliquer l'image plus grande. Les ordinateurs ne se soucient pas vraiment; vous pouvez écrire une seule fonction avec 1000 lignes de code et il n'a pas de problème comprendre la chose. Dieu vous aider si vous, en tant que développeur, maintenir en cela.

Et que, vraiment, est le raisonnement derrière la programmation lettrée. Code devra être maintenu, que les bugs de étant fixes ou caractéristiques des ajoutées. Et si elle ne peut pas être compris par quelqu'un d'autre, plus tard, de façon efficace, il sera remplacé. Il y a moyen de beaucoup de code « écrire que » dans ce monde. Programmation lettrée facilite la lecture et la compréhension, ce qui le rend plus susceptibles d'être conservés et utilisés à long terme.

Et ne nous avons vraiment le temps de garder réinventer la roue?

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