Question

programmation lettrée a de bons idéaux. Pourquoi pensez-vous que ce n'est pas courant? Il est parce qu'il n'a pas livré?

Était-ce utile?

La solution

Je l'ai vu dans un livre des écrits de Knuth, et je pensais qu'il avait l'air propre. J'ai ensuite essayé d'utiliser l'écran de programmation littéraire pour comprendre ce qui se passait dans le programme, et l'a trouvé plus difficile qu'il n'y paraissait. Il est peut-être que j'étais trop habitué à passer par des listes de programmes, mais il semblait confus.

Alors je regarde le code source, et qui me éteint alors et là. Je dois apprendre à écrire des programmes d'une manière entièrement nouvelle, avec moins de correspondance entre le texte du programme et ce que la scie du compilateur, et je vis avantage ne correspondant.

De plus, les gens peuvent écrire long et convaincre les arguments que le code est en train de faire X quand il fait faire Y, et j'ai rencontré ma part de commentaires trompeurs. J'ai développé un penchant pour la lecture du code pour voir ce qu'il fait assez tôt. La programmation littéraire est l'antithèse de cela.

Autres conseils

Je blâme l'effet réseau . Pour d'autres personnes à modifier votre code et la documentation, ils doivent être en mesure de le comprendre.

Ce qui pousse les gens loin de quelque chose comme cweb / noweb, parce que leur utilisation serait vous avez besoin d'apprendre TeX et la syntaxe spécifique au programme sur le dessus du langage de programmation que vous utilisez pour le projet. Cela peut être considéré comme une énorme perte de temps, surtout si elles ne nécessitent pas de photocomposition mathématique qui est un grand tirage au sort pour TeX en premier lieu. (Et pour beaucoup de programmeurs d'applications, ils ne seront pas vraiment besoin.) Au contraire, ils préfèrent quelque chose comme les commentaires XML de Visual Studio, parce que c'est déjà populaire et bien établie.

Les endroits que j'ai vu la programmation littéraire le décollage sont en calcul scientifique / statistique, où la plupart des programmeurs ont une formation importante (alias titulaires d'un doctorat) en mathématiques, CS, ou de statistiques, et sont donc déjà famliiar avec LaTeX. La documentation qu'ils écrivent est plus susceptible d'inclure un grand nombre de formules compliquées qui sont les mieux écrits en TeX, et ils sont plus susceptibles d'être la programmation dans R. La proportion de programmeurs R qui connaissent Sweave est certainement beaucoup plus élevé que, par exemple, la proportion de programmeurs C qui connaissent cweb.

J'étais fasciné par le concept de programmation lettrée dans les 90'es fin tout en étudiant, et je suis toujours intriguée à l'approche Knuths à la programmation et photocomposition. Rien que le meilleur va faire.

Le système de programmation lettrée Knuth conçu a fait beaucoup, beaucoup plus que rencontre immédiatement l'œil, à savoir à surmonter de nombreuses lacunes dans le langage de programmation sous-jacente que l'outil de génération de code généré à partir du document source Knuths, à savoir Pascal standard.

Pour ceux qui ont eu la chance de ne pas avoir essayé standard Pascal, voici quelques-uns des faits saillants.

  • Pour le rendre plus facile d'avoir un compilateur monopasse, la spécification du langage dit que toutes les déclarations devaient venir dans un certain ordre. A partir de la page wikipedia: « Chaque procédure ou une fonction peut avoir ses propres déclarations de goto étiquettes, constantes, types, variables, et d'autres procédures et fonctions, qui doivent tous être dans cet ordre. » Cela signifiait qu'on pouvait pas regrouper vos choses logiquement ensemble dans le fichier source.
  • manipulation chaîne était plus pénible que dans C ordinaire.
  • Identifiants ne pouvait pas avoir une longueur arbitraire.
  • Beaucoup plus de choses que je ne me souviens plus.

