TL; DR: це залежить від того, що ви намагаєтеся вирішити.
Я мав подібну розмову з моїм Gramps про це, тоді як ми говорили про те, як Func та Action в C # є приголомшливими. My Gramps - дуже давній програміст таймерів, це було навколо вихідних кодів, оскільки програмне забезпечення працювало на комп’ютерах, які займали цілу кімнату.
Він кілька разів змінював техніку в своєму житті. Він написав код на C, COBOL, Pascal, BASIC, Fortran, Smalltalk, Java і врешті запустив C # як хобі. Я навчився програмувати з ним, сидячи на колінах, поки я був, але чортів, вирізавши свої перші рядки коду на синьому редакторі IBM SideKick. До мого 20 років я вже витрачала більше часу на кодування, ніж на гру.
Це трохи моїх спогадів, тому вибачте мене, якщо я не зовсім практичний, переказуючи їх. Мені дещо захоплюються ті моменти.
Ось що він сказав мені:
"Чи варто нам поставитись до узагальнення проблеми чи вирішити її в конкретному обсязі? Ви питаєте? Ну, це ... питання".
Грампс взяв паузу, щоб на короткий момент подумати над цим, фіксуючи положення окулярів на обличчі. Він грав на своєму комп’ютері гру-матч-3, слухаючи LP Deep Purple на своїй старій звуковій системі.
"Ну, це залежало б від того, яку проблему ви намагаєтеся вирішити", - сказав він мені. "Заманливо вважати, що єдине святе рішення для всіх варіантів дизайну існує, але такого немає. Архітектура програмного забезпечення - це як сир".
"... Сир, Грампс?"
"Неважливо, що ви думаєте про свого улюбленого, завжди знайдеться хтось, хто вважає, що це смердючі".
Я на мить розгублено моргнув, але, перш ніж я міг сказати що-небудь, продовжував Грампс.
"Коли ви будуєте автомобіль, як ви підбираєте матеріал для частини?"
"Я ... я думаю, це залежить від пов'язаних з вами витрат і того, що потрібно робити, я думаю."
"Це залежить від проблеми, яку намагається вирішити частина. Ви не будете робити шини зі сталі або лобове скло з шкіри. Ви вибираєте матеріал, який найкраще вирішує проблему, яку ви маєте під рукою. Тепер, що таке загальне рішення? Або конкретне? До якої проблеми, до якого випадку використання? Якщо ви хочете використовувати повний функціональний підхід, щоб надати максимальну гнучкість коду, який буде використаний лише один раз? Якщо вам слід написати дуже спеціалізований, неміцний код частина вашої системи, яка побачить багато і багато застосувань, і, можливо, багато змін? Вибір дизайну, як такий, як матеріали, які ви вибираєте для деталі в машині, або форма цегли Lego, яку ви вибрали, щоб побудувати будиночок. . Яка цегла Лего найкраща? "
Літній програміст дотягнувся до маленької моделі поїзда Лего, яку він має на своєму столі, перш ніж продовжувати.
"Ви можете відповісти, що якщо ви знаєте, для чого вам потрібна ця цегла. Як, до біса, ви дізнаєтесь, чи конкретно рішення краще, ніж загальне, або навпаки, якщо ви навіть не знаєте, яка проблема у вас намагаєтеся вирішити? Не видно минулого вибору, який ви не розумієте ".
".. Ви просто цитуєте " Матрицю " ? "
"Що?"
"Нічого, продовжуй".
"Ну, припустимо, ви намагаєтесь щось створити для Національної системи рахунків. Ви знаєте, як цей пекельний API і його тридцять тисяч рядків XML-файл виглядає зсередини. Як би виглядало" загальне "рішення для створення цього файлу. як? Файл переповнений необов'язковими параметрами, сповнений справ, якими мають користуватися лише дуже конкретні галузі бізнесу. У більшості випадків їх можна сміливо ігнорувати. Вам не потрібно створювати загальну систему рахунків, якщо єдине, що вам потрібно " Я завжди буду продавати взуття. Просто створіть систему продажу взуття і зробіть її найкращою системою рахунків-фактур, що продають взуття. Тепер, якщо вам довелося створити систему рахунків-фактур для будь-якого типу клієнтів, у більш широкому застосуванні - перепродаватися як незалежна, загальна система продажу,наприклад - зараз цікаво реалізувати ті варіанти, які використовуються лише для газу, їжі чи алкоголю.Зараз це можливі випадки використання. Раніше вони були лише гіпотетичними. Не використовуйте випадки, і ви не хочете реалізувати Не використовуйте випадки. Не користуйся маленьким братом Не потрібно ».
Грампс повернув поїзд лего на своє місце і повернувся назад до своєї гри-3.
"Отже, щоб мати можливість вибрати загальне або конкретне рішення для даної проблеми, спершу потрібно зрозуміти, що за чорт ця проблема. Інакше ти просто здогадуєшся, а здогадки - це робота менеджерів, а не програмістів. Як майже все в ІТ, це залежить ".
Отже, там у вас є. "Це залежить". Це, мабуть, найпотужніший двослівний вираз, коли думаєш про розробку програмного забезпечення.