Jump to content

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

«Грамотное программирование» Дональда Кнута — основополагающая книга по грамотному программированию.

Грамотное программирование — это парадигма программирования, введенная в 1984 году Дональдом Кнутом , в которой компьютерная программа дается как объяснение того, как она работает, на естественном языке , например английском, с вкраплениями (встроенными) и традиционного фрагментами макросов исходного кода , из которого может быть сгенерирован компилируемый исходный код. [1] Этот подход обычно используется в научных вычислениях и в науке о данных для воспроизводимых исследований и открытого доступа . [2] Грамотные инструменты программирования сегодня используются миллионами программистов. [3]

Парадигма грамотного программирования, по замыслу Дональда Кнута, представляет собой отход от написания компьютерных программ в том порядке и порядке, который задает компилятор, и вместо этого дает программистам макросы для разработки программ в порядке, требуемом логикой и потоком их мыслей. [4] Грамотные программы пишутся как изложение логики на более естественном языке , в котором макросы используются для сокрытия абстракций и традиционного исходного кода , что больше похоже на текст эссе .

Инструменты грамотного программирования (LP) используются для получения из исходного файла двух представлений: одного, понятного компилятору или интерпретатору, «запутанного» кода, а другого для просмотра в виде форматированной документации , которая, как говорят, «соткана» из грамотного программирования. источник. [5] В то время как первое поколение грамотных инструментов программирования было специфичным для компьютерного языка , более поздние не зависят от языка и существуют за пределами отдельных языков программирования.

История и философия [ править ]

Грамотное программирование было впервые введено в 1984 году Дональдом Кнутом, который намеревался создавать программы, подходящие для человеческой литературы. Он реализовал его в Стэнфордском университете в рамках своего исследования алгоритмов и цифровой типографики . Реализация была названа « WEB », так как он считал, что это одно из немногих трехбуквенных слов английского языка, которые еще не применялись к вычислительной технике. [6] Однако это напоминает сложную природу программного обеспечения, аккуратно собранного из простых материалов. [1] Практика грамотного программирования значительно возродилась в 2010-х годах с использованием вычислительных ноутбуков , особенно в области науки о данных .

Концепция [ править ]

Грамотное программирование — это запись логики программы на человеческом языке с включенными (разделенными примитивной разметкой) фрагментами кода и макросами. Макросы в грамотном исходном файле — это просто подобные заголовку или пояснительные фразы на человеческом языке, которые описывают человеческие абстракции, созданные при решении задачи программирования и скрывающие фрагменты кода или макросы нижнего уровня. Эти макросы аналогичны алгоритмам псевдокода , которые обычно используются при преподавании информатики . Эти произвольные поясняющие фразы становятся новыми точными операторами, создаваемыми программистом на лету и образующими метаязык поверх основного языка программирования.

Препроцессор . используется для замены произвольных иерархий или, скорее, «взаимосвязанных «сетей» макросов» [7] создавать компилируемый исходный код одной командой («клубок»), а документацию — другой («переплетать»). Препроцессор также предоставляет возможность записывать содержимое макросов и добавлять к уже созданным макросам в любое место текста грамотного исходного файла программы, избавляя тем самым от необходимости держать в уме ограничения, налагаемые традиционными языками программирования. или прервать поток мыслей.

Преимущества [ править ]

По словам Кнута, [8] [9] Грамотное программирование обеспечивает более высокое качество программ, поскольку оно заставляет программистов явно излагать мысли, лежащие в основе программы, что делает плохо продуманные проектные решения более очевидными. Кнут также утверждает, что грамотное программирование обеспечивает первоклассную систему документации, которая не является дополнением, а естественным образом вырастает в процессе изложения мыслей во время создания программы. [10] Полученная документация позволяет автору в любой момент возобновить собственный мыслительный процесс, а другим программистам легче понять конструкцию программы. Это отличается от традиционной документации, в которой программисту предоставляется исходный код, следующий порядку, установленному компилятором, и он должен расшифровать мыслительный процесс, лежащий в основе программы, на основе кода и связанных с ним комментариев. Утверждается также, что метаязыковые возможности грамотного программирования облегчают мышление, давая более высокий вид кода «с высоты птичьего полета» и увеличивая количество концепций, которые разум может успешно сохранить и обработать. Применимость этой концепции к программированию в больших масштабах, к программам коммерческого уровня, подтверждается изданием кода TeX как грамотной программы. [8]

