Якщо хтось пропонує вам неперевірене твердження щодо практики розробки програмного забезпечення, ви відповідаєте на "цитування потрібне"? [зачинено]


14

Нещодавно я відвідав лекцію Грега Вілсона (головного вченого програмного забезпечення столярної справи). З реферату:

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

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

Відверто кажучи, я був довірливим .

Ось приклад, взятий з лекції:

"Якщо більше 25% коду потребує рефакторингу, швидше переписати його".

Звучить правдоподібно, але це правда? Де це підтвердження? Це правда для всіх мов? І так далі.

Гаразд, цілком можливо це довести до кінця і нікому нічого не вірити, якщо ви самі не отримали це з перших принципів. Таким чином лежить божевілля (а може, математика ;-)). Але, якщо хтось до вас звернеться із заявою «Ей, роблячи це в [виберіть мову моменту], ми зможемо підвищити продуктивність на [вибрати кратне 10]%», ви схильні просто прийміть це, чи збираєтесь просити підтверджені докази?

Якщо це останнє (і я сподіваюся, що так), то

  1. куди б ви пішли, щоб знайти ці докази?
  2. наскільки суворими ви були б?

Коротше кажучи, якщо хтось запропонує вам неперевірене твердження, ви відповісте "цитуванням потрібне"?


2
У скільки галузей, поза наукою, люди вимагають емпіричних доказів? На моє спостереження, не так багато, як хотілося б.
Девід Торнлі

1
Як щодо коментарів щодо закритих голосів? "Занадто локалізований" і "Не справжнє питання" насправді не пояснюються в цьому контексті.
Inaimathi

1
Так, я також хотів би знати міркування, що стоять за закритими голосами.
Роберт Харві

@Robert Дякую за редагування Набагато менше запального на роздуми.
Гері Роу

1
Чудове запитання. Минулого року я бачив, що проф. Вілсон виступав у CUSEC, і на нього також сильно вплинуло те, що він мав сказати. Найкраще було, коли студент кинув виклик йому, щоб висловити свою заяву про те, що претензії слід цитувати, і він це зробив, не пропустивши жодного удару.
Матвій

Відповіді:


3

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

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

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

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

Якщо хтось сказав вам: "Якщо більше 2% коду потребує рефакторингу, швидше його переписати", ви знаєте, що це неправда так само, як якщо б хтось сказав вам "Тільки якщо більше 98% коду потребує рефакторингу, це швидше переписати його ". Де фактичне число залежить від того, що ви робите, і наскільки далеко від ідеального поточного коду.

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


+1 для ретельного аналізу прикладу твердження. Ви дійсно думаєте, що всі наукові дослідження мають комерційний кут, який потрібно використовувати? (Пробачте про наївність, але мені справді цікаво з цього приводу)
Gary Rowe

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

8
Якщо хтось пропонує вам неперевірене твердження щодо практики розробки програмного забезпечення, ви відповідаєте на "цитування потрібне"?

Ні, я розміщую його тут і бачу, чи отримає оновлення. Соціальний доказ - кращий, ніж ніякий доказ!


2
Ви можете десь потрапити з цією моделлю, але я здригаюся від думки про папір із посиланням на програмістів.SE як на джерело.
Інаіматі

@Inaimathi: це принаймні настільки ж надійно, як і вікіпедія, якщо не більше!
Стівен А. Лоу

+1 для пошуку доказів - завжди хороша порада. Скільки коштів, перш ніж у це повірити? ;-)
Гері Роу

1
@Gary: так, десять. на цьому сайті двадцять. на мета, сотня - якщо вона не стосується єдинорогів і вафлі, в такому випадку це має бути правдою
Стівен А. Лоу

Любіть посилання на єдиноріг - повинен отримати мені одну з них
Гарі Роу

4

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

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

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

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

Зрештою, твердження типу "Якщо більше 25% коду потребує рефакторингу, швидше його переписати" не може бути доведено, що воно працює за будь-яких обставин, тому твердження [потрібне цитування] - це справді спосіб інформування догматичного програміста, який прагне змусити свої погляди на інших, що це не завжди "Його Шлях або Шлях".


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

@Aaronaught: Виконання концепції іноді може не відповідати високому словнику, який використовується для його опису. Ось чому скептично налаштовані люди іноді просять доказів.
Роберт Харві

Чи не було б гарним, щоб виконання цих конкретних концепцій було невдалим?
Aaronaught

+1 за гарне використання захисту "цитування необхідних" проти догматичного програміста - дуже корисно
Гері Роу

4

Я думаю, що ніколи не знаєш, поки не спробуєш. Навіть маючи докази підтвердження твердження, завжди можна звести факти на користь своєї точки зору. Незважаючи на те, що ви не повинні пробувати кожне нове, що потрапляє на переплетення. Зробіть найкраще рішення. Пам'ятайте, якщо щось звучить занадто добре, щоб бути правдою, це, мабуть, є. Завжди запитайте себе, навіщо вам щось прийняти? Що ти маєш здобути? Чи має сенс бізнес-потенціал? Ніколи не осліплюючи, окрім чогось на віру.


+1 за запитання "навіщо вам щось прийняти". Іноді відступати від переднього краю - це добре.
Гері Роу

Я вважаю, що занадто часто розробники потрапляють у наступне найкраще, не аналізуючи цього і не розуміючи, як це може принести користь і стримувати їх. Я бачив ситуації, коли організації приймають щось на зразок Asp.Net MVC через Asp.Net Webforms, але не приймають TDD.
Карлосфокер

3

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

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

Це означає, що вони без вартості? Я б не сказав цього взагалі.

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


Хороші бали. =)
Пабло

1

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

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

З іншого боку, коли продавець заявляє, що нова IDE на 50% більш продуктивна, моя перша реакція - бик $% ^ &!


1
Це залежить, але навіть приклади повного коду залежать від вашої ситуації. Наприклад: Якщо у вас формат розбору і ваш інструмент diff ігнорує пробіл, то аргумент відступу стає досить тривіальним
Білл

1
+1 для прикладу Code Complete (також стосується швидкого розвитку того ж автора Стіва МакКоннелла).
Гері Роу

@Bill Цікаво, що в міру покращення технології зникають проблеми, які потребували доказів раніше. Цікаво, чи це ефект, який зменшує нашу потребу просити докази?
Гері Роу

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

1

Хіба це не те, що залежить від цілого ряду нематеріальних змінних (змінних, що не можуть бути науково виміряні)?

На мою думку, вони говорять про емпіричний метод вимірювання емоцій. Щось, що навіть Спок не міг досягти. =)


1
+1 для цікавого заняття. Якщо відкинути (навмисно) химерний приклад, якщо хтось сказав вам, що Rails є кращою рамкою, ніж SpringMVC, як би ви вирішили визначити його обґрунтованість?
Гері Роу

Як зазначає Бенджамін Грем в своїй класичній книзі про інвестування ("Аналіз безпеки"), інструменти (інвестиції) слід вимірювати у двох різних, але самотніх аспектах: Якісний (нематеріальний, почуття) та кількісний (реальні числа, математика) , обчислення, логіка).
Пабло

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

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

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