Literate programming

Literate programming

Mit literate programming (engl. mit literarisches Programmieren übersetzbar) bezeichnet man das Schreiben von Computerprogrammen in einer Form, so dass sie vor allem für Menschen lesbar sind. Dies steht im Gegensatz zur konventionellen Ansicht, dass Programme hauptsächlich für den Computer lesbar sein sollen.

Literate programming 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.

Inhaltsverzeichnis

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 literate programming 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:

  1. Quellcode und Kommentare können miteinander gemischt werden.
  2. 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).
  3. 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 dessen 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 literate programming 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 Textersatzsysteme

Durch geeignetes Verschränken von Quellcode und Kommentar kann man bei Einsatz geeigneter Textsatzsystemen Literate Programming erreichen.

So kann man zum Beispiel C-Quellcode so schreiben, daß 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 Textersatzsysteme.[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 äußerst einfach zu lesen ist, und man zum Lesen beinahe keine Programmierkenntnisse benötigt.[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"

Einzelnachweise

  1. Der Quellcode von TeX wurde in TeX: The program von Donald Knuth veröffentlicht
  2. Beispiel für Einsatz von troff/groff für Literate Programming
  3. Programming by Intention, Essential Skills for the Agile Developer

Literatur

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Literate programming — is a philosophy of computer programming based on the premise that a computer program should be written similar to literature, with human readability as a primary goal. According to this philosophy, programmers should aim for a ldquo;literate… …   Wikipedia

  • Programming language — lists Alphabetical Categorical Chronological Generational A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that… …   Wikipedia

  • Programming paradigm — Programming paradigms Agent oriented Automata based Component based Flow based Pipelined Concatenative Concu …   Wikipedia

  • Comment (computer programming) — For comments in Wikipedia markup, see Help:Wiki markup#Character formatting and WP:COMMENT. An illustration of Java source code with prologue comments indicated in red and inline comments in green. Program code is in blue …   Wikipedia

  • Pascal (programming language) — Pascal Paradigm(s) imperative, structured Appeared in 1970 Designed by Niklaus Wirth Typing discipline static, strong, safe …   Wikipedia

  • Topic outline of computer programming — For a more comprehensive list, see the List of computer programming topics. Computer programming is a subfield of computer science. This is not a list of topics about the BASIC programming language. The following outline is provided as an… …   Wikipedia

  • Outline of computer programming — The following outline is provided as an overview of and topical guide to computer programming: Computer programming – process of designing, writing, testing, debugging, and maintaining the source code of computer programs, which is written in one …   Wikipedia

  • Haskell (programming language) — Haskell Paradigm(s) functional, lazy/non strict, modular Appeared in 1990 Designed by Simon Peyton Jones, Lennart Aug …   Wikipedia

  • Intentional programming — In computer programming, intentional programming is a collection of concepts which enable software source code to reflect the precise information, called intention , which programmers had in mind when conceiving their work. By closely matching… …   Wikipedia

  • Concept programming — is a programming paradigm focusing on how concepts, that live in the programmer s head, translate into representations that are found in the code space. This approach was introduced in 2001 by Christophe de Dinechin with the XL Programming… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”