„Literate Programming“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Jakob5 (Diskussion | Beiträge) K Jakob5 verschob die Seite Literate programming nach Beschriebenes Programmieren: korrekte Bezeichnung: literate Programming kann man gut und treffend durch "Beschriebenes Programmieren" übersetzen. Nicht: Beschreibendes, da dann das Programmieren selbst beschreibend wäre. Beschrieben bedeutet, das Programmieren selbst ist "beschrieben" |
Jakob5 (Diskussion | Beiträge) K Übersetzung Markierung: Zurückgesetzt |
||
Zeile 1: | Zeile 1: | ||
Mit {{lang|en|'''literate programming'''}} |
Mit Beschriebenes Programmieren (engl. {{lang|en|'''literate programming'''}}, näherungsweise mit ''literarisches Programmieren'' übersetzbar) bezeichnet man das Schreiben von [[Computerprogramm]]en in einer Form, so dass sie vor allem für Menschen lesbar sind. |
||
Beschriebenes Programmieren bedeutet technisch gesehen, dass sowohl die [[Dokumentation]] als auch der [[Quelltext]] des Programms in einer gemeinsamen [[Datei]] vorhanden sind. Spezielle Werkzeuge sorgen dafür, dass sowohl der Quelltext als auch die Dokumentation aus dieser Datei extrahiert werden können. Da die für den Menschen geschriebene Dokumentation im Vordergrund steht, ist die Reihenfolge der Programmausdrücke so ausgelegt, dass diese verständlich dokumentiert werden können. |
|||
== Motivation == |
== Motivation == |
||
Zeile 7: | Zeile 7: | ||
== Geschichte == |
== Geschichte == |
||
Die angesprochene Problematik wurde jedoch schon früher erkannt: Die erste Programmierumgebung, die |
Die angesprochene Problematik wurde jedoch schon früher erkannt: Die erste Programmierumgebung, die veschriebenes Programmieren unterstützte, war das von [[Donald Knuth]] entwickelte [[WEB (Programmiersprache)|WEB]]. 1981 für die Implementierung des [[TeX]]-Systems entwickelt, benutzte es [[Pascal (Programmiersprache)|Pascal]] als Programmiersprache und TeX als Dokumentationsgenerator.<ref>Der Quellcode von TeX wurde in ''TeX: The program'' von Donald Knuth veröffentlicht</ref> Nachfolger von WEB war [[CWEB]], welches [[C (Programmiersprache)|C]] als Grundlage benutzte. |
||
== Eigenschaften eines Literate-Programming-Systems == |
== Eigenschaften eines Literate-Programming-Systems == |
||
Zeile 23: | Zeile 23: | ||
=== Spezielle Programmiersprachen === |
=== Spezielle Programmiersprachen === |
||
Die Programmiersprache [[Haskell (Programmiersprache)|Haskell]] erlaubt |
Die Programmiersprache [[Haskell (Programmiersprache)|Haskell]] erlaubt beschriebenes Programmieren bereits auf Quelltextebene: Kommentare und Programmanweisungen können beliebig gemischt werden. Im Gegensatz zu anderen Programmiersprachen wird bei dieser Strategie der Quelltext speziell markiert – und nicht die dazugehörigen Kommentare. Eine Umordnung ist jedoch auch hier nicht möglich. |
||
=== Generelle Textsatzsysteme === |
=== Generelle Textsatzsysteme === |
||
Durch geeignetes Verschränken von Quellcode und Kommentar kann man bei Einsatz geeigneter [[Textsatzsystem]]e |
Durch geeignetes Verschränken von Quellcode und Kommentar kann man bei Einsatz geeigneter [[Textsatzsystem]]e Beschriebenes Programmieren erreichen. So kann man zum Beispiel C-Quellcode so schreiben, dass er mit dem C-Compiler zu einem Programm kompiliert werden kann, aber mit [[troff]]/[[groff]] daraus auch ein Postscript-Dokument mit Grafiken erzeugt werden kann. Dabei sind gegenüber „echten“ Literate-Programming-Tools einige Einschränkungen in der Funktionalität in Kauf zu nehmen, da eine spezielle Software mehr Möglichkeiten anbieten kann als generelle Textsatzsysteme.<ref>[http://www.first.in-berlin.de/software/tools/multiple/ Beispiel für Einsatz von troff/groff für Beschriebenes Programmieren]</ref> |
||
=== Programming by Intention === |
=== Programming by Intention === |
Version vom 12. Dezember 2023, 15:19 Uhr
Mit Beschriebenes Programmieren (engl. literate programming, näherungsweise mit literarisches Programmieren übersetzbar) bezeichnet man das Schreiben von Computerprogrammen in einer Form, so dass sie vor allem für Menschen lesbar sind.
Beschriebenes Programmieren bedeutet technisch gesehen, dass sowohl die Dokumentation als auch der Quelltext des Programms in einer gemeinsamen Datei vorhanden sind. Spezielle Werkzeuge sorgen dafür, dass sowohl der Quelltext als auch die Dokumentation aus dieser Datei extrahiert werden können. Da die für den Menschen geschriebene Dokumentation im Vordergrund steht, ist die Reihenfolge der Programmausdrücke so ausgelegt, dass diese verständlich dokumentiert werden können.
Motivation
In Communications of the ACM fragt 1986 Jon Bentley: When was the last time you spent a pleasant evening in a comfortable chair, reading a good program? (deutsch: „Wann war das letzte Mal, dass Sie einen angenehmen Abend in einem bequemen Sessel verbracht haben und dabei ein gutes Programm gelesen haben?“) Der Hintergrund dieser Frage beruht auf der Tatsache, dass zwar so mancher Programmierer hervorragende Arbeit leistet und dementsprechend gute Programme erstellt, dass aber kaum ein Programmierer seine Programme ausreichend dokumentiert.
Geschichte
Die angesprochene Problematik wurde jedoch schon früher erkannt: Die erste Programmierumgebung, die veschriebenes Programmieren unterstützte, war das von Donald Knuth entwickelte WEB. 1981 für die Implementierung des TeX-Systems entwickelt, benutzte es Pascal als Programmiersprache und TeX als Dokumentationsgenerator.[1] Nachfolger von WEB war CWEB, welches C als Grundlage benutzte.
Eigenschaften eines Literate-Programming-Systems
Ein Literate-Programming-System ermöglicht Folgendes:
- Quellcode und Kommentare können miteinander gemischt werden.
- Die Quellcode-Abschnitte können in beliebiger Reihenfolge angeordnet werden. Das Literate-Programming-System setzt sie automatisch in der Reihenfolge zusammen, so dass sie ausgeführt werden können (tangle).
- Aus Programm und Beschreibung kann automatisch eine lesbare Dokumentation mit Inhaltsverzeichnis, Verweisen, Registern etc. erstellt werden (weave).
Verwandte Konzepte und Programme
Das ursprüngliche Konzept wurde schließlich von anderen Entwicklern übernommen und fand ebenfalls in anderen Programmiersprachen teilweise seinen Niederschlag.
Dokumentationsgeneratoren
Der Dokumentationsgenerator Doxygen (ähnlich wie Java mit Javadoc) setzt das Konzept teilweise um: Speziell formatierte Kommentare im Quelltext (in einer der unterstützten Programmiersprachen) können extrahiert und in eine Dokumentation einbezogen werden. Im Unterschied zum ursprünglichen Gedanken wird durch dieses Konzept nur eine detailgetreue Spezifikation des Quelltextes und seiner Struktur ermöglicht (Funktionsparameter können genau spezifiziert werden). Eine vollständige Dokumentation des Quelltextes hingegen ist mit diesen Programmen nicht möglich, auch gerade weil eine Umordnung des Programms nicht möglich ist.
Spezielle Programmiersprachen
Die Programmiersprache Haskell erlaubt beschriebenes Programmieren bereits auf Quelltextebene: Kommentare und Programmanweisungen können beliebig gemischt werden. Im Gegensatz zu anderen Programmiersprachen wird bei dieser Strategie der Quelltext speziell markiert – und nicht die dazugehörigen Kommentare. Eine Umordnung ist jedoch auch hier nicht möglich.
Generelle Textsatzsysteme
Durch geeignetes Verschränken von Quellcode und Kommentar kann man bei Einsatz geeigneter Textsatzsysteme Beschriebenes Programmieren erreichen. So kann man zum Beispiel C-Quellcode so schreiben, dass er mit dem C-Compiler zu einem Programm kompiliert werden kann, aber mit troff/groff daraus auch ein Postscript-Dokument mit Grafiken erzeugt werden kann. Dabei sind gegenüber „echten“ Literate-Programming-Tools einige Einschränkungen in der Funktionalität in Kauf zu nehmen, da eine spezielle Software mehr Möglichkeiten anbieten kann als generelle Textsatzsysteme.[2]
Programming by Intention
Programming by Intention (nicht zu verwechseln mit Intentionaler Programmierung) ist ein Konzept der Agilen Softwareentwicklung, welches besagt, dass bei der Implementierung von Methoden nicht wie üblich Algorithmen implementiert werden, sondern „nur“ Intentionen niedergeschrieben werden. Diese Intentionen entsprechen dann üblicherweise weiteren Hilfsmethoden oder einzeiligen Algorithmen. Damit wird sichergestellt, dass das Programm auch ohne Programmierkenntnisse äußerst einfach zu lesen ist.[3]
Software
- WEB (das Original)
- Noweb
- CWEB von Marc van Leeuwen
- funnelweb (basiert nicht auf WEB/CWEB)
- fweb (Weiterentwicklung von CWEB)
- LEO, „Literate Editor with Outlines“
Literatur
- Donald E. Knuth: Literate Programming. In: The Computer Journal. Band 27, Nr. 2, 1984, S. 97–111, doi:10.1093/comjnl/27.2.97 (Online PDF).
- Stefan Mintert: Nicht ohne einen Namen. Literate Programming mit XSLT. In: iX. Nr. 4, 2005, S. 135–137.
- Stefan Lindner: Literarisches Programmieren. Donald E. Knuths WEB-System. In: c’t. Nr. 10, 1990, S. 340.
Weblinks
Einzelnachweise
- ↑ Der Quellcode von TeX wurde in TeX: The program von Donald Knuth veröffentlicht
- ↑ Beispiel für Einsatz von troff/groff für Beschriebenes Programmieren
- ↑ Programming by Intention, Essential Skills for the Agile Developer (PDF; 731 kB)