Різниця між найкращими практиками та здоровим глуздом?


13

Існує багато розмов про кращі практики 1 в розробці програмного забезпечення. Я бачив, що принаймні три основні моменти отримують багато дискусій як щодо SE, так і деінде:

  • Що кваліфікується як найкраща практика і чому?
  • Невже найкращі практики навіть варто обговорити в першу чергу, тому що розумно стверджувати, що жодна практика не є "найкращою" практикою?
  • Коли вам слід відмовитися від найкращої практики - або, можливо, більшості найкращих практик - або тому, що вона не здається застосовною, або через зовнішні обмеження (час, гроші тощо), які роблять компроміс непрактичним?

Те, що, здається, з’являється набагато рідше, але більше, ніж ніколи, - це поняття здорового глузду в розробці програмного забезпечення. Останній досвід знову сприйняв це поняття перед моїми думками.

Моє первісне враження, що це інша дискусія, ніж найкраща практика, але, можливо, з деяким перехресним запиленням.

Коли я думаю про здоровий глузд взагалі, я думаю про набір правил, які ви або підбирали, або вчили, що дають вам основу для міркування та прийняття рішень. Дотримуйтесь здорового глузду - це хороший спосіб уникнути відстрілу всієї ноги. Але поза досить низькою базовою лінією здоровий глузд поступається необхідністю приймати освічені рішення, а освічені рішення можуть навіть перемогти здоровий глузд, коли докази здаються досить вагомими. Я можу трохи грати з визначенням тут, але я думаю, що це досить близько, щоб очолити мій приклад.

Коли я думаю про здоровий глузд в розробці програмного забезпечення, я думаю про всі правила основної гігієни, щоб запобігти швидкому розкладанню кодової бази в незрозумілий безлад. Як приклад, такі речі: не використання єдиної глобальної структури для підтримки та спілкування стану в рамках нетривіальної програми; не використовуйте назви змінних / методів / класів, які є лише випадковим безладом; речі, які, ймовірно, нагадують те, що ми дуже близько називали анти-шаблонами. При застосуванні передового досвіду практичний аналог до моделей навчання, застосування здорового глузду може розглядатися як практичний аналог вивчення антимоделей.

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

Чи інші вірять, що в розробці програмного забезпечення існує поняття здорового глузду? Було б цікаво знати міркування в будь-якому випадку.

Якщо так, то чи варто це поняття обговорювати? Це щось, на що ми повинні наполягати настільки, наскільки ми іноді робимо найкращі практики? Чи варто на щось наполегливіше наполягати?

Якщо аналогія антидіаграмам здається розумною, загальним правилом є те, що антидіаграми застосовуються лише тоді, коли іншого способу немає, і навіть тоді лише за дуже обмежених обставин. Наскільки гнучким слід бути у дозволі кодовій базі відхилитися від здорового глузду? Здається невиправданим, що відповідь "зовсім не", тому що іноді доцільність вимагає відхилень. Але це здається різним аргументом, ніж коли застосовувати "найкращу практику". Можливо, це не так; якщо ви так не вважаєте, я хотів би дізнатися чому.

Це набагато відкритіший кінець і, можливо, вартий подальшого питання, яке саме , які рекомендації ви б вказували на це, здається, питання здорового глузду?

Інші думки також вітаються.


1 Можливо, я б краще назвав їх "часто повторюваними моделями домену", але назва "кращі практики" є досить поширеною, щоб усі знали, що вони є, навіть якщо вони не згодні з тим, що вони є. Якщо "найкраща" частина вас турбує, уявіть, що я замінив "кращі практики" чимось менш авторитетним звучанням.


2
Здоровий глузд означає, що ви можете використовувати його для обгрунтування плюсів і мінусів декількох рішень та вибору найкращого для проблеми. Хтось, чий досвід складається з того, щоб прочитати пару книжок про шаблони дизайну та найкращі практики, не розуміє, де і як їх застосовувати.
Blrfl

Відповіді:


10

Найкращі практики - це практики, за якими було виявлено, що вони добре працюють у відносно широкому полі обставин. Проблема з ними полягає в тому, що А) вираз іноді зловживають для маркетингу та В) як фіксовані правила, вони недостатньо гнучкі; жоден набір фіксованих правил не слід дотримуватися, не замислюючись про те, застосовуються вони до поточної ситуації.

Найкращі практики чудові, коли вони пояснюють, чому вони "найкращі" та за яких обставин їх слід використовувати. Тоді ви можете міркувати про те, коли їх не використовувати.

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


10

Я думаю, ти маєш це назад.

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

Кращим визначенням було б:

"Кращі практики" - це здоровий глузд від експертів, як це слід застосовувати неекспертам.

Тобто ви не вимагаєте «здорового глузду», поки не будете мати достатньо досвіду в даній галузі, щоб зрозуміти тонкі компроміси; і коли ви це зробите, ви більше не повинні сліпо слідувати «найкращим практикам» вирізання печива.

