Грамотное программирование

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Литературное Программирование или (английский термин намеренно двусмыслен) Грамотное программирование (англ. Literate Programming) — концепция, методология программирования и документирования. Термин и саму концепцию разработал Дональд Кнут в 1981 году при разработке системы компьютерной вёрстки TeX.

Возможно, что самый простой способ понять ЛП — это вспомнить объяснения в курсах программирования, написанные фразами на «псевдокоде» на «человеческом языке». Они понятны, когда сам код труден, и скрывают под одной фразой-"оператором" возможно множество других вложенных абстракций и/или программого кода на непосредственно машинном языке.

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

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

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

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


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


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

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

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


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

Пример Л.П

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

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

Дональд Кнут

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

  • WEB Система программирования для языка Паскаль
  • CWEB Версия WEB, разработанная для документирования С, C++ и Java
  • FWEB Система программирования для языка Фортран
  • Rambutan — Система программирования для языка Java

Языконезависимые инструменты


Дополнительная литература


ca:Programació literària

de:Literate programming en:Literate programming es:Programación literaria fa:برنامه‌نویسی ادیبانه fr:Programmation lettrée ja:文芸的プログラミング ko:문학적 프로그래밍 pl:Literate programming pt:Programação literária zh:文学编程

Личные инструменты

Served in 0.123 secs.