Кнут также утверждает, что грамотное программирование может привести к легкому портированию программного обеспечения в несколько сред, и даже приводит в качестве примера реализацию TeX. [11]

с созданием Контраст документации

Грамотное программирование очень часто понимают неправильно. [12] ссылаться только на форматированную документацию, созданную из общего файла, содержащего как исходный код, так и комментарии (что правильно называется генерацией документации ), или на объемные комментарии, включенные в код. Это обратная сторона грамотного программирования: хорошо документированный код или документация, извлеченная из кода, соответствует структуре кода, а документация встроена в код; в то время как при грамотном программировании код встроен в документацию, причем код соответствует структуре документации.

Это заблуждение привело к утверждениям, что инструменты извлечения комментариев, такие как Perl Plain Old Documentation или системы Java Javadoc , являются «грамотными инструментами программирования». Однако, поскольку эти инструменты не реализуют «сеть абстрактных концепций», скрывающуюся за системой макросов естественного языка, и не предоставляют возможность изменять порядок исходного кода с навязанной машиной последовательности на последовательность, удобную для человеческого разума. , их нельзя назвать грамотными инструментами программирования в том смысле, в каком их имел в виду Кнут. [12] [13]

Обзор [ править ]

В 1986 году Джон Бентли попросил Кнута продемонстрировать концепцию грамотного программирования для его Programming Pearls колонки в Communications of the ACM , написав программу в WEB. Кнут прислал ему программу для решения проблемы, ранее обсуждавшейся в колонке (выборка M случайных чисел в диапазоне 1.. N ), а также попросил «задание». Бентли дал ему задачу найти K наиболее распространенных слов в текстовом файле, для чего Кнут написал WEB-программу, которая была опубликована вместе с обзором Дугласа Макилроя из Bell Labs. Макилрой похвалил сложность решения Кнута, его выбор структуры данных (вариант хеш-три Фрэнка М. Ляна ) и презентацию. Он раскритиковал некоторые вопросы стиля, такие как тот факт, что центральная идея была описана в конце статьи, использование магических констант и отсутствие диаграммы, сопровождающей объяснение структуры данных. Макилрой также использовал обзор для критики самой задачи программирования, указав, что в Unix (разработанной в Bell Labs) существуют утилиты для обработки текста ( tr , sort , uniq и sed ) были написаны ранее и были «основными», и решение, которое было легко реализовать, отлаживать и повторно использовать, можно было получить, объединив эти утилиты в шестистрочном сценарии оболочки . В ответ Бентли написал следующее: [14]

[Макилрой] восхищается исполнением решения, но считает проблему инженерной. (Это, конечно, моя ответственность как постановщика задач; Кнут решил задачу, которую ему поставили, на основаниях, важных для большинства инженеров, — на зарплатах, предоставляемых постановщиками задач.)

Позже Макилрой признал, что его критика была несправедливой, поскольку он критиковал программу Кнута по инженерным соображениям, в то время как целью Кнута была только демонстрация грамотной техники программирования. [15] В 1987 году журнал Communications of the ACM опубликовал следующую статью, в которой иллюстрировало грамотное программирование с помощью программы на языке C, сочетающей художественный подход Кнута с инженерным подходом Макилроя, с критикой Джона Гилберта. [16]

Рабочий процесс [ править ]

Внедрение грамотного программирования состоит из двух этапов:

  1. Ткачество: создание подробного документа о программе и ее обслуживании.
  2. Запутывание: генерация машинного исполняемого кода

Плетение и запутывание выполняются на одном и том же источнике, чтобы они соответствовали друг другу.

Пример [ править ]

Классическим примером грамотного программирования является грамотная реализация стандарта Unix. wc программа для подсчета слов. Кнут представил CWEB- версию этого примера в главе 12 своей книги «Грамотное программирование» . Тот же пример позже был переписан для инструмента грамотного программирования Noweb . [17] Этот пример дает хорошую иллюстрацию основных элементов грамотного программирования.

Создание макросов [ править ]