"Кращі практики" є тимчасовим заповнювачем місць, поки у вас не буде достатньо досвіду для використання власного "здорового глузду".


3
О, і якщо ви не знайомі з найкращими методами, у вас теж немає здорового глузду.
AviD

7

Найкращі практики -> "спочатку ви вивчаєте правила". Досвід -> "тоді ви дізнаєтесь, коли і як їх зламати".

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

Здоровий глузд, звичайно, не такий, як досвід, і вам не завжди потрібно багато досвіду, щоб побачити недолік у застосуванні хорошої техніки в неправильному місці - але дуже легко побудувати помилкові раціоналізації як для надмірного застосування, так і для недостатнє застосування методики, і оскільки "здоровий глузд" тут явно не є вродженим знанням програмування, цей сенс явно "загальний" лише в певних групах.

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

Справа з цим, мабуть, набагато більше стосується навичок людей, ніж технічних навичок. Мені це дуже погано :-(

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


6

Мені здається, що це питання є семантичною хитрістю. Якщо ми будемо використовувати ці визначення, то питання не виникає:

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

Звичайний сенс: професійний досвід, який попереджає програміста про підводні камені, яких слід уникати

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


Ну ... це семантично щось-або-інше. Не впевнений у хитрість. "Здоровий глузд" не завжди означає те, що воно говорить. Він набув відчуття невідповідності академічному правилу - аспекту речі, що має загальний розум і не має здорового глузду, яка, в основному, стосується мислення поза рамками цього правила. Іноді найкращі практики насправді не застосовні - реальність занадто складна, щоб будь-який обмежений набір узагальнень був ідеальним - тому бувають випадки, коли вам доведеться використовувати власний досвід і - ага - "здоровий глузд".
Steve314

@Patrick: не було мого наміру бути все хитромудрим. Частина мого запитання цього питання полягала в тому, щоб дослідити розуміння цих двох концепцій, особливо "здорового глузду", до цього моменту. Будь-яка видима хитрість - це, мабуть, лише ознака того, що моя інтуїція щодо цих ідей ніде не ідеальна.
Ед Каррел


4

Цікаві терміни. Минулого тижня була опублікована ця стаття, в якій обговорювалося, чому здоровий глузд не обов'язково ідеальний у всіх ситуаціях.

Здоровий глузд вишукано пристосований до того, щоб поводитись із тими складностями, що виникають у повсякденних ситуаціях ... І оскільки він так добре працює в цих ситуаціях, ми схильні довіряти йому у всіх ситуаціях

(мої слова жирним шрифтом)

В основному - люди не в змозі використовувати здоровий глузд у таких сферах, як це, де ми не розробили вбудовану систему, тому ми ВЖЕ повинні використовувати документально встановлений набір стандартів, а не покладатися на власний здоровий глузд!


Пізнавальна упередженість ... знову. І тому вам потрібно бути визнаним експертом, перш ніж покластися на ваш здоровий глузд ...
AviD

2

Здоровий глузд не відповідає вивченню антитіл, а також не відрізняється від кращої практики або на відміну від неї.

Перша проблема здорового глузду - це його назва - це призводить до висновку, що вона є і звичайною, і розумною. Як зазвичай використовується, воно підлягає нападу за обома пунктами. Використовуючи свій приклад:

анти-шаблони застосовуються лише в тому випадку, якщо іншого способу немає, і навіть тоді лише за дуже обмежених обставин

Як я розумію, це не так, як виникають антимоделі. Це від нарощування культурних та соціальних факторів; нехтування кращими практиками та стандартами протягом значного періоду; ігнорування витрат у майбутньому для досягнення короткотермінових вигод - наприклад, дотримання терміну, використовуючи скорочене рішення, яке є кошмаром технічного обслуговування; тощо. Жоден орган не збирається навмисно приймати анти-модель - вони просто ростуть.

Крім того, здоровий глузд занадто часто використовується для того, щоб означати "що робиться звичайно", і виправдовувати відсутність думки, розуміння та наполегливої ​​праці у вирішенні того, що пов'язане із забезпеченням рішення. Він також використовується як виправдання для "його так, як я це роблю, тому очевидно, що це здоровий глузд" - і як захист від огляду та критики.

Що стосується найкращих практик, перші два абзаци Майкла @ Майкл - це чудовий підсумок того, якою має бути найкраща практика - ресурсом, який допомагає всім вдосконалювати те, що вони роблять. Він також забезпечує прозорість рішень (особливо дизайнерських рішень) та можливість вчитися у інших. Недоліком найкращої практики є те, коли він формує культуру контрольних списків - "Я поставив галочки всі поля, тому те, що я зробив, повинно бути добре", - не застосовуючи думки, турботи та уваги до характеру застосовності контрольного списку.


1

Це слизький аргумент нахилу, який часто перетворюється на релігійну війну.

Практично будь-яку найкращу практику можна протиставити дійсній справі, якщо робити навпаки.

Деякі найкращі практики є "найкращими", ніж інші. Змінні глобального стану майже завжди краще робити іншим способом, і GOTO - це зазвичай погана ідея, але коли ви потрапляєте в шаблон / антидіаграма або прямі аргументи даних / абстраговані дані, це стає трохи менш зрозумілим. Тим більше, коли ти починаєш говорити про розробки методології та практики.

У деяких ситуаціях здоровий глузд і найкращі практики навіть протистоять один одному.

Не існує керівного органу найкращих практик, і жодна група, навіть якби вона існувала, не могла б визначити всі можливі "найкращі" для кожної можливої ​​ситуації. Багато речей, позначених як найкраща практика, - це лише поганий маркетинг, який намагається продати неінформовані люди інструменти або навчання.

Навіть коли вся ваша команда погоджується, що щось найкраще, не завжди можливо реалізувати це таким чином для різних стримуючих факторів.

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

Деякі аргументи щодо найкращих практик після цього моменту в значній мірі зводяться до того, щоб не створювати щось, що наступний розробник, який повинен працювати над ним, буде ненавидіти. Усі ненавидять код, який не є їхнім стилем, і кожен звинувачує все у тому, хто залишив, так що або ви збираєтесь пояснити це черговому розробнику після того, як вони про щось нарікають, або ви не збираєтесь там бути і говорити погано незалежно від того, як ви його кодуєте. Це робить це занепокоєння здебільшого не має значення.


1

Здоровий глузд не завжди дає найкращі результати. Однак найкращі практики були випробувані. Це робить передовий досвід більш надійним джерелом інформації.


0

Найкращі практики не найкращі, а здоровий глузд - не звичайний. ;-)

