Frage

Lemerkörperprogrammierung Hat gute Ideale. Warum denkst du, dass dies nicht Mainstream ist? Es ist, weil es nicht geliefert wurde?

War es hilfreich?

Lösung

Ich sah es zum ersten Mal in einem Buch von Knuths Schriften und fand es ordentlich aussah. Dann versuchte ich, die literarische Programmieranzeige zu verwenden, um zu verstehen, was im Programm vor sich ging, und fand es härter als es aussah. Es war vielleicht so, dass ich es zu gewohnt war, Programmlisten zu durchlaufen, aber es schien verwirrend zu sein.

Dann schaute ich auf den Quellcode, und das hat mich dann und dort ausgeschaltet. Ich müsste lernen, Programme auf völlig neue Weise zu schreiben, mit weniger Korrespondenz zwischen dem Programmtext und dem, was der Compiler sah, und keinen entsprechenden Nutzen sah.

Darüber hinaus können Menschen lange und überzeugende Argumente schreiben, dass der Code X macht, wenn er tatsächlich y macht, und ich bin auf meinen Anteil an irreführenden Kommentaren gestoßen. Ich habe eine Vorliebe dafür entwickelt, den Code zu lesen, um zu sehen, was er ziemlich früh macht. Das Programmieren von gebildeter Programmierung ist das Gegenteil davon.

Andere Tipps

Ich würde das beschuldigen Netzwerkeffekt. Damit andere Personen Ihren Code und Ihre Dokumentation bearbeiten können, müssen sie in der Lage sein, ihn zu verstehen.

Dies treibt die Menschen von so etwas wie CWEB/Noweb weg, da Sie sie unter Verwendung von ihnen unter Verwendung von Tex und der programmspezifischen Syntax über der Programmiersprache, die Sie für das Projekt verwenden, lernen müssen. Dies kann als enorme Zeitverschwendung angesehen werden, insbesondere wenn sie keine der mathematischen Arten benötigen, die für Tex in erster Linie so groß ist. (Und für viele Anwendungsprogrammierer werden sie es wirklich nicht brauchen.) Stattdessen bevorzugen sie so etwas wie die XML-Kommentare von Visual Studio, da dies bereits beliebt und gut etabliert ist.

Die Orte, an denen ich gesehen habe, dass die Programmierung von Literate -Programmen startete, befinden sich im wissenschaftlichen/statistischen Computer, wo die meisten Programmierer ein erhebliches Training (AKA -Doktoranden) in Mathematik, CS oder Statistiken haben und somit bereits mit Latex entfacht werden. Die Dokumentation, die sie schreiben, enthält eher viele komplizierte Formeln, die am besten in Tex geschrieben werden, und sie sind eher programmiert in R. Der Anteil der R -Programmierer, die über Sweave Bescheid wissen, ist definitiv viel höher als beispielsweise die Anteil der C -Programmierer, die über CWEB Bescheid wissen.

Ich war fasziniert von dem Konzept der gebildeten Programmierung in den späten 90er Jahren während des Studiums, und ich bin immer noch fasziniert von Knuths -Ansatz für Programmierung und Artensettung. Nichts als der Beste wird tun.

Das von Knuth entworfene Literate -Programmiersystem hat viel mehr als sofort auf das Auge getroffen, nämlich viele Mängel in der zugrunde liegenden Programmiersprache, die das aus dem Knuths -Quelldokument generierte Code -Erzeugungstool generierte, nämlich Standard -Pascal.

Für diejenigen, die das Glück haben, nicht Standard -Pascal ausprobiert zu haben, sind hier einige der Highlights.

  • Um einen Einzelpass-Compiler zu erleichtern, heißt es in der Sprachspezifikation, dass alle Erklärungen in einer bestimmten Reihenfolge eintreten mussten. Aus der Wikipedia -Seite: "Jede Prozedur oder Funktion kann eigene Erklärungen von GOTO -Labels, Konstanten, Typen, Variablen und anderen Verfahren und Funktionen haben, die alle in dieser Reihenfolge sein müssen." Dies bedeutete, dass Sie könnten nicht Gruppieren Sie Ihre Sachen logisch in der Quelldatei.
  • Die Handhabung des Saitens war mühsamer als in Ebene C.
  • Kennungen konnten keine willkürliche Länge haben.
  • Viele weitere Dinge, an die ich mich nicht mehr erinnern kann.

All diese Dinge bedeuteten im Grunde, dass Knuth eine bessere Programmiersprache brauchte (also erfand er eine) und es verwendete Pascal als Versammlungssprache.

