Литературное программирование
Литературное программирование.
Содержание
1 Общая информация
- Автором метода является Дональд Кнут [1].
- Распространённое название: Грамотное программирование.
- Литературное программирование — метод разработки, нацеленный на повышение познаваемости программ и основанный на встраивании исходного кода в документацию.
- Познаваемость программы — свойство исходного кода и сопроводительной документации, которое характеризует объём умственных усилий, затрачиваемых читателем на понимание программы в целом и её частей в частности.
- Объектом воздействия в литературном программировании является мозг человека, а не компьютер.
1.1 Идеология метода
- Программа оформляется как книга.
- Исходный код разбивается на кусочки и рассредотачивается по документации.
- Кусочки кода связываются посредством гиперссылок.
- Первична документация.
- За основу берётся описание программы, в которое вставляются кусочки исходного кода.
- Для встраивания кода в документацию применяется специальная разметка текста.
2 Принципы реализации методики литературного программирования
- Программа составляется из кусочков (фрагментов).
- Каждый фрагмент содержит блок кода и описывающую его документацию.
- Фрагменты связываются гиперссылками.
- Все фрагменты хранятся вместе, в одном физическом источнике.
2.1 Служебные программы
- Программа
weave
обрабатывает источник и формирует документ, предназначенный человеку.- В этом документе программа представлена в виде книги для чтения, в которой код перемежается с описанием.
- Программа
tangle
извлекает из того же самого источника исходные коды и формирует из них файлы, предназначенные компилятору.- В этих файлах программа представлена в том виде, как того требует целевой язык программирования.
3 Реализации для разных языков программирования
3.1 Julia
3.1.1 Literate.jl
- Репозиторий: https://github.com/fredrikekre/Literate.jl
- Документация: https://fredrikekre.github.io/Literate.jl
3.1.2 Weave.jl
- Репозиторий: https://github.com/JunoLab/Weave.jl
- Документация: https://weavejl.mpastell.com
3.1.3 Documenter.jl
- Репозиторий: https://github.com/JuliaDocs/Documenter.jl
- Документация: https://documenter.juliadocs.org
4 Утилиты для литературного программирования
4.1 Entangled
- Сайт: https://entangled.github.io/
- Репозиторий: https://github.com/entangled/entangled.py/
5 Статьи
- Knuth, D. E. (1984): Literate Programming [1]
- Schulte, E. et al. (2012): A multi-language computing environment for literate programming and reproducible research [2]
- Kery, M. B. et al. (2018): The story in the notebook [3]
6 Библиография
Литература
1. Knuth, D.E. Literate Programming / D.E. Knuth // The Computer Journal. – 1984. – Т. 27. – № 2. – Сс. 97–111. DOI: 10.1093/comjnl/27.2.97.
2. Schulte, E. A Multi-Language Computing Environment for Literate Programming and Reproducible Research / E. Schulte, D. Davison, T. Dye, C. Dominik // Journal of Statistical Software. – 2012. – Т. 46. – № 3. DOI: 10.18637/jss.v046.i03.
3. Kery, M.B. The Story in the Notebook / M.B. Kery, M. Radensky, M. Arya и др. // Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems. – ACM, 2018. – Сс. 1–11.