Масштабное грамотное программирование? - PullRequest
16 голосов
/ 18 ноября 2008

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

Однако как масштабируется Literate Programming Scale? В целом, грамотное программирование - это всего лишь текст. Конечно, очень читаемый текст, но все же текст, и поэтому трудно следовать за большими системами. Например, я переработал большие части моего компилятора, чтобы использовать >> и некоторую магию для объединения шагов компиляции, потому что некоторые "x.register_follower (y); y.register_follower (z); y.register_follower (a); ... "стало действительно громоздким, и изменение его на x >> y >> z >> a сделало его немного лучше, хотя это тоже на пределе.

Итак, как Literate Programming масштабируется на более крупные системы? Кто-нибудь пытается это сделать?

Я бы хотел использовать LP для определения компонентов, которые взаимодействуют друг с другом, используя потоки событий, и объединять их все вместе, используя подмножество graphviz. Это было бы довольно естественным расширением для LP, поскольку вы можете извлечь документацию - диаграмму потока данных - из сети, а также действительно сгенерировать код из нее. Что ты думаешь об этом?

- Тета.

Ответы [ 8 ]

7 голосов
/ 18 ноября 2008

Книга «Физически обоснованный рендеринг» (pbrt.org) - лучший пример крупномасштабного грамотного программирования, о котором я знаю. Книга реализует полную систему рендеринга, и текст книги, и код raytracer генерируются из одного и того же «источника».

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

4 голосов
/ 31 марта 2010

"В целом, грамотное программирование все еще просто текст "

Ложные.

Диаграммы в порядке.

Я бы хотел использовать LP для определения компонентов, которые взаимодействуют друг с другом с использованием потоков событий

Это просто архитектура, и это хорошо.

Вы можете извлечь документацию - диаграмму потока данных - из сети, а также сгенерировать код на ее основе. Что вы думаете об этом?

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

Хороший пишущий инструмент (например, LaTex) может кодировать диаграмму в документе. Вероятно, вы могли бы найти путь к диаграмме из других частей документации.

Итог

В долгосрочной перспективе вам лучше создать диаграмму в виде сводки текста.

Почему?

Диаграммы намеренно исключают детали. Диаграмма - это сводка или обзор. Но, как источник кода, диаграммы ужасны. Чтобы предоставить все подробности, диаграммы становятся очень загроможденными.

Но схематичная сводка какой-то другой разметки LP будет работать нормально.

4 голосов
/ 18 ноября 2008

Я занимался грамотным программированием с WEB около 15 лет назад. Совсем недавно я попытался извлечь код из вики и сгенерировать документацию из среды Squeak Smalltalk.

Восходящая часть может быть относительно хорошо обработана путем генерации документов из структур TDD / BDD, но LP фокусируется на объяснении кода читателю.

Есть несколько проблем:

  • рассказываемая история различна для разных заинтересованных сторон / читателей;
  • структура проекта в большинстве сред не является структурой, необходимой для рассказывания историй;
  • отсутствует поддержка для последующего уточнения / раскрытия;
  • в дополнение к тексту необходима поддержка картинок;
  • Из комментариев в системе контроля версий можно узнать, как была построена система. История должна быть о том, как система могла быть построена (с задним числом).

Чтобы LP работал на больших системах, вам нужна лучшая поддержка IDE, чем вики или браузер объектов.

4 голосов
/ 18 ноября 2008

Отличный вопрос. Мотивация к грамотному программированию никогда не исчезнет, ​​но я думаю, что это следует рассматривать как изменчивый. Это значит «дать читателю передышку и научить его тому, что вы пытаетесь сделать». Я не думаю, что это означает «сделайте ваш код действительно многословным».

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

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

3 голосов
/ 11 января 2010

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

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

Он масштабируется до более крупных систем, поскольку базовое соотношение документации и кода линейно масштабируется с размером кода.

3 голосов
/ 18 ноября 2008

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

У меня также есть доступ к исследовательскому рендеру на Java, который хорошо написан, но относительно не документирован, но для нескольких статей SIGGRAPH. Это также относительно понятно, но у меня есть доступ и к авторам.

Я также довольно много использовал ImageJ и заглянул в тайну базовой Java - это довольно сложно понять, не зная основополагающей философии.

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

1 голос
/ 18 ноября 2008

Грамотное программирование было разработано в эпоху, когда длинные имена переменных и функций были просто невозможны. Из-за этого код действительно не был так удобочитаем.

Очевидно, с тех пор многое произошло.

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

0 голосов
/ 24 января 2013

Попробуйте NanoLP - LP расширяемый инструмент, поддерживает множество форматов документов (Markdown, OpenOffice, Creole, TeX, Asciidoc и другие), импорт других программ LP, создание шаблонов и многое другое. Пользователь может добавить собственные команды / макросы (в Python), например, чтобы выполнить специальный импорт, например, из VCS ... http://code.google.com/p/nano-lp

...