Следующий фрагмент wc грамотная программа [17] показывает, как произвольные описательные фразы на естественном языке используются в грамотной программе для создания макросов, которые действуют как новые «операторы» в грамотном языке программирования и скрывают фрагменты кода или другие макросы. Обозначение разметки состоит из двойных угловых скобок (" <<...>>"), обозначающие макросы, " @" Символ, обозначающий конец раздела кода в файле NowEB. " <<*>>Символ " обозначает "корневой", самый верхний узел, с которого грамотный программист начнет расширять сеть макросов. Фактически, запись расширенного исходного кода может быть выполнена из любого раздела или подраздела (т.е. фрагмента кода, обозначенного как " <<name of the chunk>>=", со знаком равенства), поэтому один грамотный программный файл может содержать несколько файлов с машинным исходным кодом.

The purpose of wc is to count lines, words, and/or characters in a list of files. The
number of lines in a file is ......../more explanations/

Here, then, is an overview of the file wc.c that is defined by the noweb program wc.nw:
    <<*>>=
    <<Header files to include>>
    <<Definitions>>
    <<Global variables>>
    <<Functions>>
    <<The main program>>
    @

We must include the standard I/O definitions, since we want to send formatted output
to stdout and stderr.
    <<Header files to include>>=
    #include <stdio.h>
    @

Раскрытие кусков может производиться в любом месте грамотного текстового файла программы, не обязательно в том порядке, в котором они расположены во вмещающем куске, а так, как того требует логика, отраженная в поясняющем тексте, охватывающем всю программу.

Программа как сеть [ править ]

Макросы — это не то же самое, что «имена разделов» в стандартной документации. Макросы грамотного программирования скрывают за собой реальный код и могут использоваться внутри любых операторов машинного языка низкого уровня, часто внутри логических операторов, таких как " if", " while" или " case". Это можно увидеть в следующем wc грамотная программа. [17]

The present chunk, which does the counting, was actually one of
the simplest to write. We look at each character and change state if it begins or ends
a word.

    <<Scan file>>=
    while (1) {
      <<Fill buffer if it is empty; break at end of file>>
      c = *ptr++;
      if (c > ' ' && c < 0177) {
        /* visible ASCII codes */
        if (!in_word) {
          word_count++;
          in_word = 1;
        }
        continue;
      }
      if (c == '\n') line_count++;
      else if (c != ' ' && c != '\t') continue;
      in_word = 0;
        /* c is newline, space, or tab */
    }
    @

Макросы обозначают любой фрагмент кода или другие макросы и являются более общими, чем «фрагментирование» сверху вниз или снизу вверх или подразделение на подразделы. Дональд Кнут сказал, что когда он осознал это, он начал думать о программе как о сети различных частей. [1]

Порядок человеческой логики, а не логики компилятора [ править ]

В современной грамотной программе, помимо свободного порядка их представления, фрагменты макросов, однажды введенные с помощью " <<...>>=", можно вырастить позже в любом месте файла, просто написав " <<name of the chunk>>=" и добавление к нему дополнительного содержимого, как показано в следующем фрагменте ("плюс" добавляется форматировщиком документа для удобства чтения и отсутствует в коде). [17]