Toutes ces choses signifie essentiellement que Knuth avait besoin d'une meilleure langage de programmation (donc il a inventé un) et utilisé Pascal comme son langage assembleur.

La plupart des langues modernes peut faire ces choses sans trop d'effort, éliminant ainsi une partie importante du travail Programmation lettrée devait résoudre.

Aussi les langues modernes sont plus expressifs permettant plus pensé à mettre dans le code lui-même.

Alors, qu'est-ce qui reste? La capacité de générer une forme de documentation du typeset de code source, et que existe aujourd'hui.

Il suffit de penser JavaDoc - l'API d'exécution Java est peut-être le plus grand morceau de Programmation lettrée aujourd'hui disponible (sauf que le code n'est pas réellement présenté, mais il aurait été si Java est open source dès le début). Voir par exemple la présentation du cadre des collections sur http://download.oracle. com / JavaSE / 6 / docs / api / java / util / Collection.html

Je crois que des systèmes similaires existent pour .NET et d'autres programmes traditionnels.

Une chose que je découvre quand j'avais mon aventure avec la programmation littéraire dans les années 90 était qu'il a attiré des gens très passionnés qui voulaient faire exactement la bonne chose - et qui a impliqué l'écriture de leur propre système de programmation littéraire parce que personne n'existant était assez bon pour eux. noweb était une bonne tentative de couper cela en fournissant une bonne assez petit dénominateur commun pour tout le monde, bien que même alors, je passais la plupart de mon temps de LP développer un joli imprimante pour elle ...

Une autre question est qu'il est vraiment anti-agile. D'une certaine façon, être ralenti est bon parce qu'il vous oblige à penser plus à l'avance et faire avancer les choses dès la première fois. D'autre part, documenter méticuleusement que vous allez signifie qu'il ya une grande barrière à refactorisation votre code. Et si vous attendez jusqu'à ce que votre code est durci avant LP-ifier, vous vous retrouvez avec une tâche de documentation de plusieurs jours, ce qui peut vraiment vous arrêter dans vos pistes.