Як найкращі практики, так і здоровий глузд, я люблю вважати їх шаблонами; Запам’ятайте визначення шаблону: Розв’язання в контексті, що розв’язує сили в результуючий контекст .

Для всього, що ви хочете зробити, ви повинні знати контекст, до якого він застосовується, сили, які він вирішує, і результуючий контекст, який він створює. Потім визначте свою команду, якими моделями ви зазвичай користуєтесь. (Це може бути формальним чи неофіційним, але в будь-якому випадку це набагато більше, ніж просто книга "Банда чотирьох". Це включає мовні ідіоми та місцеві бібліотеки-помічники, а не лише опубліковані зразки.)

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


-1

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

Одне - це мистецтво, інше - справа надто багато з нас це забуває.


Шеф не переймається тим, як ви раціоналізуєте свій спосіб поведінки, він піклується про те, щоб не мати проблем. Рішення, яке ви називаєте "досягнутий здоровим глуздом", для нього таке ж добре, як і ", досягнене шляхом дотримання найкращих практик"
keppla

Дозвольте перефразувати свою відповідь. Найкраща практика часто використовується як привід для надмірної інженерії, наскільки вони є синонімами у багатьох програмних центрах. Звичайний сенс утримується від надмірної інженерії в інтересах успішного (зазвичай комерційного) завершення проекту.
mattnz

-1

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

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

Серед речей, з якими я стикався, які були раціоналізовані як здоровий глузд, - це ці дорогоцінні камені.

  • Метод HTTP в значній мірі не має значення. Використовуйте GET, коли ви передаєте мало даних, використовуйте POST при передачі більше (тобто багато для URL-адреси)
  • функції не повинні бути надто маленькими, тому що важко запам’ятати, що вони роблять. одна велика функція бажана для 5 менших, тому що ви можете її читати як одну
  • база даних та веб-сервер ОБОВ'ЯЗКОВО запускаються на одній машині, інакше веб-сервіс уповільниться. Єдиний спосіб масштабування - пришвидшити код шляхом взломів та абстрагування, щоб вистачило потужності однієї машини.

Найцікавіше в "Здоровому глузді" полягає в тому, що це не так часто: виберіть дві команди і дозвольте їм заявити, що вони - "здоровий глузд", і насолоджуйтесь релігійними війнами.

З іншого боку, як "найкраща практика" я б розглядав способи здійснення справ, які мають трохи більше "експертної оцінки". Щоб вважати щось "найкращою практикою", я б очікував, що воно буде сформульоване досить чітко, щоб воно могло бути представлене як концепція ("структуроване програмування" - найкраща практика, "готос плутає, уникає їх" - це здоровий глузд), і застосовується не раз, з хорошими результатами.


Ви хочете сказати, що "Найкраща практика" завжди доречна у будь-якій ситуації, і коли найкраща практика свідомо не виконується, це погано ("не добре").
mattnz

1
Ні, я кажу, що "Найкраща практика" має більший шанс не зазнати абсолютно необґрунтованих дій, оскільки вона пережила "експертну перевірку", всупереч здоровому глузду, який повинен здаватися розумним лише одній людині. Я не проти впровадження чогось, що вважається "здоровим глуздом", я проти виправдання чого-небудь як здорового глузду.
keppla
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.