The grand totals must be initialized to zero at the beginning of the program.
If we made these variables local to main, we would have to do this  initialization
explicitly; however, C globals are automatically zeroed. (Or rather,``statically
zeroed.'⁠' (Get it?)

    <<Global variables>>+=
    long tot_word_count, tot_line_count,
         tot_char_count;
      /* total number of words, lines, chars */
    @

Запись хода мыслей [ править ]

Документация к грамотной программе создается в рамках написания программы. Вместо комментариев, предоставляемых в качестве примечаний к исходному коду, грамотная программа содержит объяснение концепций на каждом уровне, при этом концепции более низкого уровня откладываются на соответствующие места, что позволяет лучше передавать мысли. Отрывки грамотного wc выше показано, как переплетаются объяснение программы и ее исходный код. Такое изложение идей создает поток мысли, подобный литературному произведению. Кнут написал «роман», в котором объясняет код интерактивной фантастической игры Colossal Cave Adventure . [18]

Замечательные примеры [ править ]

  • Axiom , созданная на основе Scratchpad — системы компьютерной алгебры, разработанной IBM. Сейчас его разрабатывает Тим ​​Дейли, один из разработчиков блокнота. Axiom полностью написана как грамотная программа.

Грамотные практики программирования [ править ]

Первой опубликованной средой грамотного программирования была WEB , представленная Кнутом в 1981 году для его TeX системы набора текста ; он использует Pascal в качестве основного языка программирования и TeX для набора документации. Полный прокомментированный исходный код TeX был опубликован в книге Кнута TeX: The program , том B его 5-томного издания «Компьютеры и набор текста» . Кнут в частном порядке использовал грамотную систему программирования под названием DOC еще в 1979 году. Его вдохновили идеи Пьера-Арнуля де Марнеффа . [19] Бесплатный CWEB , написанный Кнутом и Сильвио Леви, адаптирован для WEB для C и C++ , работает на большинстве операционных систем и может создавать TeX и PDF документацию .

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

Имя Поддерживаемые языки Написано в Язык разметки Макросы и индивидуальный заказ Сотовое исполнение Комментарии
ВЕБ Паскаль Паскаль ТеХ Да Нет Первая опубликованная грамотная среда программирования.
ВЕБ-САЙТ С++ и С С ТеХ Да Нет Адаптирован ли WEB для C и C++ ?
NoWEB Любой C , AWK и значок LaTeX , TeX , HTML и Трофф Да Нет Он хорошо известен своей простотой и позволяет форматировать текст в HTML, а не через систему TeX.
Грамотный Любой Д Уценка Да Нет Поддерживает уравнения TeX. Совместимость с Vim ( literate.vim )
ВоронкаВеб Любой С HTML и ТеХ Да? Имеет более сложную разметку, но имеет множество более гибких опций.
НуВЕБ Любой С++ Латекс Он может преобразовать один источник LP в любое количество файлов кода. Он делает это за один вызов; у него нет отдельных команд плетения и спутывания. У него нет расширяемости, как у Noweb.
pyWeb Любой Питон Реструктурированныйтекст Да Соблюдает отступы, что делает их пригодными для использования в таких языках, как Python , хотя вы можете использовать их для любого языка программирования.
Молли Любой Перл HTML Нацелен на его модернизацию и масштабирование с помощью «складывания HTML» и «виртуальных представлений» кода. Он использует разметку «noweb» для грамотных исходных файлов.
Коднар Руби Это инструмент обратного программирования, доступный в виде Ruby Gem. Вместо того, чтобы машиночитаемый исходный код извлекался из грамотных источников документации, грамотная документация извлекается из обычных машиночитаемых файлов исходного кода.
Emacs организационный режим Любой Эмакс Лисп Обычный текст Требуется Бабель, [20] который позволяет встраивать блоки исходного кода с нескольких языков программирования [21] в одном текстовом документе. Блоки кода могут обмениваться данными друг с другом, отображать встроенные изображения или анализироваться в чистый исходный код с использованием ссылочного синтаксиса Noweb . [22]
Кофескрипт Кофескрипт Кофескрипт , JavaScript Уценка CoffeeScript поддерживает «грамотный» режим, который позволяет компилировать программы из исходного документа, написанного в Markdown, с отступами блоков кода. [23]
Кленовые листы Клен (программное обеспечение) XML Рабочие листы Maple — это независимая от платформы среда программирования, которая сочетает в себе текст и графику с живым кодом для символьных вычислений. «Кленовые листы» . www.maplesoft.com . Проверено 30 мая 2020 г.
Ноутбуки Вольфрам Вольфрам Язык Вольфрам Язык Блокноты Wolfram — это метод грамотного программирования, не зависящий от платформы, который сочетает текст и графику с живым кодом. [24] [25]
Детские площадки Swift (язык программирования) Предоставляет интерактивную среду программирования, которая оценивает каждый оператор и отображает результаты в реальном времени по мере редактирования кода. Playgrounds также позволяет пользователю добавлять язык разметки вместе с кодом, обеспечивающим заголовки, встроенное форматирование и изображения. [26]
Блокнот Jupyter , ранее Блокнот IPython Python и любой другой с ядром Jupyter Спецификация формата JSON для ipynb Нет Да Работает в формате блокнотов, объединяющих заголовки, текст (в том числе LaTeX), графики и т.п. с написанным кодом.
Плагин Jupytext для Jupyter Многие языки Питон Уценка в комментариях Нет Да
нбдев Python и Jupyter Блокнот nbdev — это библиотека, которая позволяет вам разрабатывать библиотеку Python в Jupyter Notebooks, помещая весь ваш код, тесты и документацию в одно место.
Юлия (язык программирования) Pluto.jl — это реактивная среда для записных книжек, позволяющая настраивать индивидуальный порядок. Но веб-макросы не поддерживаются. Да Поддерживает режим разработки iJulia, вдохновленный iPython.
Агда (язык программирования) Поддерживает ограниченную форму грамотного программирования «из коробки». [27]
язык программирования Ева Программы преимущественно прозаические. [28] Eve сочетает варианты Datalog и Markdown с живой графической средой разработки.
Блокноты R Markdown (или Блокноты R) R , Python , Джулия и SQL PDF , Microsoft Word , LibreOffice и форматы презентаций или слайд-шоу, а также интерактивные форматы, такие как HTML-виджеты. Нет Да [29]
Комната R , Python , Julia и Observable PDF , Microsoft Word , LibreOffice и форматы презентаций или слайд-шоу, а также интерактивные форматы, такие как HTML-виджеты. Нет Да [29]
Сплетение Р PDF [30] [31]
Книтр Р LaTeX , PDF , LyX , HTML , Markdown , AsciiDoc и reStructuredText. [32] [33]
кодовая коса Пандок , Руст , Джулия , Питон , R , Баш Питон Уценка Нет Да
Пплетение Питон PDF Нет
Живой редактор MATLAB МАТЛАБ Уценка Нет Да
Интернет C , C++ , Информировать 6 , Информировать 7 С , CWEB ТеХ , HTML Да? Используется для написания языка программирования Inform с 2004 года. [34]
Меркурий Питон Питон , TypeScript Спецификация формата JSON для ipynb Mercury превращает Jupyter Notebook в интерактивные вычислительные документы. Их можно публиковать в виде веб-приложений , информационных панелей, отчетов, REST API или слайдов. Выполненный документ можно экспортировать как отдельный HTML или PDF файл . Документы могут быть запланированы для автоматического исполнения. Наличие документа и виджетов контролируется с помощью YAML-заголовка в первой ячейке блокнота.
наблюдаемый JavaScript JavaScript , TypeScript TeX ( КаТекс ), HTML Хранится в облаке с веб-интерфейсом. Содержимое можно публиковать на веб-сайтах. Версия контролируется; платформа определяет свои собственные операции контроля версий. Ячейки кода могут быть организованы вне порядка ; наблюдаемые блокноты автоматически построят граф выполнения ( DAG ). Богатая стандартная библиотека, реализованная с использованием современных функций JavaScript . Ячейки из разных наблюдаемых блокнотов могут ссылаться друг на друга. Библиотеки Npm можно импортировать на лету.
Ганеша JavaScript , TypeScript JavaScript Уценка Позволяет Node.js загружать грамотные модули, представленные файлами Markdown, содержащими код JavaScript или TypeScript, перемежающийся богато отформатированной прозой. Поддерживает объединение грамотных модулей для браузеров при использовании сборщиков интерфейсных модулей Rollup или Vite.
JWEB C , C++ , JavaScript , TypeScript JavaScript Уценка Да Нет

Другие полезные инструменты включают в себя:

  • Текстовый редактор Leo — это структурный редактор, который поддерживает дополнительную разметку Noweb и CWEB. Автор Leo сочетает в себе два разных подхода: во-первых, Leo — редактор-схема, помогающий управлять большими текстами; во-вторых, Лео включает в себя некоторые идеи грамотного программирования, которое в чистом виде (т. е. в том виде, в котором оно используется веб-инструментом Кнута или такими инструментами, как «noweb») возможно только при некоторой степени изобретательности и использовании редактора. способом, не совсем предусмотренным его автором (в модифицированных узлах @root). Однако это и другие расширения (@file nodes) делают структурное программирование и управление текстом успешным и простым и в некотором смысле похожим на грамотное программирование. [35]
  • Язык программирования Haskell имеет встроенную поддержку полуграмотного программирования. Компилятор/интерпретатор поддерживает два расширения имен файлов: .hs и .lhs; последний означает грамотный Haskell.
Грамотные скрипты могут представлять собой полный исходный текст LaTeX, при этом он может быть скомпилирован без каких-либо изменений, поскольку интерпретатор компилирует текст только в среде кода, например:
% here text describing the function:
\begin{code}
fact 0 = 1
fact (n+1) = (n+1) * fact n
\end{code}
here more text
Код также можно разметить в стиле Ричарда Берда, начиная каждую строку с символа «больше» и пробела, а перед и заканчивая фрагмент кода пустыми строками.
Латекс listings пакет обеспечивает lstlisting среду, которую можно использовать для украшения исходного кода. Его можно использовать для определения code среду для использования в Haskell для печати символов следующим образом:
\newenvironment{code}{\lstlistings[language=Haskell]}{\endlstlistings}

\begin{code}
comp :: (beta -> gamma) -> (alpha -> beta) -> (alpha -> gamma)
(g `comp` f) x = g(f x)
\end{code}
который можно настроить для получения:
Хотя пакет не предоставляет средств для организации фрагментов кода, исходный код LaTeX можно разделить на разные файлы. см . в руководстве по листингам . Обзор
  • Система грамотного программирования Web 68 использовала Algol 68 в качестве основного языка программирования, хотя в препроцессоре не было ничего, что могло бы заставить использовать этот язык. [36]
  • Механизм настройки Text Encoding Initiative , который позволяет ограничивать, изменять или расширять схему TEI , позволяет пользователям смешивать текстовую документацию с фрагментами спецификации схемы в своем универсальном формате «Один документ делает все» . На основе этой прозаической документации можно создавать схемы и конвейеры моделей обработки, а парадигма грамотного программирования Кнута считается источником вдохновения для такого способа работы. [37]

См. также [ править ]

  • Генератор документации - противоположность грамотному программированию, где документация встроена в исходный код и генерируется из него.
  • Интерфейс ноутбука - среда виртуального ноутбука, используемая для грамотного программирования.
  • Sweave и Knitr - примеры использования инструмента грамотного программирования, подобного noweb, на языке R для создания динамических статистических отчетов.
  • Самодокументируемый код — исходный код, который можно легко понять без документации.

Ссылки [ править ]

  1. Перейти обратно: Перейти обратно: а б с v В х и С Кнут, Дональд Э. (1984). «Грамотное программирование» (PDF) . Компьютерный журнал . 27 (2). Британское компьютерное общество : 97–111. дои : 10.1093/comjnl/27.2.97 . Проверено 4 января 2009 года .
  2. ^ Шульте, Эрик (2012). «Многоязычная вычислительная среда для грамотного программирования и воспроизводимых исследований» (PDF) . Журнал статистического программного обеспечения . 46 (3). дои : 10.18637/jss.v046.i03 . Архивировано (PDF) из оригинала 9 ноября 2014 года . Проверено 30 мая 2020 г.
  3. ^ Кери, Мэри Бет (апрель 2018 г.). «История в блокноте: исследовательская наука о данных с использованием грамотного инструмента программирования». CHI '18: Материалы конференции CHI 2018 года по человеческому фактору в вычислительных системах . АКМ. стр. 1–11. дои : 10.1145/3173574.3173748 .
  4. ^ "У меня было ощущение, что нисходящая и восходящая - это противоположные методологии: одна больше подходит для представления программ, а другая - для создания программ. Но после приобретения опыта работы с WEB я пришел к выводу, что в этом нет необходимости. выбрать раз и навсегда между нисходящим и восходящим, поскольку программу лучше всего рассматривать как сеть, а не как дерево. Иерархическая структура присутствует, но самое важное в программе — ее структурные связи. сложная часть программного обеспечения состоит из простых частей и простых отношений между этими частями; задача программиста состоит в том, чтобы сформулировать эти части и эти отношения в том порядке, который лучше всего подходит для человеческого понимания, а не в каком-то жестко определенном порядке, таком как сверху вниз или снизу вверх. " — Дональд Э. Кнут , Грамотное программирование [1]
  5. ^ Если вспомнить, что первая версия инструмента называлась WEB, то становится очевидной забавная литературная отсылка, скрытая Кнутом в этих названиях: «О, какую запутанную паутину мы плетём, когда впервые практикуемся обманывать» – сэр Вальтер Скотт , в Песнь VI, Станца 17 Мармиона (1808 г.), эпической поэмы о битве при Флоддене в 1513 году. Сама цитата появилась в качестве эпиграфа в статье Джона Бентли и Дональда Кнута в мае 1986 года в одной из классических колонок Programming Pearls в журнале Communications. АКМ, том 29 номер 5 на стр.365
  6. ^ «Грамотное программирование» (PDF) . archive.computerhistory.org . Проверено 3 июня 2019 г.
  7. ^

    «Макросам WEB разрешено иметь не более одного параметра. Опять же, я сделал это в интересах простоты, потому что заметил, что большинство приложений с несколькими параметрами фактически могут быть сведены к случаю с одним параметром. Например, предположим, что вы хочу определить что-то вроде... Другими словами, имя одного макроса может быть параметром другого макроса. Этот конкретный трюк позволяет..."

    Дональд Э. Кнут , Грамотное программирование [1]
  8. Перейти обратно: Перейти обратно: а б Кнут, Дональд Э .; Бинсток, Эндрю (25 апреля 2008 г.). «Интервью с Дональдом Кнутом» . Проверено 4 января 2009 года . Однако для меня грамотное программирование — это, безусловно, самое важное, что получилось в результате проекта TeX . Это не только позволило мне писать и поддерживать программы быстрее и надежнее, чем когда-либо прежде, и было одним из моих величайших источников радости с 1980-х годов, но иногда оно было просто незаменимо. Некоторые из моих основных программ, такие как мета-симулятор MMIX, невозможно было бы написать с использованием какой-либо другой методологии, о которой я когда-либо слышал. Эта сложность была слишком сложной для моего ограниченного мозга; без грамотного программирования все предприятие потерпело бы неудачу. ... Грамотное программирование — это то, что вам нужно, чтобы подняться над обычным уровнем достижений.
  9. ^

    «Еще одна удивительная вещь, которую я узнал при использовании WEB, заключалась в том, что традиционные языки программирования заставляли меня писать худшие программы, хотя я и не осознавал, что делаю. Моя первоначальная идея заключалась в том, что WEB будет просто инструментом для документирования, но Я действительно обнаружил, что мои WEB-программы лучше, чем программы, которые я писал на других языках».

    Дональд Э. Кнут , Грамотное программирование [1]
  10. ^

    «Таким образом, язык WEB позволяет человеку выражать программы в порядке «потока сознания» . TANGLE способен смешать все в порядке, который требует компилятор PASCAL. Эта особенность WEB, возможно, является его самым большим достоинством; она делает WEB -написанная программа гораздо более читабельна, чем та же программа, написанная чисто на PASCAL, даже если последняя программа хорошо прокомментирована. И то, что не надо зацикливаться на вопросе сверху вниз или снизу вверх, так как программист. теперь я могу рассматривать большую программу как сеть, которую нужно исследовать в психологически правильном порядке, — это, пожалуй, величайший урок, который я извлек из своего недавнего опыта».

    Дональд Э. Кнут , Грамотное программирование [1]
  11. ^ « Устная история Дональда Кнута» - интервью с Эдом Фейгенбаумом» (PDF) . archive.computerhistory.org . Проверено 7 декабря 2018 г.
  12. Перейти обратно: Перейти обратно: а б Доминус, Марк-Джейсон (20 марта 2000 г.). «POD — это не грамотное программирование» . Perl.com . Архивировано из оригинала 2 января 2009 года.
  13. ^

    «Я выбрал имя WEB отчасти потому, что это было одно из немногих трехбуквенных слов английского языка, которое еще не применялось к компьютерам. Но со временем я стал чрезвычайно доволен этим именем, потому что думаю, что Сложную программу действительно лучше всего рассматривать как сеть, аккуратно собранную из простых материалов. Мы понимаем сложную систему, понимая ее простые части и понимая простые отношения между этими частями и их непосредственными соседями. мы выражаем программу как сеть идей, мы можем подчеркнуть ее структурные свойства естественным и приятным способом».

    Дональд Э. Кнут , Грамотное программирование [1]
  14. ^ Бентли, Джон ; Д. Е. Кнут; Доктор медицины Макилрой (1986). «Перлы программирования» (PDF) . Коммуникации АКМ . 29 (6): 471–483. дои : 10.1145/5948.315654 . S2CID   10128137 .
  15. ^ Махони, Майкл С. (18 августа 1989 г.). «Интервью с доктором медицины Макилроем» .
  16. ^ Ван Вик, Кристофер Дж.; Хэнсон, Дэвид Р .; Гилберт, Джон (июль 1987 г.). «Грамотное программирование» (PDF) . Коммуникации АКМ . 30 (7): 593–599. дои : 10.1145/28569.315738 . S2CID   5328652 .
  17. Перейти обратно: Перейти обратно: а б с д Рэмси, Норман (13 мая 2008 г.). «Пример Новеба» . Проверено 4 января 2009 года .
  18. ^ Игра, также известная как ADVENT , изначально была написана Кроутером примерно в 700 строках кода FORTRAN; Кнут переформулировал это в терминологию WEB. Он доступен на сайте literateprogramming.com или на веб-сайте Кнута . Архивировано 20 августа 2008 г. на Wayback Machine .
  19. ^ де Марнеф, Пьер Арнул (декабрь 1973 г.). Холонское программирование – опрос (отчет). Университет Льежа , факультет компьютерных наук. п. 135.
  20. ^ «Вавилон: Введение» .
  21. ^ «Вавилонские языки: перенаправление» . orgmode.org .
  22. ^ «Вавилон: Введение» .
  23. ^ Ашкенас, Джереми. «Грамотный CoffeeScript» . Проверено 13 ноября 2014 г.
  24. ^ Вехи в области компьютерных наук и информационных технологий Эдвина Д. Рейли, стр. 157.
  25. ^ «Блокноты Вольфрам» . www.wolfram.com . Проверено 28 ноября 2018 г.
  26. ^ «Справочник по форматированию разметки: обзор разметки» . разработчик.apple.com . Проверено 15 ноября 2015 г.
  27. ^ «Грамотная Агда» . Агда Вики . Проверено 26 марта 2017 г.
  28. ^ «Ева и грамотное программирование» . Справочник Евы . Архивировано из оригинала 24 мая 2017 г. Проверено 25 мая 2017 г.
  29. Перейти обратно: Перейти обратно: а б Ихуэй Се; Джозеф Дж. Аллер ; Гаррет Гролемунд (30 декабря 2023 г.), R Markdown: The Definitive Guide , Chapman & Hall , Wikidata   Q7
  30. ^ Лейш, Фридрих (2002). «Sweave, Часть I: Смешивание R и LaTeX: краткое введение в формат файлов Sweave и соответствующие функции R» (PDF) . Р Новости . стр. 28–31 . Проверено 22 января 2012 г.
  31. ^ Пинеда-Крч, Марио (17 января 2011 г.). «Радость от Sweave - Руководство для начинающих по воспроизводимым исследованиям с помощью Sweave» (PDF) . Проверено 22 января 2012 г.
  32. ^ Се, Ихуэй (2015). Динамические документы с R и Knitr, 2-е издание . Чепмен и Холл/CRC. ISBN  9781498716963 .
  33. ^ Се, Ихуэй. «knitr: универсальный инструмент для создания динамических отчетов в R» (PDF) . Гитхаб .
  34. ^ «ganelson/inweb: Современная система грамотного программирования» . Гитхаб . 17 июня 2022 г.
  35. ^ Рим, Эдвард К. (2 сентября 2008 г.). «Домашняя страница Лео» . Проверено 3 апреля 2015 г.
  36. ^ Маунтбеттен, Сиан. «Web 68: Грамотное программирование на Algol 68» . Архивировано из оригинала 20 января 2013 года . Проверено 1 января 2013 г.
  37. ^ «Руководство ТЭИ» . Консорциум ТЭИ . Архивировано из оригинала 22 августа 2018 г. Проверено 23 августа 2018 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 189325559a7f2168f241a0685e6e645e__1713625260
URL1:https://arc.ask3.ru/arc/aa/18/5e/189325559a7f2168f241a0685e6e645e.html
Заголовок, (Title) документа по адресу, URL1:
Literate programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)