Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
«Грамотное программирование » Дональда Кнута - основополагающая книга по грамотному программированию.

Грамотное программирование является парадигма программирования введенный Дональдом Кнутом , в котором компьютерная программа дается объяснение ее логики в естественном языке , например, английский язык, вперемешку с фрагментами из макросов и традиционного исходного кода , из которого компилируется может быть создан исходный код. [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 году Джон Бентли попросил Кнута продемонстрировать концепцию грамотного программирования, написав программу на WEB. Кнут составил 8-страничный монолитный список, который был опубликован вместе с критикой Дугласа Макилроя из Bell Labs. Макилрой похвалил сложность решения Кнута, его выбор структуры данных ( хэш-дерево Фрэнка М. Ляна ), но отметил, что более практичное, гораздо более быстрое в реализации, отладке и изменении решение проблемы требует всего шести строк сценария оболочки путем повторного использования стандартные утилиты Unix . Макилрой заключил: [14]

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

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

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

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

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

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

LaTeX [ править ]

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

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

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

 Цель  в  туалет  является  для  подсчитывать  строки ,  слова ,  и / или  символы  в  виде  списка  из  файлов .  Число из строк в виде файла есть ........ / больше объяснений /        Вот ,  то ,  это  обзор из в файле туалет . с , что будет определено с помощью в noweb программы туалет . северо - запад : << * >> = << Header файлы , чтобы включить >> << Определения >> << Глобальные переменные >> << Функции >> << основной программы >> @                          Мы  должны  включать  в  стандартные  I / O  определений ,  так как  мы  хотим ,  чтобы  отправить  форматированный  вывод на  стандартный вывод  и  стандартный поток ошибок .  << Заголовочные  файлы  для  включения >> =  #include  <stdio.h> @

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

Программируйте как веб-макросы - это не просто названия разделов [ править ]

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

 Присутствует  фрагмент ,  который  делает  на  подсчет ,  был на  самом деле  один  из простейших для записи . Мы посмотрим на каждого персонажа и изменения состояния , если оно начинается или заканчивается на слово .                  << Scan  файл >> = в  то время как  ( 1 )  {  << заполняющей  буфер ,  если  он  является  пустым ;  перерыв  в  конце  из  файла >>  с  =  * PTR ++ ;  if  ( c  >  ''  &&  c  <  0177 )  {  / * видимые коды ASCII * /  if  ( ! in_word )  {  word_count ++ ;  in_word  =  1 ; }  продолжить ;  }  if  ( c  ==  '\ n' )  line_count ++ ;  иначе,  если  ( c  ! =  ''  &&  c  ! =  '\ t' )  continue ;  in_word  =  0 ;  / * c - это новая строка, пробел или табуляция * /  }  @

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

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

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

 Общие итоги должны быть обнулены в начале программы.Если бы мы сделали эти переменные локальными для main, нам пришлось бы выполнить эту инициализациюявно; однако глобальные переменные C автоматически обнуляются. (Вернее, `` статическиобнулен ''. (Получил?) << Глобальные переменные >> + = long tot_word_count, tot_line_count, tot_char_count; / * общее количество слов, строк, символов * / @

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

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

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

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

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

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

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

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

  • Текстовый редактор Лео является оконтуривание редактор , который поддерживает дополнительный noweb и CWEB разметку. Автор Leo смешивает два разных подхода: во-первых, Leo - это редактор-контурный редактор, который помогает управлять большими текстами; во-вторых, Лео включает в себя некоторые идеи грамотного программирования, которые в чистом виде (т. е. в том виде, в котором они используются веб-инструментом Knuth или такими инструментами, как «noweb») возможны только при определенной степени изобретательности и использовании редактора. способом, не совсем предусмотренным его автором (в модифицированных узлах @root). Однако это и другие расширения (узлы @file) делают структурное программирование и управление текстом успешным и простым и в некотором смысле похожим на грамотное программирование. [34]
  • Язык программирования Haskell имеет встроенную поддержку полуграмотного программирования. Компилятор / интерпретатор поддерживает два расширения имени файла: .hsи .lhs; последний означает грамотный Haskell.
Грамотные скрипты могут быть полным исходным текстом LaTeX, в то же время он может быть скомпилирован без изменений, потому что интерпретатор компилирует текст только в кодовой среде, например
% здесь текст, описывающий функцию: \ begin { code } fact  0  =  1 fact  ( n + 1 )  =  ( n + 1 )  *  fact  n \ end { code }здесь больше текста
Код также может быть помечен в стиле Ричарда Берда, начиная каждую строку с символа «больше» и пробела, предшествуя и заканчивая фрагментом кода пустыми строками.
Пакет LaTeX listingsпредоставляет lstlistingсреду, которую можно использовать для украшения исходного кода. Его можно использовать для определения codeсреды, которая будет использоваться в Haskell для печати символов, например:
\ newenvironment { code } { \ lstlistings [язык = Haskell] } { \ endlstlistings }\ начать { код } комп  ::  ( бета  ->  гамма )  ->  ( альфа  ->  бета )  ->  ( альфа  ->  гамма ) ( г  ` комп `  ф )  х  =  г ( е  х ) \ конец { код }
можно настроить, чтобы получить что-то вроде этого:
Хотя пакет не предоставляет средств для организации фрагментов кода, исходный код LaTeX можно разделить на разные файлы. См. Обзор в руководстве по спискам .
  • Система грамотного программирования Web 68 использовала Algol 68 в качестве основного языка программирования, хотя в препроцессоре не было ничего, что заставляло бы использовать этот язык. [35]
  • Механизм настройки программы Text Encoding Initiative, который позволяет ограничивать, изменять или расширять схему TEI , позволяет пользователям смешивать прозаическую документацию с фрагментами спецификации схемы в их универсальном формате One Document Does-it-all . Из этой прозаической документации можно сгенерировать схемы и конвейеры моделей обработки, а парадигма грамотного программирования Кнута упоминается как источник вдохновения для этого способа работы. [36]

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

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

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

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

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

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

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

    -  Дональд Э. Кнут , Literate Programming [1]
  10. ^

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

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

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

    -  Дональд Э. Кнут , Literate Programming [1]
  14. ^ Бентли, Джон ; DE Knuth; MD Макилрой (1986). «Жемчужины программирования» (PDF) . Коммуникации ACM . 29 (6): 471–483. DOI : 10.1145 / 5948.315654 . S2CID 10128137 .  
  15. Махони, Майкл С. (18 августа 1989 г.). «Интервью с М. Д. Макилроем» .
  16. ^ Ван Вик, Кристофер Дж .; Хэнсон, Дэвид Р .; Гилберт, Джон (июль 1987). «Грамотное программирование» (PDF) . Коммуникации ACM . 30 (7): 593–599. DOI : 10.1145 / 28569.315738 . S2CID 5328652 .  
  17. ^ a b c d Рэмси, Норман (13 мая 2008 г.). «Пример новеба» . Проверено 4 января 2009 года .
  18. ^ Игра, также известная как ADVENT , изначально была написана Crowther примерно на 700 строках кода FORTRAN; Кнут переделал это в идиому WEB. Его можно найти на сайте literateprogramming.com или на сайте Кнута. Архивировано 20 августа 2008 года на Wayback Machine .
  19. ^ де Марнеф, Пьер Арнуль (декабрь 1973). «Программирование Холона - Отчет PMAR 73-23». Льежский университет , Служба информатики. Cite journal requires |journal= (help)
  20. ^ https://orgmode.org/worg/org-contrib/babel/intro.html
  21. ^ https://orgmode.org/worg/org-contrib/babel/languages.html#langs
  22. ^ https://orgmode.org/worg/org-contrib/babel/intro.html#literate-programming
  23. ^ Ashkenas, Джереми. «Грамотный CoffeeScript» . Проверено 13 ноября 2014 года .
  24. ^ Вехи компьютерных наук и информационных технологий Эдвин Д. Рейли, стр. 157.
  25. ^ «Записные книжки Wolfram» . www.wolfram.com . Проверено 28 ноября 2018 .
  26. ^ «Справочник по форматированию разметки: Обзор разметки» . developer.apple.com . Проверено 15 ноября 2015 .
  27. ^ "Грамотная Агда" . Agda Wiki . Проверено 26 марта 2017 .
  28. ^ «Ева и грамотное программирование» . Ева Справочник . Архивировано из оригинала на 2017-05-24 . Проверено 25 мая 2017 .
  29. ^ Yihui Xie; Джозеф Дж. Аллер ; Гарретт Гролемунд (2019), R Markdown: The Definitive Guide , Chapman & Hall , Wikidata Q76441281 
  30. ^ Leisch, Фридрих (2002). «Sweave, Часть I: Смешивание R и LaTeX: Краткое введение в формат файла Sweave и соответствующие функции R» (PDF) . R News . 2 (3): 28–31 . Проверено 22 января 2012 года .
  31. Пинеда-Крч, Марио (17 января 2011 г.). «Радость Sweave - Руководство для начинающих по воспроизводимым исследованиям с Sweave» (PDF) . Дата обращения 22 января 2012 .
  32. ^ Се, Yihui (2015). Динамические документы с R и knitr, 2-е издание . Чепмен и Холл / CRC. ISBN 9781498716963.
  33. ^ Се, Ихуэй. «knitr: универсальный инструмент для создания динамических отчетов на языке R» (PDF) .
  34. ^ Ре, Эдвард К. (2 сентября 2008). "Домашняя страница Льва" . Проверено 3 апреля 2015 года .
  35. Mountbatten, Sian. «Web 68: грамотное программирование с помощью Algol 68» . Архивировано из оригинального 20 -го января 2013 года . Проверено 1 января 2013 года .
  36. ^ «Рекомендации TEI» . Консорциум TEI . Архивировано из оригинала на 2018-08-22 . Проверено 23 августа 2018 .

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

  • Сьюэлл, Уэйн (1989). «Создание программы: грамотное программирование в WEB» . Ван Ностранд Рейнхольд. ISBN 0-442-31946-0.
  • Кнут, Дональд Э. (1992). Грамотное программирование . Калифорния: Центр изучения языка и информации Стэнфордского университета . ISBN 978-0-937073-80-3.
  • Гуари, Эйтан М. (1994). TeX и LaTeX: рисование и грамотное программирование . Макгроу Хилл. ISBN 0-07-911616-7. (включает программное обеспечение)
  • Нёрмарк, Курт (13 августа 1998 г.). «Грамотное программирование - вопросы и проблемы» . Университет Ольборга .
  • Шульте, Эрик (январь 2012 г.). «Многоязычная вычислительная среда для грамотного программирования и воспроизводимых исследований» (PDF) . 46 (3). Журнал статистического программного обеспечения. DOI : 10,18637 / jss.v046.i03 .
  • Торговый центр, Дэниел. «Грамотное программирование» .
  • Уолш, Норман (15 октября 2002 г.). Грамотное программирование в XML . XML 2002. CiteSeerX  10.1.1.537.6728 . Архивировано из оригинала на 2008-05-11.

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

  • Грамотное программирование в WikiWikiWeb
  • Часто задаваемые вопросы по грамотному программированию на CTAN