Литературное программирование Доналда Кнута
Тут по френд-лентам замелькало интервью с Кнутом, и там опять упоминается одно из малоизвестных его изобретений: "Литературное Программирование"
Интересно, а вы не пробовали писать как он предлагает?
Затем два простеньких инструмента (command-line utilities по 40-60кб, "tangle" и "weave") жуют исходник на "литературном программистском языке", т.е. смеси текста и программы с минимальной, простой разметкой как бы в виде комментариев и выдают - один чистый код (C у Кнута, но Haskel, ML, Perl, .... в поздних утилитах для ЛП - вообще любой язык), второй - красиво отформатированную статью-документацию. Отличие от обычных схем документирования в том, что его utilities позволяют менять последовательность и логику во время написания программы, освобождая её от машинной, и одновременно создавать любые иерархии абстракций на человеческом языке, которые потом будут правильно развернуты и вставлены в исходники Кнут выдумал это очень давно, и его оригинальные инструменты работают на основе его же собственного TeX'а (т.е. программист пишет свой исходник-эссе пользуясь TeXовой разметкой), но сегодня есть варианты для, например, "вики-синтаксиса". Главная идея Кнута в том, что такой стиль СИЛЬНО ПОМОГАЕТ делать ПРОЕКТЫ БОЛЬШОГО РАЗМЕРА. Это - огромная проблема. Человеческий мозг начинает затирать после первых 1000-1300 строчек, приходится сосредоточиваться значительно сильнее чтобы все помнить и не сажать ошибок, и далее приходится вводить особые способы деления на куски, выдумывания новых абстракций более высокого уровня чтобы затем писать на "новом языке" и т.д. Мой успешный опыт расширения горизонта охвата - "логическое программирование" (Пролог). Кнут утверждает, что "литературное программирование" (literate programming) обладает подобным эффектом
Пример взят из документации программы для "литературного программирования" "noweb" и написан на языке Ц, хотя сама методология работает не привязана ни к одному конкретному языку (и в документации, кстати, отмечалось её успешное применение с перлом)
Для примера давайте рассмотрим HTML-документ созданный из одного классического примера - микро-программы для подсчета букв, слов и строчек в файле, юникс "wc" utility.
|