Оптимальний код?
Вже кілька років я веду роботу над одним дуже цікавим приладом. За цей час з 40 розрахункових показників система зросла до приблизно 300, а мої погляди на «правильний» код сильно змінилися.
На самому початку роботи було бажання максимально оптимізувати швидкість обчислення показників, я використовував «хитрі» алгоритми кешування значень розрахункових показників, які будуть надалі використовуватися для обчислення інших значень. Дивився, і радів, як же «круто» я все продумав і зробив.
Але з часом уточнювалася теорія і виникала необхідність змінювати не тільки норми, коефіцієнти та формули обчислення показників, а й алгоритми отримання значень взагалі. У підсумку поступово швидкість розмінювалася на зрозумілі оку алгоритми обчислень. Коли ж кількість вхідних показників зросла з 30 до 80, а розрахункових до 300, код вже був дуже далекий про оптимальний за швидкістю. Обчислювані показники посилалися на інші, інші - на треті, і так кілька рівнів вкладеності, на кожному з яких повторно проводилися обчислення одних і тих же значень.
З одного боку, це кошмарно - стільки марних обчислень, неосяжне поле для оптимізації. Але якщо поглянути на проблему ширше, ситуація змінюється докорінно:
1. Програма використовується на розробнику заліза
2. При тих же фінансових обмеженнях, потужність заліза зросла настільки, що неоптимізовані алгоритми на новому залізі працюю швидше оптимізованих на старому.
3. Показники обчислюються дискретно, навантаження на ЦП в момент обчислень збільшується не більше ніж 3-4% при загальному постійному навантаженні в 20-25 і піковому в 50%
4. Періодично, взаємозв'язки між показниками змінюються, доводиться розбиратися в тому, що було зроблено раніше, вносити зміни і доповнення
5. Найцінніше - при погляді на функцію обчислення будь-якого показника зрозуміло, що мається на увазі.
Вивід: критерії оптимальності коду та алгоритму залежать від кожного конкретного завдання, і зараз вони все більше і більше зміщуються від оптимізації під залізо до оптимізації під людину-розробника, наскільки дозволяє ситуація. Залізки з кожним днем стають все крутішими і крутішими, а програмісти - всі старіші і старіші:)




