War es hilfreich?

Lösung

(Ich gehe davon aus Sie Donald Knuth Definition der gebildeten Programmierung verwenden.)

Der wesentliche Unterschied ist einer von sequence .

In eine regelmäßige Anwendung zu schreiben, gibt es Beschränkungen für die Reihenfolge, in der die Dinge auszudrücken.

Zur Veranschaulichung:

  • Alle Code für eine bestimmte Klasse hat in einem Ort zum Ausdruck gebracht werden, (Oder in einer sehr kleinen Zahl von Orten, zum Beispiel C # Teil-Klassen)
  • Sie den Code für ein All-Methode hat in einem Rutsch gegeben werden, in der richtigen Reihenfolge für die Ausführung
  • Abhängigkeiten müssen, bevor die Dinge abhängig erklärt werden auf sie
    (Variablen vor der Verwendung in den meisten Sprachen erklärt, Prozeduren / Funktionen vor der Verwendung deklariert in Pascal; Bibliothek Baugruppen vor anderen in .NET kompiliert)

Mit Literarischer Programmierung Sie sind von dieser Einschränkung befreit und befreit bis zu Ihren Konzepte ausdrücken in beliebiger Reihenfolge Sinn macht für Sie, wenn zu verwenden, um das Programm zu einem anderen Entwickler zu erklären.

Dies hat eine weitere Konsequenz - in einigen Formen Sie ein Konzept einmal zum Ausdruck bringen können (zum Beispiel „Alle Objekte werden das Property Ereignis ausgelöst, wenn geändert“) und hat, dass gewebt in Ihrer Anwendung in einem Myriaden von anderen Orten.

Für sehr einfache Programme, ein gebildetes Programm und ein gut kommentierte man könnten gleich aussehen -. Aber da die Komplexität des Systems wächst, beginnen die beide sehr unterschiedlich erscheinen

Andere Tipps

Hauptmotivation, wie für mich ist, dass jeder Programmierer Verwendung Papierblätter / Notebook zu ‚Design‘ Architektur, Ideen zu entwickeln, da er schreibt Schemata, Diagramme, einige mathematische versuchen und so weiter. Nach dem Programm Finishing, alle diesen Notebooks / Papierblätter verloren, so Wartbarkeit des Programms wird immer nach unten. Ich schrieb darüber in WiKi meiner LP-Tool NanoLP: http://code.google .com / p / nano-lp / wiki / AboutLP .

Zweite Motivation, nicht so explizit, ist weniger Bugs. Aber das ist nicht ‚theoretisch‘ Ding, es ist Erfahrung Tatsache (für mich) - wenn Sie ‚Denken‘ sind auf dem Papier, Zeichnen von Diagrammen, Algorithmen Schemata - Ihr Programm weniger Fehler haben. LP ist eine solche paper, sonst nichts.

Es gibt viele Entwickler, die nie etwas zieht, keine Kommentare auch (!), Sie schreiben Programm nur ... Schrecklich!

Und LP hilft Ihnen, eine gute Dokumentation zu erstellen (nicht in der formalen Art und Weise - Beschreibung auf Funktionen, es ist args, und was es gibt, und sicher, das ist gut bekannt mit Funktionssignatur, also warum diese Unterlagen benötigt ??), aber es hilft bei der semantischen REAL ACTUAL Dokumentation zu schreiben, mit Bildern, mit der Beschreibung der realen Aktionen ...

Viele Motivationen :) Und sicher ist manchmal besser nutzen nur Reverse LP (Doxygen, zum Beispiel), manchmal -. Echt LP, hängt von vielen Faktoren

Literate Programming basiert auf drei einfachen Anweisungen:

  1. Programmierer müssen Code schreiben, die der Computer verstehen kann
  2. Programmierer sollten Dokumentation schreiben, die Menschen verstehen können
  3. Wenn diese separate Dokumente ist es unvermeidlich, dass sie out-of-sync werden

Ja, in meiner Erfahrung, # 2 wird in der Regel kurzen Prozess. Ich habe zu zählen, wie oft QA hat mir gesagt, „der Doc sagt dies, aber der Code tut, dass, ist der Code nicht korrekt oder ist das doc out-of-date?“ Ich erwarte nicht, mein Arbeitsplatz aus dem üblichen heraus ist, in dieser Hinsicht. Zusätzlich kann in einer meiner ersten Projekte, ich habe versucht, die Dokumentation zu halten up-to-date wie die Hin-und-her mit den Beteiligten in wechselnden Anforderungen geführt. Dies war ausreichend zeitaufwendig, dass ich gesagt wurde, vom Management, mit der Dokumentation zu stoppen Unordnung und nur das Projekt zum Laufen zu bringen. Wir haben auf weniger ermüdend Dokumentationsprozesse gegangen, seitdem (Gott sei Dank!).

Wir haben Code-Review-Tools, wo, wenn wir eine Änderung am Code vornehmen, mehrere Personen die Änderungen sehen können, klar abgegrenzt und Kommentare können vorgenommen werden, Fragen zu stellen, Sachen zu erklären, Verbesserungen bieten. Wenn der Code mit Literate Programming Techniken geschrieben wurde, viel von dieser Frage / Antwort wäre überflüssig, weil die Erklärung enthalten würde.

Ein großer Teil der Mentalität der modernen Programmierung ist, dass der Code eine eigene Dokumentation sein sollte. Viele Experten argumentieren, dass, wenn Sie sich selbst zu finden, um Ihren Code in den Kommentaren zu erklären, sollten Sie wahrscheinlich den Code umformatieren (Variable / Funktionsnamen zu ändern, etc.), so dass die Kommentare nicht benötigte sind. Das finde ich in der Theorie groß zu sein, weniger praktisch in der Realität. Ich meine, wenn ich verwende Bibliotheken erstellt / von jemandem erhalten sonst, ihre Wahl der Methode / Funktion Namen mir nicht immer intuitiv. Zum Beispiel:

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

Wenn Sie nicht vertraut mit Set sind <> oder HashSet <>, können Sie nicht wissen, dass .retainAll () bedeutet, geben Sie mir die Kreuzung der beiden, mit dem Ergebnis, in dem modifizierten Set <>.

Schließlich, in der Regel Literate Programming können Sie Dinge brechen, so dass Sie dieses Stück Code in Isolation erklären kann, dann in-line es in diese andere Stück Code. Dies ist mehr in-line mit, wie das menschliche Verständnis funktioniert. Erklären Sie mir, wie das funktioniert, dann baut auf diesem Verständnis, das größere Bild zu erklären. Computer nicht wirklich interessieren; Sie können eine einzelne Funktion mit 1.000 Zeilen Code schreiben und es hat kein Problem, das Ganze zu begreifen. Gott Ihnen helfen, wenn Sie als Entwickler, dass zu halten haben.

Und das, wirklich, ist die Argumentation hinter Literate Programming. Code wird beibehalten müssen, ob sie die Fehler behoben werden oder zusätzliche Funktionen zu werden. Und wenn es nicht von jemandem anders verstanden werden, später, auf effiziente Art und Weise, wird es ersetzt werden. Es gibt viel zu viel „nur schreiben“ Code in dieser Welt. Literate Programming macht es leichter zu lesen und zu verstehen, was es wahrscheinlicher gehalten werden macht und verwendet wird, langfristig.

Und haben wir wirklich Zeit neu zu erfinden das Rad zu halten?

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