Die meisten modernen Sprachen können diese Dinge ohne große Anstrengungen tun, wodurch ein großer Teil der Arbeit entfernt wird, die das Programmierprogrammieren lösen sollte.

Auch moderne Sprachen sind ausdrucksstarker, was zulässt, dass mehr angenommen werden, dass sie in den Code selbst eingebaut werden.

Also, was bleibt übrig? Die Fähigkeit, eine Typ -Set -Form der Dokumentation aus dem Quellcode zu generieren, und DAS existiert heute.

Denken Sie nur an Javadoc - Die Java -Laufzeit -API ist vielleicht das größte gebildete Programm, das heute verfügbar ist (außer dass der Code nicht tatsächlich präsentiert wird, aber es hätte sein können, wenn Java von Anfang an offen gewesen wäre). Siehe zum Beispiel die Präsentation des Sammlungsrahmens auf http://download.oracle.com/javase/6/docs/api/java/util/collection.html

Ich glaube, ähnliche Systeme existieren für .NET und andere Mainstream -Programme.

Eine Sache, die ich entdeckte, als ich in den 90er Jahren mit gebildeter Programmierung mit gebildeten Programmen geraten war, war, dass es sehr leidenschaftliche Menschen anzog, die genau das Richtige tun wollten - und es bestand darin, ihr eigenes Programmiersystem zu schreiben, weil keiner für sie gut genug war. Noweb war ein guter Versuch, das abzuschneiden, indem ich für alle einen gut gewöhnlichen Nenner mit dem am wenigsten gebräuchlichen Nenner bereitstellte, obwohl ich selbst dann die meiste Zeit meiner LP-Zeit damit verbracht habe, einen hübschen Drucker dafür zu entwickeln ...

Ein weiteres Problem ist, dass es wirklich anti-Agile ist. In gewisser Weise ist es gut, verlangsamt zu werden, weil es Sie zwingt, im Voraus mehr nachzudenken und die Dinge beim ersten Mal richtig zu machen. Auf der anderen Seite bedeutet das sorgfältig dokumentieren, wenn Und wenn Sie warten, bis Ihr Code verhärtet ist, bevor Sie ihn lp-ifizieren, haben Sie eine mehrtägige Dokumentationsaufgabe, die Sie wirklich in Ihren Spuren aufhalten kann.

Nach meinen bescheidenen Meinungen haben viele Unternehmen eine Kultur, die den Zielen der Lehrprogrammierung entspricht: Sie wollen schnellere Ergebnisse (sie weinen nur in der Qualität, wenn die App in Produktion ist). Nach meiner eigenen Erfahrung hatten meine Chefs sich weigern zu verstehen, dass schnellere Ergebnisse nicht "ein Programm, das am Tag nach meiner Anfrage nachgefragt wurde." Wenn ein Entwickler nicht damit beschäftigt ist, seine Tastatur zu tippen, arbeitet er nicht, "verschwendet seine Zeit im Design-nicht-sense". Ja, ich weiß, mein Chef ist ein Arschloch.

Codierer schreiben Code nicht Englisch.

Codierer schreiben nicht gerne Dokumentation, da dies nicht hilft, den Code auszuführen.

Codierer sind nicht gut darin, Dokumentation zu schreiben, weil es ein schlechtes Medium ist, um ihre Ideen auszudrücken.

Das Programmieren von gebildeten Programmen scheint die Idee zu sein, die Dokumentation auf die nächste Ebene zu bringen, in der der Code eher ein Nachdenken ist. Vielleicht würde es funktionieren, aber für die meisten Coder sieht es nach widerlicher Dokumentation aus.

Hauptsächlich, weil die Leute sehr dumm sind. Offensichtliches Zeugnis, zu dem ein endloser Strom von Vermutungen und Missverständnissen von jungen Menschen über die Natur dieser einfachen Technik ist.

Die Leute nehmen LP als: (a) eine Methode der Dokumentation (b) Eine Methode zum Schreiben einiger polierter Aufsätze, die einige besondere Fähigkeiten oder Talente erforderlich machen (c) haben einfach keine Ahnung usw. etc. etc. usw.

