"Варто" потребує контексту, як, наскільки простіше писати та читати та підтримувати порівняно з тим, наскільки швидше це робить щось для користувача помітно більш чуйним, інтерактивним, вимагаючи менше часу на їх очікування.
Заощадження кількох копійок, щоб придбати банку соди, не принесе мені великої користі, якщо мені доведеться подорожувати на відстані, щоб заощадити ці копійки, особливо зважаючи на те, що я рідко коли-небудь п'ю соду в ці дні. Заощадження кількох копійок на банку при купівлі мільйона банок соди може бути величезною справою.
Тим часом економлячи кілька копійок, коли двоє людей знаходяться поруч зі мною, і один пропонує те саме, що на кілька копійок дешевше, а інше ні, і я вибираю більш дорогий, тому що мені подобається, що їх капелюх краще здається дурним випадком песимізації.
Те, що я часто вважаю людьми, що називають "мікрооптимізаціями", здається цікаво позбавленим вимірювань, контексту та обговорення в кінці користувачів, коли абсолютно три повинні розглядати такі оптимізації, якщо вони не тривіально застосовувати. Для мене належна мікрооптимізація сьогодні стосується таких речей, як макет пам'яті та шаблони доступу, і хоча вони можуть здаватися "мікро" у фокусі, вони не є мікроефектом.
Мені не так давно вдалося скоротити операцію вниз з 24 секунд до 25 мілісекунд (приблизно в 960 разів швидше), з однаковими виходами (захищеними автоматизованими тестами), без зміни алгоритмічної складності, для об'ємного розсіювання теплової дифузії через "мікрооптимізація" (найбільша з яких відбулася через зміну компонування пам'яті, яка зменшила її приблизно на 2 секунди, потім решта - речі на зразок SIMD та подальший аналіз пропусків кеша у VTune та деяка подальша перестановка компонування пам'яті).
Вулфір пояснює тут техніку, і він боровся з необхідним часом:
http://blog.wolfire.com/2009/11/volumetric-heat-diffusion-skinning/
Моїй реалізації вдалося це зробити за мілісекунди, поки він намагався знизити його менше ніж за хвилину:
Після того, як я "мікро-оптимізував" його з 24 секунд до 25 мс, це змінило гру в робочому процесі. Тепер артисти можуть змінювати свої установки в режимі реального часу зі швидкістю понад 30 кадрів в секунду, не чекаючи 24 секунди кожен раз, коли вони вносять невеликі зміни до своєї установки. І це фактично змінило весь дизайн мого програмного забезпечення, оскільки мені більше не потрібна смуга прогресу та подібні речі, вони просто стали інтерактивними. Тож це може бути "мікрооптимізація" в тому сенсі, що всі поліпшення відбулися без будь-якого поліпшення алгоритмічної складності, але саме "мегаоптимізація" фактично зробила те, що раніше було болючим, неінтерактивним процесом в інтерактивний, який повністю змінив спосіб роботи користувачів.
Вимірювання, вимоги до кінця користувача, контекст
Мені дуже сподобався коментар Роберта тут, і, можливо, я не зміг зробити точку, яку я хотів:
Ну, давай. Ніхто не збирається заперечувати, що подібні зміни не "варті". Ви змогли продемонструвати відчутну користь; багато так званих мікрооптимізацій не можуть.
Це, незважаючи на те, що я працюю в дуже критичній для продуктивності сфері із часто вимогами в режимі реального часу, єдиний раз, коли я розглядаю будь-яку мікрооптимізацію, яка потребує відходу від мого шляху.
І я наголошую не тільки на вимірах, але й на стороні користувачів. Я дивний в тому, що я прийшов у моє нинішнє поле (і раніше gamedev) як користувач / фан по-перше, розробник другий. Тож мене ніколи не хвилювали звичайні речі, які хвилюють програмістів, як розв’язання технічних головоломок; Я вважав їх тягарем, але пережив би їх через мрію про користування, якою я поділився з іншими користувачами. Але це допомогло мені переконатися, що якщо я щось оптимізую, це матиме реальний вплив на користувачів із реальною користю. Це мій захист від мікрооптимізації безцільно.
На мій погляд, це насправді так само важливо, як профілер, тому що у мене були колеги, які робили такі речі, як мікрооптимізація підрозділу куба на мільярд граней лише для того, щоб задихнутися на реальних моделях виробництва, таких як персонажі та транспортні засоби. Їх результат був вражаючим у певному "технологічному демо" сенсі, але майже непридатний для реальних користувачів, оскільки вони профілювали та вимірювали та оцінювали випадки, які не узгоджувались із реальними випадками використання. Тому так важливо спочатку зрозуміти, що важливо для користувачів, або навчившись мислити та використовувати програмне забезпечення, як одне, або співпрацюючи з ними (в ідеалі обидва, але принаймні співпрацюйте з ними).