Литературное программирование

Литературное программирование

Литературное Программирование или (английский термин намеренно двусмыслен) Грамотное программирование (англ. Literate Programming) — концепция, методология программирования и документирования. Термин и саму концепцию разработал Дональд Кнут в 1981 году при разработке системы компьютерной вёрстки псевдокоде» на «человеческом языке». Они понятны, когда сам код труден, и скрывают под одной фразой-"оператором" возможно множество других вложенных абстракций и/или программого кода на непосредственно машинном языке.

Л. П. в каком-то смысле есть «программирование на псевдокоде» произвольными фразами, которые затем раскрываются как точные макро с помощью простой utility из файла-текста, который включает в себя одновременно документированные текстовые объяснения концепций, и сам код и псевдокод.

Вкратце, смысл подхода в том, что:

  • ЛП есть система макро, создаваемая из фраз на обычном человеческом, которые становятся как бы «метаязыком» над конкретным языком программирования. Пользование этими фразами подобно объяснению алгоритмов на «псевдокоде», но в случае ЛП они становятся точными «новыми операторами» метаязыка.
  • Программа и документация более не пишутся как машинный код с примечаниями. Само конструирование программы идет в порядке, определяемой логикой мысли (или объяснений), где макро на 'псевдокоде' играют роль абстракций (над абстракциями и/или кодом), для ясности мысли. Т. е. меняется кардинально порядок следования в программе, он не машинный, а тот, который требует логика.
  • Технически ЛП делается с помощью маленькой utility, которая одной командой запускает пре-процессор, раскрывает все макро и «спутывает», «запутывает» («tangle») логическое изложение в машинный код, который потом можно компилировать или запускать (если подлежащий язык скрипт) как обычно. Другая команда создает («сплетает», «weave») из этого общего для программы и объяснений файла сформатированную документацию (для печати, веба и т. д.)

Другими словами программа мыслится не как иерархия, top-down или bottom-up, но как «взаимозависимая сеть концепций» (отсюда название первой системы ЛП её автором, Дональдом Кнутом, «Web») и создается как «поток мысли», проходящий по этой сети в связном, логичном виде, что внешне делает форму описания похожей на литературное эссе. Программист в общем отказывается от привязки к предписанному машиной порядку.


Эффективность подхода:Сам Кнут как известно отличающийся поразительной кропотливостью и способностью создавать огромные сложные системы в одиночку утверждает, что без этой техники его ум не смог бы справиться с задачей и охватить такой объем информации.


Ошибочные представления: Система Л. П., которую Кнут предлагал как альтернативу «структурному программированию» 1970х несмотря на доказанную эффективность мало распространена из-за непонимания: многие думают, что ЛП лишь система документирования, или система форматирования обычных комментариев, или что очень разговорчивые комментарии создают Л. Программу. На самом деле программа практически без комментариев может быть ЛП, равно как и болтливые примечания сами по себе не создают ЛП-подхода.

Самое частое непонимание относится к роли системы макро, позволяющей строить произвольные системы абстракций над абстракциями и к изменению порядка следования кусков от машинно-ориентированного к тому, который требует мышление.

Так, абсолютно неверно считать Л. П.-программированием использование систем документирования интерфейсов вроде JavaDoc, doxygen, DOC++, autoduck, POD.


Более подробная информация, разбор примера и ссылки на цитаты и программы-инструменты для Л. П. содержатся в англоязычной версии статьи

Пример Л.П

отрывок из примера из работы Кнута (пере-размеченного для «noweb» utility)

Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.

Дональд Кнут

Существующие инструменты


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Литературное программирование" в других словарях:

  • Грамотное программирование — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии …   Википедия

  • Парадигма программирования — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная …   Википедия

  • SWI-Prolog — Класс языка: Логическое программирование Тип исполнения: интерпретация Появился в: 1987 Автор(ы): Jan Wielemaker Релиз: 6.0.2 …   Википедия

  • Список научных журналов ВАК Минобрнауки России c 2011 года —   Это служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не ус …   Википедия

  • Список научных журналов ВАК Минобрнауки России на 2010-2011 года — …   Википедия

  • Югославия — (Jugoslavija, Jyгославиja)         Социалистическая Федеративная Республика Югославия, СФРЮ (Socialistička Federativna Republika Jugoslavija, Социjaлистичка Федеративна Република Jyгославиja).          I. Общие сведения          Ю.… …   Большая советская энциклопедия

  • Вентцель, Елена Сергеевна — В Википедии есть статьи о других людях с такой фамилией, см. Вентцель. Елена Сергеевна Вентцель Елена Сергеевна Долгинцева …   Википедия

  • Вентцель, Елена — Елена Вентцель Имя при рождении: Елена Сергеевна Долгинцева Псевдонимы: И. Грекова Дата рождения: 8 (21) марта 1907(19070321) Место рождения: Ревель Дата смерти: 15 апреля 2002 Место смерти: Москва …   Википедия

  • Вентцель Е. — Елена Вентцель Имя при рождении: Елена Сергеевна Долгинцева Псевдонимы: И. Грекова Дата рождения: 8 (21) марта 1907(19070321) Место рождения: Ревель Дата смерти: 15 апреля 2002 Место смерти: Москва …   Википедия

  • Вентцель Е. С. — Елена Вентцель Имя при рождении: Елена Сергеевна Долгинцева Псевдонимы: И. Грекова Дата рождения: 8 (21) марта 1907(19070321) Место рождения: Ревель Дата смерти: 15 апреля 2002 Место смерти: Москва …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»