A mon humble avis, de nombreuses entreprises ont une culture qui est le contraire aux objectifs de Programmation lettrée: ils veulent des résultats plus rapides (ils ne pleurent sur la qualité lorsque l'application est en production). Dans ma propre expérience, mes patrons avaient ne veulent pas comprendre que des résultats plus rapides ne signifie pas « un programme RUNNABLE le lendemain je demander. » Pour eux, si un développeur n'est pas occupé à taper sur son clavier, il ne fonctionne pas, est « perdre son temps dans la conception non-sens ». Oui, je sais, mon patron est un enfoiré.

Coders écrire du code pas l'anglais.

Coders ne aiment pas écrire de la documentation, car il ne permet pas l'exécution du code.

Coders ne sont pas bonnes à écrire de la documentation parce que son pauvre moyen d'exprimer leurs idées.

La programmation littéraire semble être l'idée de prendre la documentation au niveau suivant où le code est plus d'un après-pensée. Peut-être que cela fonctionnerait, mais à la plupart codeur, il ressemble à la documentation désagréable.

parce que les gens sont Principalement très STUPIDE. témoignage évident qui est un flot ininterrompu de suppositions et de malentendus exprimés par les jeunes au sujet de la nature de cette technique simple.

Les gens prennent LP être: (a) une méthode de documentation (b) une méthode d'écriture des essais polis qui nécessite des compétences ou des talents particuliers (c) ont tout simplement pas la moindre idée - comme le créateur de l'éditeur de programmation Leo, par son propre aveu, etc etc etc.

LP est cependant simplement: (1) les programmes d'écriture dans un mélange de code et des phrases dans un (= tout) langage humain, où le dernier support pour d'autres morceaux de code et / ou expressions incluses. C'est précisément ce que les auteurs de manuels de programmation innombrable do .. et (2) il est un simple préprocesseur qui étend ces phrases dans l'homme (qui est devenu comme si les noms des sous-routines inclus) pour démêler le résultat dans l'ordre requis par le compilateur (ou interprète). Dans le cas contraire, on peut étendre le texte écrit avec un autre petit utilitaire pour inclure le formatage des symboles pour transformer la « source lettré » dans un joli texte lisible bien formaté.

Les jeunes ne jamais essayer cette idée extrêmement simple -. Et soit fantasmer ou d'imaginer des raisons de faux pourquoi ils ne le font ou essayer

En fait l'idée de la programmation principale « dans pseudocode », écrit dans une langue humaine, puis l'étendre avec un utilitaire simple préprocesseur participe à la gestion ATTENTION (limitée, une difficulté principale pour tout programme de longuet), à peu près comme le pliage ou division code de votre flux de programme dans les fonctions / subroutines, nécessaire pour vous de ne pas vous perdre dans les détails, mais tout à fait inutile pour l'exécution de la machine.

Il y a 2 aspects de la programmation littéraire que je faire souhait ont été intégrés dans la programmation grand public - l'imagerie embarquée (par exemple, des schémas de conception) et des pointeurs vers des tentatives antérieures et alternatives (par exemple, « La raison pour laquelle il est comme cela est parce que j'ai essayé cette autre façon et ça n'a pas marché parce que ... »). Ces deux aspects peuvent être traités avec doc-commentaires et URIs.

Parce que la logique des programmes ne fonctionne pas la même chose que nous parlons. Un programme a un débit bien spécifié, et les conditions et les boucles.

Après avoir codage à beaucoup, je pense en ces termes. Mon cerveau transforme les problèmes dans le domaine cible de code exécutable. Et il est beaucoup plus efficace pour moi d'écrire cela dans un langage de programmation en général, que d'avoir à faire la transformation supplémentaire étape pour faire mes programmes alphabétisés.

En fait, je crois que mes programmes sont déjà des identifiants alphabétisés ... parlant, les bons noms de fonction, les commentaires où je fait quelques que je carriole ne me comprendre immédiatement après quelques mois.

Pour conclure:. Mon code de Java est plus alphabétisés par lui-même comme chaque programmation « lettré » veut être

Je suis venu à la programmation alphabétisées dans l'autre sens - je rêvais d'avoir le code organisé comme il convient à mon esprit, non pas comme le compilateur l'exige. J'ai trouvé Leo presque idéal à cet effet. Il prend également en charge le suivi des fichiers modifiés en dehors. Ces fichiers ne doivent pas contenir de balises spéciales, donc je peux utiliser Leo pour moi-même sans avoir besoin d'autres dans l'équipe de savoir. Cette fonction - « arbres @shadow » - est très prometteur, bien que toujours bit buggy a besoin de plus globes oculaires. Et il fixe aussi le « oh non, tout dans un seul gros fichier » problème à la fois en organisant tout dans les grandes lignes d'arbres et par le support des fichiers externes.

Pour moi, contrairement au nom, la « programmation littéraire » ne sont pas sur la documentation du tout. Je n'ai pas plus de documents qu'auparavant. Il est sur la structure qui me permet d'avoir à pas se perdre . Je jure par elle en particulier lors de la gestion des fichiers JSP Behemoth (et que, malgré Leo était initialement prévu principalement pour Python et il ne supporte pas pour le langage JSP - je dois diviser le fichier en arbre Leo manuellement!)

.

Je le vois comme un outil d'enseignement précieux, où une dissertation sur le code peut être écrit et extraits puis de code de travail intercalés en pour en informer les lecteurs sur les hows, ce qui est, et pourquoi du code.

En dehors d'un environnement purement éducatif, je pense que Knuth comprend vraiment la meilleure façon de l'utiliser.

Il est le pire des mondes - vous devez écrire un très correct, un programme informatique très spécifique dans une langue très non spécifique = anglais. Donc, vous devez écrire soigneusement en utilisant exactement les phrases correctes -. Et vous pourriez aussi bien le code juste écrire

Licencié sous: CC-BY-SA avec attribution
scroll top