LP ist jedoch einfach: (1) Schreiben von Programmen in einer Mischung aus Code und Phrasen in einer (= jeder) menschlichen Sprache, wobei letztere für andere Codebrocken und/oder enthaltene Phrasen stehen. Genau genau das, was Autoren von unzähligen Programmierlehrbüchern tun. Und (2) es ist ein einfacher Präprozessor, der diese Phrasen im Menschen erweitert (die als Namen von eingeschlossenen Unterroutinen geworden sind), um das Ergebnis der vom Compiler erforderlichen Reihenfolge zu enträtseln (oder Dolmetscher). Andernfalls kann man den geschriebenen Text um ein anderes kleines Dienstprogramm erweitern, um Formatierungssymbole aufzunehmen, um die "gebildete Quelle" in einen schönen gut formatierten, lesbaren Text zu verwandeln.

Junge Menschen probieren diese äußerst einfache Idee nie aus - und phantasieren oder stellen Sie sich gefälschte Gründe vor, warum sie es nie versuchen oder tun werden.

Grundsätzlich die Hauptidee des Programmierens "in Pseudocode" in einer menschlichen Sprache und dann mit einem einfachen Vorprozessor -Dienstprogramm bei der Verwaltung des Aufmerksamkeit In Funktionen/Unterprogramme, die Sie nicht in den Details verlieren müssen, sondern für die Maschinenausführung völlig unnötig sind.

Es gibt 2 Aspekte der gebildeten Programmierung, die ich tun Der Wunsch wurde in die Mainstream -Programmierung eingebaut - eingebettete Bilder (z. B. Design -Diagramme) und Zeiger auf frühere und alternative Versuche (z. B. "Der Grund, warum es so ist, dass ich so anders versucht habe und es nicht funktioniert hat, weil ..." ). Beide Aspekte können mit Dokument- und URIs behandelt werden.

Weil die Logik der Programme nicht gleich funktioniert, wie wir sprechen. Ein Programm hat einen gut spezifizierten Fluss, Bedingungen und Schleifen.

Nachdem ich nach Lot codiert hatte, denke ich in diesen Begriffen. Mein Gehirn verwandelt Probleme in die Zieldomäne des ausführbaren Code. Und es ist für mich viel effizienter, dies in einer normalerweise Programmiersprache aufzuschreiben, als den zusätzlichen Transformationsschritt ausführen zu müssen, um meine Programme zu schundieren.

Tatsächlich glaube ich, dass meine Programme bereits gebildet sind ... Sprecherkennungen, gute Funktionsnamen, Kommentare, in denen ich etwas Hackery gemacht habe, die ich nach ein paar Monaten selbst nicht sofort verstehen würde.

Abschließend: Mein Java -Code ist für sich selbst besser gebildet, da jede "gebildete" Programmierung sein will.

Ich kam, um das Programmieren umgekehrt zu lesen - ich habe davon geträumt, den Code organisiert zu haben, da er mir in den Sinn gekommen ist, nicht wie der Compiler es erfordert. ich fand Löwe Fast ideal für diesen Zweck. Es unterstützt auch, dass sich die Dateien im Außenbereich verfolgen. Diese Dateien müssen kein spezielles Markup enthalten, damit ich Leo für mich selbst verwenden kann, ohne dass andere im Team wissen müssen. Diese Funktion - "@Shadow Trees" - ist sehr vielversprechend, obwohl immer noch ein bisschen fehlerhaft, aber mehr Augäpfel braucht. Und es behebt auch das Problem "Oh nein, alles in einer großen Datei", indem sie alles in Baumriss organisiert und durch Unterstützung für externe Dateien organisiert.

Im Gegensatz zum Namen geht es bei der "gebildeten Programmierung" überhaupt nicht um Dokumentation. Ich habe nicht mehr Dokumentation als zuvor. Es geht darum, Struktur zu haben, die mir hilft nicht verloren gehen. Ich schwöre, insbesondere bei der Verwaltung von Behemoth -JSP -Dateien (und trotz Leo war ursprünglich in erster Linie für Python gedacht und es wird keine Unterstützung für die JSP -Sprache - ich muss die Datei manuell in Leo Tree teilen!).

Ich sehe es als ein wertvolles Lehrwerkzeug, bei dem eine Dissertation auf Code geschrieben werden kann, und dann ein Snippets von Arbeitscode, das darin verschachtelt ist, um die Leser über das Wie, was und das Whys des Codes zu unterweisen.

Außerhalb eines rein pädagogischen Umfelds denke ich, dass nur Knuth wirklich versteht, wie man es am besten benutzt.

Es ist das Schlimmste aller Welten - Sie müssen ein sehr korrektes, hochspezifisches Computerprogramm in einer sehr unspezifischen Sprache = Englisch schreiben. Sie müssen es also sorgfältig mit genau den richtigen Sätzen schreiben - also können Sie genauso gut nur Code schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
scroll top