Литературное, или грамотное программирование (ЛП; англ. Literate Programming) — концепция, методология программирования и документирования. Термин и саму концепцию разработал Дональд Кнут в 1981 году при разработке системы компьютерной вёрстки TeX.
Способ понять ЛП — вспомнить объяснения в курсах программирования, написанные фразами на «псевдокоде» на «человеческом языке». Они понятны, когда сам код труден, и скрывают под одной фразой-«оператором» множество других вложенных абстракций и/или программного кода на непосредственно машинном языке.
ЛП в некотором смысле есть «программирование на псевдокоде» произвольными фразами, которые затем раскрываются как точные макро с помощью утилиты из файла-текста, который включает в себя одновременно документированные текстовые объяснения концепций, сам код и псевдокод.
Содержание |
Другими словами, программа мыслится не как иерархия, top-down или bottom-up, но как «взаимозависимая сеть концепций» (отсюда название первой системы ЛП — «Web») и создается как «поток мысли», проходящий по этой сети в связном, логичном виде, что внешне делает форму описания похожей на литературное эссе. Программист, таким образом, отказывается от привязки к предписанному машиной порядку.
Система ЛП, которую Кнут предлагал как альтернативу «структурному программированию» 1970-х годов, несмотря на доказанную эффективность
, мало распространена из-за непонимания: многие думают, что ЛП — лишь система документирования или система форматирования обычных комментариев. На самом деле, программа практически без комментариев может быть ЛП, равно как и многословные примечания сами по себе не создают ЛП-подхода.Самое частое непонимание относится к роли системы макро, позволяющей строить произвольные системы абстракций над абстракциями и к изменению порядка следования кусков от машинно-ориентированного к тому, который требует мышление. Так, абсолютно неверно считать ЛП-программированием использование систем документирования интерфейсов вроде JavaDoc, doxygen, DOC++, autoduck, POD.
Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.
— http://community.livejournal.com/ru_perl/249441.html
Это заготовка статьи о программировании. Вы можете помочь проекту, исправив и дополнив её. |
Литературное программирование.