2009-08-07 2 views
4

Таким образом, я использовал модуль scribble/lp написать свою первую программу грамотного использования PLT-схемы:Интуитивная мотивация для грамотного программирования?

#lang scribble/lp 
(require scribble/lp) 

<<lp_scheme.ss>> 

@chunk[<squarefunction> 
     (define (f x) 
     (* x x))] 

Ничего полезного там, конечно. Теперь я задаюсь вопросом, почему я просто не буду использовать простые комментарии, а не грамотные конструкции программирования. Любые мнения приветствуются. Было бы здорово, если бы кто-то, у кого, вероятно, было больше подверженности/exp. с ним, возможно, дать более интуитивное объяснение различий между хорошо документированным кодом и кодом, написанным с использованием грамотных программ программирования.

ответ

9

(я предполагаю, что вы используете определение Дональда Кнута грамотного программирования.)

Ключевым отличием является один из последовательности.

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

В качестве иллюстрации:

  • Всего код для конкретного класса должен быть выражен в одном месте
    (или в очень небольшом количестве мест, например, C# частичных классов)
  • всего кода для один метод должен быть задан за один раз, в правильном порядке для выполнения
  • Зависимости должны быть объявлены до того, как они зависят от них
    (переменные, объявленные перед использованием на большинстве языков, процедуры/функции, объявленные перед использованием в Паскале ; библиотечные сборки, скомпилированные перед другими в .NET)

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

Это еще одно следствие - в некоторых формах, вы можете выразить концепцию раз (скажем, «Все объекты будут вести огонь событие PropertyChanged при изменении»), и есть, что тканые в вашем приложении в мириады других местах ,

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

+0

Хммм .. так что «ключ» здесь - это переплетение различных кусков и вращение волшебной паутины здесь, что ближе к тому, как думает программист? – 2009-08-08 14:55:43

+1

@Amit - в высшей степени, да. Обычно мы пишем исходный код в порядке, который требуется нашим компиляторам; грамотное программирование - это писать исходный код, наиболее понятный другим разработчикам. – Bevan

+3

@Amit: Не всегда ближе к тому, как они «думают». Но всегда к самому ясному объяснению того, что программа * * и * делает *. * * Мышление * не имеет значения. Ясность и полнота изложения важны. –

0

Основная мотивация, как и я, заключается в том, что каждый программист использует бумажные листы/блокнот для «дизайна» архитектуры, разрабатывает идеи, там он пишет схемы, диаграммы, прорабатывает математику и так далее. После завершения программы все эти тетради/бумажные листы теряются, поэтому поддержка программы снижается. Я писал об этом в WiKi моего инструмента LP NanoLP: http://code.google.com/p/nano-lp/wiki/AboutLP.

Вторая мотивация, не так явно, является меньшим количеством ошибок. Но это не «теоретическая» вещь, это опыт (для меня) - когда вы «размышляете» на бумаге, рисуете диаграммы, схемы алгоритмов - ваша программа будет иметь меньше ошибок. LP - это «бумага», больше ничего.

Есть много разработчиков, которые никогда ничего не рисуют, комментариев нет (!), Они пишут программу только ... Ужасно!

И LP помогает вам создать хорошую документацию (не формально - описание функций, аргументов и то, что она возвращает, и, конечно же, это хорошо известно подписи функций, так зачем нужна такая документация?), но он помогает писать REAL ACTUAL документацию с семантикой, с картинками, с описанием реальных действий ...

Многие мотивы :) И конечно иногда лучше использовать только обратную LP (например, Doxygen), иногда - настоящую LP, зависит от многих факторов.

0

Грамотное программирование основывается на трех простых операторов:

  1. Программисты должны написать код, который компьютер может понять
  2. Программисты должны написать документацию, которую люди могут понять
  3. Если это отдельные документы, которые он неизбежно, что они будут несинхронизированы

Действительно, по моему опыту, № 2 обычно получает короткий стрит. Я потерял счет того, сколько раз QA сказал мне: «Док говорит это, но код делает это: неправильный код или устаревший документ»? В этом отношении я не ожидаю, что мое рабочее место будет необычным. Кроме того, в одном из моих ранних проектов я старался держать документы в актуальном состоянии, так как назад и вперед с заинтересованными сторонами привели к изменению требований. Это было достаточно трудоемким, и мне было сказано, что менеджмент должен прекратить возиться с документами и просто заставить проект работать. С тех пор мы перешли к менее трудоемким процессам документации (слава богу!).

У нас есть инструменты для проверки кода, где, когда мы вносим изменения в код, несколько человек могут видеть изменения, четко очерченные и комментарии могут быть сделаны, задавать вопросы, объяснять вещи, предлагая улучшения. Если бы код был написан с использованием методов грамотного программирования, большая часть этого вопроса/ответа была бы суперплотной, потому что объяснение было бы включено.

Значительная часть современного программирования заключается в том, что ваш код должен быть собственной документацией. Многие эксперты утверждают, что если вам нужно объяснить свой код в комментариях, вы должны, вероятно, переформатировать код (изменение имен переменных/функций и т. Д.), Чтобы комментарии не использовались. Я считаю, что это здорово в теории, менее практично в реальности. Я имею в виду, что когда я использую библиотеки, созданные/поддерживаемые кем-то другим, их выбор имен методов/функций не всегда интуитивен для меня. Например:

Set<String> statesWeCareABout = new HashSet<String>(Arrays.asList(new String[] { "one", "two", "three" })); 
Set<String> statesWeFound = <some function>; 
statesWeFound.retainAll(statesWeCareAbout); 

Если вы не знакомы с Сетом <> или HashSet <>, вы можете не знать, что .retainAll() означает дать мне пересечение двух, с результатом в модифицированном Set <>.

Наконец, грамотное программирование обычно позволяет вам сломать вещи, чтобы вы могли объяснить этот фрагмент кода изолированно, а затем вставить его в этот другой фрагмент кода. Это больше соответствует тому, как работает человеческое понимание. Объясните мне, как это работает, а затем опираясь на это понимание, чтобы объяснить большую картину. Компьютеры действительно не заботятся; вы можете написать одну функцию с 1000 строками кода, и у нее нет проблем постигать все это. Бог поможет вам, если вы, как разработчик, должны это поддерживать.

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

И действительно ли у нас есть время, чтобы продолжать изобретать колесо?

Смежные вопросы