?

Log in

No account? Create an account
 
 
27 September 2008 @ 02:36 pm
Записки программиста  
О вреде некоторых буквально принимаемых правил
(репост - под рубрикой Записки программиста)

Утверждение “premature optimization is the root of all evil in programming”
цитируемое Кнутом и приписываемое Хоару – пример того, что было сформулировано
Тютчевым «Мысль изреченная есть ложь».

Понятно что имелось в виду: может и ненадо вовсе оптимизировать? Или и без этого
все хорошо, или, может, тот врагмент кода, с которам мы сейчас работаем занимает,
скажем, всего 1% оптимизируемого ресурса (обычно времени или памяти) – в этом
случае улучшив его в 10 раз мы все равно выиграем менише одного процента.
А на оптимизацию уходит время, да и код, возможно, становится сложнее и менне
понятным, что, понятно, грозит потерям в будущем.

Все это так, конечно. И не так. Не раз я был свидетелем принятия решения
использовать заведомо не лучший алгоротм/дезайн/стуктуру данных, ссылаясь
на это правило! Редкостный бред.

Во первых, если мы видим возможным, что некоторый ресурс (в наше время
почти всегда речь идет о скорости, то есть времени выполнения) может
стать критичным – полное безумие думать, что сделанное сначало «тяп-ляп»
можно потом легко оптимизировать. Во вторых, если созданная программа
достаточно сложная и все ее компоненты сделаны по обсуждаемогу принципу,
может случиться, что и понять-то (или даже измерить, используя профайлеры)
какие части критичны сразу невозможно – почти все оказываются критичными.



Так что, правило должно быть таким: на каждом этапе создания нужно тратить
некоторые (разумные) время и усилия на исследование возьщжных решений.
И выбирать неоптимальное нужно лишь тогда, когда к тому есть веские причины.
Скажем:
- Это позволит получить работающий прототип всего или части проекта
значительно быстрее.
- Более простой выриант может быть потом сравнительно легко заменен
оптимальным.

И уж конечно бывают задачи, когда мы уверены, что простейший вариант
достаточно хорош и никакая оптимизация вообще не понадобится.



Под конец, курьезный случай по теме – в пользу Хоарова утверждения:
был у меня начальник, который верил (его так научили), что чтобы программа
работала быстро, ее надо писать на ассемблере. И написал он когда-то такую
ассемблерную функцию – кажется это было вычесление автокорреляции или что-то
вроде. А я – мне тогда уже надоели его поучения – ради издевательства ускорил
ее раз в 10, переписав с ассемблера на С! Он обиделся (хотя я специално
ничего не акцентировал). Это, кстати иллюстрация вредности другого правила,
про ассемблер...
 
 
 
(Deleted comment)
Misha Furmanmishafurman on September 29th, 2008 03:27 am (UTC)
Поэтом я никогда не был хотя хотел быть и поэтом и писателем и художником, когда какое-то произведение искусства производило на меня впечетление (в основном в детстве, конечно)...
А это серия моих профессиональных воспомитаний и размышлений связанных с программированием компьютеров - делом, которым я всю жизнь занимаюсь. Данный кусочек совершенно технический - он и не предпологается быть понятным неспециалистам.