Грамотное программирование - PullRequest
10 голосов
/ 20 октября 2008

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

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

В идеале такой инструмент должен выглядеть так же, как Word 2007, но интегрирован в IDE. Когда кодер устанавливает курсор на абзац кода, он будет иметь все функциональные возможности, которые есть у нас в IDE.

Что такое хорошие инструменты для LP, в частности .NET и VS200x?

Ответы [ 9 ]

12 голосов
/ 20 октября 2008

Благодарность за то, что вы пытаетесь улучшить работу вашей команды. Пока вы пытаетесь это сделать, у вас есть преимущество перед теми, кто этого не делает.

Я однажды использовал Literate Programming для проекта. Это было действительно тяжело, и результаты были действительно хорошими. Выглядело как разумный компромисс.

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

Что ж, удачи на любом пути, который вы выберете.

6 голосов
/ 20 октября 2008

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

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

Это лучшее, что я могу предложить, посмотрите, что ваша команда думает об этой идее.

5 голосов
/ 20 октября 2008

+ 1 за попытку улучшить процесс вашей команды

-1 для перехода в тупик

при всем уважении к Кнуту, юнит-тесты лучше документации

  • модульные тесты не могут устареть
  • загрязнение кода прозой - огромное отвлечение при отладке
  • если ваш код действительно требует такой большой экспозиции, он, вероятно, плохо разработан и содержит ошибки
2 голосов
/ 20 октября 2008

Единственный неэзотерический язык, который я знаю, который фактически поддерживает LP, - это Haskell, и, честно говоря, я не слышал большого спроса на LP в современных языках программирования. Большинство людей, кажется, удовлетворены использованием встроенных форматов документации (javadoc, rdoc и т. Д.)

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

Я не знаю ни одного современного инструмента для грамотного программирования. Я занимался веб-программированием 15 лет назад.

Doxygen - хороший инструмент, но совсем не помогает с LP. Проблема в том, что LP фокусируется на написании кода для чтения людьми. Нет хорошей поддержки для последующего уточнения / раскрытия. LP нуждается в представлении исходного кода, который имеет структуру, отличную от атрибута / метода file-class в методе VS. NSpec может быть несколько лучше, но также слишком много снизу вверх.

1 голос
/ 20 октября 2008

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

Вот что мы тоже делаем. Хотя для большого количества кода, который мы производим, написание ясного, понятного человеку кода просто недостаточно. Что если вы хотите объяснить функцию рендеринга изображений? Лучше объяснить это, используя изображение, вместо того, чтобы писать половину страницы с описанием этого.

1 голос
/ 20 октября 2008

Мои извинения. Я должен был упомянуть, что мы уже используем Doxygen с автоматическим сценарием сборки документации. Мы используем тэги .NET doc, где это возможно, и там, где тэги .NET XML заканчиваются, мы смешиваем тэги doxygen. Это работает довольно хорошо. Дело в том, что при написании документации производство значительно сокращается: мы (люди) очень плохо пишем документацию без какого-либо редактора WYSIWYG. Не говоря уже о чувствительности к ошибкам.

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

Существует рынок для плагина VS, который делает это, я думаю.

Кроме того, Doxygen действительно кажется хорошим инструментом для активного использования метода LP для решения этой проблемы. Хотя он очень ограничен в использовании.

0 голосов
/ 23 ноября 2015

Основная идея грамотного программирования - писать программы в виде математических текстов. Можно определить, что означает каждое понятие, необходимое в программе, настолько четко, насколько это возможно, а затем объяснить, как это реализовано в языке и почему кто-то решил сделать это таким образом, а не каким-либо другим или что будет изменено позже.

Изменения также могут быть задокументированы путем комментирования фрагмента кода для внесения изменений и добавления нового, объясняющего причину изменения. Некоторые изменения могут зависеть от преобразования кода для оптимизации его производительности. Например, сделать один цикл вместо двух циклов в некотором C-подобном языке, изменить одно выражение на более простое и т. Д. Или что-то более сложное, например, изменить другую структуру данных для представления информации. Каждое изменение хорошо обосновано и задокументировано. О проблемной области программы можно понять, просто прочитав исходный код, глубоко поняв его. Как избежать ошибок из-за неясностей. Генезис программы полностью задокументирован, все можно вспомнить позже, потому что каждая мысль есть в программе.

Строго говоря, можно писать грамотные программы с простым текстом, если программа разработана, но набор текста в TeX / LaTeX является наиболее эстетичным, функциональным и простым способом, потому что нетрудно поместить разметку LaTeX в большинство программ. языки.

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

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

Существует пакет LaTeX, называемый списками, который прост в использовании. Вы можете начинать каждый фрагмент кода, закрывая комментарий и заканчивая кодом, открывая новый комментарий, насколько я помню, что-то вроде этого:

% /* begin of literate program 
\documentstyle{article}
\usepackage{listings}

\lstdefinitions here I do not remember the syntax. Here one can define 
                a replacement for startcode*/ and /*endcode for spaces.

more definitions here

\begin{document}
Your explanation including formulas like $s=c\times\sum_{i=0}^{i=N} x_i$ etc.
\begin{lstlising}
startcode*/

s=0
for(i=0;i<=N;i++) s=s+x[i];
s=c*s;

etc..

/*endofcode
\end{lstlisting}

More explanation ...
\end{document} 
% end of literate program */

в преамбуле текста вы можете определить startcode * / и / * endofcode как ключевые слова для замены пробелами в дополнительных определениях для пакета листингов. Смотрите документацию к пакету.

в конце источника LaTeX просто введите:

% end of literate program */ 

который является комментарием в LaTeX в начале вы можете разместить противоположное:

% /* start of program

Снятие знака комментария% LaTeX, когда вы хотите скомпилировать программу, и установка его снова при компиляции с помощью LaTeX.

Если вы никогда раньше не использовали LaTeX, вы можете начать с простого текста. Может быть, в сочетании с doxigen, чтобы проиндексировать все. Doxigen не нужен с LaTeX, потому что это система набора текста, где вы можете создать несколько индексов, гиперссылок, структурировать документацию как книгу.

Программы на Haskell обычно написаны в грамотном стиле. Может быть, это хорошая идея, чтобы просмотреть какую-то книгу или статью, чтобы увидеть ее.

0 голосов
/ 24 февраля 2010

Привет, автор романа,

Как кто-то упомянул DOxygen здесь: хотя это не допускает реального Грамотного программирования (в качестве примера ограничений, это не позволяет иметь переупорядоченное представление по источникам) , однако, кажется, что его собственные сторонники признают его ценным инструментом в этой области (адвокаты ЛП) : он упоминается в верхней части этой справочной страницы об инструментах ЛП : Инструменты грамотного программирования

...