Разница между лучшими практиками и здравым смыслом?


13

Существует много разговоров о передовых практиках 1 в разработке программного обеспечения. Я видел, по крайней мере, три основных момента, которые обсуждаются как на SE, так и в других местах:

  • Что считается лучшей практикой и почему?
  • Стоит ли вообще обсуждать лучшие практики, потому что разумно утверждать, что никакая практика не является «лучшей»?
  • Когда вы должны отказаться от лучшей практики - или, возможно, от большинства лучших практик - либо потому, что она не представляется применимой, либо из-за внешних ограничений (время, деньги и т. Д.), Которые делают компромисс невозможным?

То, что кажется гораздо реже, но чаще, чем когда-либо, является понятием здравого смысла в разработке программного обеспечения. Недавний опыт вновь поставил это понятие передо мной.

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

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

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

Имея это в виду, я хотел бы задать несколько вопросов, которые, видя ответы других, могут помочь мне объяснить мой путь через это.

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

Если да, стоит ли это обсуждать? Это то, что мы должны настаивать так же, как мы иногда делаем с лучшими методами? Стоит ли настаивать на этом еще сильнее?

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

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

Другие мысли также приветствуются.


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


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

Ответы:


10

Лучшие практики - это практики, которые, как было установлено, хорошо работают в относительно широкой области обстоятельств. Проблема с ними заключается в том, что A) выражение иногда используется для маркетинга и B) как фиксированные правила, они недостаточно гибки; Ни один набор фиксированных правил не должен соблюдаться, не задумываясь о том, применимы ли они к текущей ситуации.

Лучшие практики хороши, когда они приходят с объяснениями, почему они «лучшие» и при каких обстоятельствах их следует использовать. Тогда вы можете подумать о том, когда не использовать их.

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


10

Я думаю, что у вас есть это задом наперед.

При обучении программистов основам безопасности, я всегда учу их использовать best practices, и все же, имея дело со специалистами по безопасности (или более «опытными» программистами), я никогда не буду обсуждать best practices, фактически я буду часто их нарушать.

Лучшее определение будет:

«Передовой опыт» - это здравый смысл экспертов, так как он должен применяться не экспертами.

То есть, вы не можете требовать «здравого смысла», пока у вас нет достаточного опыта в данной области, чтобы понять тонкие компромиссы; и когда вы это сделаете, вы больше не должны слепо следовать "передовой практике" печенья.

«Лучшие практики» являются временным заполнителем, пока у вас не будет достаточно опыта, чтобы использовать свой собственный «здравый смысл».


3
О, и если вы не знакомы с лучшими практиками, у вас тоже нет здравого смысла.
AviD

7

Лучшие практики -> «сначала вы выучите правила». Опыт работы -> «тогда вы узнаете, когда и как их сломать».

Готовность экспериментировать с альтернативами (в некритическом коде, конечно, предпочтительно с личными проектами и одноразовыми приложениями) может помочь вам получить необходимый опыт.

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

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

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

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


6

Мне кажется, что этот вопрос - семантическая хитрость. Если мы используем эти определения, то нет никаких сомнений:

Лучшая практика: проверенный на практике способ решения проблемы в данной области (т. Е. Лучшие практики реального времени совершенно чужды лучшим практикам баз данных)

Здравый смысл: профессиональный опыт, который служит для предупреждения программиста о ловушках, которых следует избегать

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


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

@ Патрик: я не собирался быть хитрым. Часть моего вопроса об этом вопросе состояла в том, чтобы исследовать понимание, которое я имел к этим двум понятиям, особенно "здравого смысла", до этого момента. Любая очевидная хитрость, вероятно, является лишь признаком того, что моя интуиция об этих идеях далеко не идеальна.
Эд Каррел

5
Common sense = You.CommonSense

Best practices = Sum(Experts.Experience + Experts.CommonSense)

2
... * Маркетинг
keppla

4

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

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

(мои слова выделены жирным шрифтом)

По сути - люди не умеют использовать здравый смысл в таких областях, как эта, где мы не разработали укоренившуюся систему, поэтому мы должны ВСЕГДА использовать документированный набор стандартов и не полагаться на наш собственный здравый смысл!


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

2

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

Первая проблема со здравым смыслом - это его название - оно приводит к выводу, что оно является как общим, так и разумным. Как обычно используется, он подвержен атаке по обоим пунктам. Используя ваш пример:

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

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

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

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


1

Это скользкий аргумент, который часто превращается в религиозную войну.

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

Некоторые лучшие практики более «лучшие», чем другие. Глобальные переменные состояния почти всегда лучше сделать по-другому, и GOTO, как правило, плохая идея, но когда вы входите в аргументы pattern / anti-pattern или direct data / abstracted data, это становится немного менее ясным. Тем более, когда вы начинаете говорить о методологиях и практиках разработки.

В некоторых ситуациях здравый смысл и лучшие практики даже противоречат друг другу.

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

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

ИМХО, вы должны использовать передовой опыт в качестве руководства относительно того, что следует учитывать более тщательно в вашем дизайне. У вас может быть веская причина для отклонения, но вам, вероятно, нужно убедиться, что все остальные в команде согласны, прежде чем идти и строить что-то странное.

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


1

Здравый смысл не всегда дает лучшие результаты. Однако лучшие практики были опробованы. Это делает лучшие практики более надежным источником информации.


0

Лучшие практики не являются лучшими, и здравый смысл не является общим. ;-)

Что касается лучших практик или здравого смысла, мне нравится думать о них как о шаблонах; Запомните определение шаблона: решение в контексте разрешает силы в результирующий контекст .

Для всего, что вы хотите сделать, вы должны знать контекст, к которому он применяется, силы, которые он разрешает, и результирующий контекст, который он создает. Затем решите в своей команде, какие шаблоны вы обычно используете. (Это может быть формальным или неформальным, но в любом случае, это намного больше, чем просто книга «Банды четырех». Это включает языковые идиомы и локальные вспомогательные библиотеки, а не только опубликованные шаблоны.)

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


-1

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

Одно - это искусство, другое - слишком многие из нас забывают об этом.


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

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

-1

Чтобы немного преувеличить: разница в том, что здравый смысл - это предубеждение, лучшая практика - это (должно быть) наука

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

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

  • HTTP-метод в значительной степени не имеет значения, используйте GET при передаче небольших данных, используйте POST при передаче большего (т. е. слишком много для URL)
  • функции не должны быть слишком маленькими, потому что трудно запомнить, что они делают. одна большая функция предпочтительнее 5 меньших, потому что вы можете прочитать ее как одну
  • база данных и веб-сервер ДОЛЖНЫ работать на одном компьютере, иначе веб-служба будет работать медленнее. Единственный способ масштабирования - это ускорение кода путем взлома и отказа от абстракции, так что мощности одной машины достаточно.

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

С другой стороны, в качестве «Лучшей практики» я бы рассмотрел способы ведения дел, которые имеют немного больше «экспертной оценки». Чтобы считать что-то «наилучшей практикой», я ожидал бы, что это будет сформулировано достаточно четко, чтобы его можно было представить в виде концепции («структурированное программирование» - это лучшая практика, «гутки сбивают с толку, избегайте их» - это здравый смысл), и применяется более одного раза, с хорошими результатами.


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

1
Нет, я говорю, что «Лучшая практика» имеет больше шансов не быть совершенно необоснованной, потому что она пережила «экспертную оценку», вопреки здравому смыслу, который должен казаться разумным только одному человеку. Я не против реализации чего-то, что считается «здравым смыслом», я против оправдания чего-либо как здравого смысла.
Кепла
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.