Frage

Grüße. Ich habe jetzt ein wenig Programmierung Blick auf belesen, und ich mag die Idee dahinter: Sie im Grunde ein wenig Papier über Ihren Code schreiben und schreiben Sie so viel von den Design-Entscheidungen, wobei der Code wahrscheinlich das Modul umgibt, die innere workins von das Modul, Annahmen und Schlussfolgerungen aus den Design-Entscheidungen resultierende potenzielle Erweiterung, all dies kann nach unten auf eine nette Art geschrieben werden, mit tex. Zugegeben, der erste Punkt: es ist die Dokumentation. Es muss auf dem neuesten Stand gehalten werden, aber das sollte nicht so schlimm sein, weil Ihre Änderung eine Begründung haben sollte und Sie können das aufzuschreiben.

Doch wie funktioniert Literate Programming Maßstab auf einen größeren Grad? Insgesamt ist Literate Programming noch nur Text. Sehr menschlich lesbaren Text, natürlich, aber immer noch Text, und somit ist es schwierig, große Systeme zu folgen. Zum Beispiel habe ich überarbeitet große Teile meines Compiler zu verwenden >> und etwas Magie Kette Schritte zusammen kompilieren, weil einige „x.register_follower (y); y.register_follower (z); y.register_follower (a); ... "bekam wirklich unhandlich und zu ändern, dass auf x >> y >> z >> ein es ein bisschen besser gemacht, obwohl dies an seiner Bruchstelle ist, auch.

Also, wie funktioniert Literate Programming Maßstab zu größeren Systemen? Hat jemand versucht, das zu tun?

Mein Gedanke wäre LP zu verwenden Komponenten zu spezifizieren, die miteinander unter Verwendung von Ereignisströmen und Kette aller diese zusammen mit einer Teilmenge von graphviz kommunizieren. Dies wäre eine ziemlich natürliche Erweiterung LP sein, wie Sie eine Dokumentation extrahieren - ein Datenflußdiagramm - aus dem Netz und auch Code aus ihm wirklich gut generieren. Was denkst du darüber?

-. Tetha

War es hilfreich?

Lösung

Ausgezeichnete Frage. Die Motivation für Literarische Programmierung geht nie weg, aber ich denke, es sollte als Flüssigkeit behandelt werden. Es bedeutet „dem Leser eine Pause, und erziehen sie zu dem, was Sie versuchen zu tun“. Ich glaube nicht, es bedeutet, „machen Sie Ihren Code wirklich wortreich“.

sagte, wird der Leser einige Mühe hineingesteckt haben, je nachdem, was sie bereits wissen. Vermutlich ist der Code im Wert von Verständnis, und nichts ist umsonst.

Ich denke auch bedeutet, dass es mehr als nur lesbaren Code zu machen. Wahrscheinlich der Grund, jemand liest den Code, da sie eine Änderung vornehmen müssen. Sie sollten die möglichen Veränderungen antizipieren, die erforderlich sein könnten, und ihnen sagen, wie es zu tun, wenn nötig.

Andere Tipps

Das Buch "Körperlich Rendering Based" (pbrt.org) das beste Beispiel für Groß ist Literarische Programmierung, die ich kenne. Das Buch setzt ein komplettes Rendering-System, und sowohl das Buch als Text und der Raytracer Code aus der gleichen „Quelle“ erzeugt.

In der Praxis habe ich festgestellt, dass nur ein System wie Doxygen verwenden und wirklich in graben und die Nutzung aller seiner Funktionen machen ist besser als ausgewachsene „lesen und schreiben“ Programmierung, außer für Dinge wie diese, also Lehrbücher, Bildung Materialien.

Ich habe einige Literarische Programmierung mit WEB vor etwa 15 Jahren. In jüngerer Zeit habe ich versucht, Code aus einem Wiki zu extrahieren und aus einer Squeak Smalltalk-Umgebung zu erzeugen Dokumentation.

Der Bottom-up-Teil relativ gut behandelt werden kann durch Dokumente von TDD / BDD-Frameworks zu erzeugen, aber LP fokussiert den Code für den Leser auf der Erläuterung.

Es gibt ein paar Probleme:

  • zu sagen, die Geschichte ist für verschiedene Akteure / Leser;
  • die Struktur Projekt in den meisten Umgebungen ist nicht die Struktur für Storytelling erforderlich;
  • Unterstützung für aufeinanderfolgende Verfeinerung / Offenlegung fehlt;
  • neben Text-Unterstützung für Bilder erforderlich ist;
  • aus den Kommentaren in dem Quellensteuersystem eine ableiten kann, wie das System gebaut wurde. Die Geschichte sollte sein, wie das System gewesen Build haben könnte (mit perfektem Nachhinein).

