deep-econom (deep_econom) wrote,
deep-econom
deep_econom

Categories:

Грамотное программирование, литературное программирование (англ. Literate Programming)

Это неформальный метод разработки программ от Дональда Кнута.
--
Фрагменты из статьи «Literate Programming», 1983 г:

Я верю, что пришло время для существенно лучшего документирования
программ, и что мы можем достигнуть этого сделав программы
литературными произведениями.

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

Практикующего литературное программирование можно рассматривать как
эссеиста, основная забота которого — экспозиция и совершенство
стиля. Такой автор, со словарем в руке, заботливо выбирает имена
переменных и объясняет для чего нужна каждая из них.
--

---
Грамотное программирование (ГП; англ. Literate Programming) — концепция, методология программирования и документирования, в которой программа состоит из прозы на естественном языке вперемежку с макроподстановками и кодом на языках программирования[1]. Термин и саму концепцию предложил Дональд Кнут в 1981 году при разработке системы компьютерной вёрстки ΤΕΧ.

Грамотное программирование подобно объяснениям на лекциях по программированию, использующим фразы на «псевдокоде» на естественном языке. Они вносят ясность в сложный код и скрывают под одной фразой множество других вложенных абстракций и программного кода на формальном языке программирования.
https://ru.wikipedia.org/wiki/Грамотное_программирование

-----
Лирическое отступление о литературном метапрограммировании
Первая серия:

https://vk.com/wall-152484379_1275

И в тему:

https://habr.com/ru/company/edison/blog/314294/

https://habr.com/ru/post/105371/

Концепцию литературного программирования приписывают Дональду Кнуту, причём это случилось где-то в 1970-х, когда он делал TeX.

Мы пишем, по сути, совершенно абстрактный псевдокод -- еще один мета-уровень по отношению и к императивному, и к объектному, и к функциональному, и к декларативному, и к метапрограммированию! Этот псевдокод "транслируется" в набор макросов и документацию. Пожалуй, лучше всего эта концепция реализуется на конкатенативных языках.

То есть мы фактически естественно пишем литературный "рассказ", который затем преобразуется в код целевого языка. Кнут тут отказался и от проектирования "сверху вниз" и от проектирования "снизу вверх", назвав такую программу взаимозависимой сетью концепций.

Недостаток подхода, наверное, именно в неформальности, и соответственно в отсутствии инструментов и фреймворков. Литературное программирование если и применяется в мэйнстриме, то в основном для создания отдельных модулей программы, на практике используется прежде всего для автоматического документирования, но это совсем неправильно. Однако именно литературное программирование как реализация концепции метапрограммирования на уровне programming-in-small смотрится одним из единичных сильнейших решений.

(продолжение на сайте https://vk.com/wall-152484379_1275 )
----
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 2 comments