Für LP für größere Systeme zu arbeiten, müssen Sie besser IDE-Unterstützung als ein Wiki oder ein Objekt Browser.

  

"Insgesamt Literate Programming ist   nach wie vor nur Text "

Falsch.

Diagramme sind in Ordnung.

  

Mein Gedanke wäre LP zu verwenden Komponenten angeben, die miteinander unter Verwendung von Ereignisströmen

kommunizieren

Das ist nur Architektur, und das ist in Ordnung.

  

können Sie eine Dokumentation extrahieren - ein Datenflußdiagramm - aus dem Netz und auch wirklich gut Code daraus generieren. Was halten Sie davon?

Datenflussdiagramme sind nicht wirklich alles, was nützlich für detaillierten Code zu generieren. Sie sind eine handliche Zusammenfassung, keine genaue Quelle der Informationen.

Ein gutes Schreibgerät (wie LaTeX) kann das Diagramm in dem Dokument verschlüsseln. Sie könnten wahrscheinlich einen Weg, um das Diagramm aus anderen Teilen der Dokumentation Figur.

Fazit

Auf lange Sicht, sind Sie besser dran das Diagramm als eine Zusammenfassung des Textes zu erzeugen.

Warum?

Diagramme absichtlich Details elide. Ein Diagramm ist eine Zusammenfassung oder eine Übersicht. Aber als Quelle für Code, sind Diagramme, schrecklich. Um bieten, um alle die Details, werden die Diagramme sehr unübersichtlich.

Aber eine schematische Zusammenfassung eines anderen LP-Markup wird funktionieren gut.

PBRT ist ein physikalisch basierten Raytracer in der gebildeten Stil für die Ausbildung der Informatik-Absolventen geschrieben ( und ich), ist es ein mäßig großer Maßstab System. Als nicht-Spezialist Programmierer der Dokumentation dieses Niveau ist ziemlich wichtig für das Verständnis, was das Programm macht und warum sie es tut.

Ich habe auch Zugang zu einem Forschungs-Renderer, in Java, die gut geschrieben ist, aber relativ nicht dokumentiert, aber für ein paar SIGGRAPH Papiere. Dies ist auch relativ verständlich, aber ich habe Zugang zu den Autoren auch.

Ich habe auch ImageJ ziemlich viel und sah unter verwendet die Haube zu Grunde liegenden Java -. es ist ziemlich schwierig, ohne eine Vorstellung von der zugrunde liegenden Philosophie zu folgen

In der Summe meine Sicht ist, dass Literarische Programmierung ist toll, wenn jemand die Zeit, es gut zu tun finden und dies ist wahrscheinlich in Ausbildung sein. Es ist schwierig, es zu sehen in kommerzieller Code Produktion getan. Ich bin skeptisch, was die Idee, dass Code völlig selbsterklärend sein.

Die Idee hinter Literarischer Programmierung ist Schwerpunkt auf der Dokumentation, mit dem Code durch die Dokumentation bestreut, anstatt Kommentare über Code gestreut.

Dies ist eine wesentlich andere Philosophie und Unterschiede wie längere Variablennamen, Namespaces und Klassen haben keinen Einfluss auf die Philosophie. Literarische Programmierung setzt sich sinnvolle Variablennamen.

Es skaliert auf größere Systeme, denn das grundlegende Verhältnis von Dokumentation zu Code linear mit der Größe des Codes skaliert werden kann.

Literate Programming wurde in einer Zeit entwickelt, in denen lange Variablen- und Funktionsnamen waren einfach nicht möglich. Aus diesem Grunde war Code wirklich nicht lesbar.

Offensichtlich hat seitdem viel passiert ist.

In der heutigen Welt, der Code selbst ist die Dokumentation, daher der Begriff „selbstdokumentierenden Code.“ Die Erkenntnis ist, dass kein Satz von Kommentaren oder externer Dokumentation immer synchron mit dem zugrunde liegenden Code bleiben. Also, Programmierer das Ziel von vielen der heutigen ist, den Code so zu schreiben, dass es für andere lesbar ist.

Versuchen NanoLP - LP erweiterbares Werkzeug, unterstützt viele Dokumentformate (Markdown, Openoffice, Kreolisch, TeX, asciidoc und andere), den Import eines anderen LP-Programme, Templating und vieles mehr. Der Benutzer kann eigene Befehle / Makros (in Python) hinzufügen, zum Beispiel spezielle Import zu tun, zum Beispiel von VCS ... http://code.google.com/p/nano-lp

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top