пятница, августа 04, 2006

Преждевременная оптимизация

Есть такая классическая цитата: "Premature optimization is the root of all evil", "Преждевременная оптимизация есть корень всех зол". В качестве источника этой мудрости упоминаются разные люди, но я решила провести некоторые изыскания, чтобы доподлинно выяснить кто же это все-таки сказал. По беседам в конференциях и по Википедии я постаралась восстановить истину. Эту цитату часто приписывают Дональду Кнуту, который сказал так:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

Но он не сам это придумал. Про проценты - это Кнут добавил от себя, а изначальная цитата звучит так
Premature optimization is the root of all evil in programming.
и сказал это Энтони Хоар. Больше всего он известен тем, что придумал быструю сортировку.

Также в качестве автора часто указывают Ларри Уолла, создателя языка Перл, который, в свою очередь, цитировал то ли Хоара, то ли Кнута.

Об этой цитате, а также о ее неправильном использовании интересно рассказывается в статье The Fallacy of Premature Optimization. Мысли там высказываются следущие: сначала оптимизировать преждевременно, а потом на это уже времени нет. Также зачастую забывают первое слово этой цитаты и воспринимают ее как "Оптимизация - корень всех зол". То есть смысл меняется кардинально.

В продолжении темы: Optimization - статья в Википедии про оптимизацию.

Updated 20.12.2009

Сергей Тепляков пишет, что все на самом деле не так. Короче, дело ясное, что дело темное :-).

4 коммент.:

Анонимный комментирует...

Не могли бы вы привести пример такой вот вредной преждевремменой оптимизации? Смысл цитаты ускользает от меня.

Анонимный комментирует...

пузырьковая сортировка на asm

Alena комментирует...

Не могли бы вы привести пример такой вот вредной преждевремменой оптимизации? Смысл цитаты ускользает от меня.

Идея состоит в том, чтобы не заниматься оптимизацией в начале разработки, когда толком не понятно, что именно нужно оптимизировать. Потому что это может привести к куче нежелательных последствий: ненужное на данном этапе усложенение кода, потеря времени и т.п.

Если дополнить приведенный выше Anonymous'ом пример: убиваемся, со страшной силой оптимизируем сортировку. Дописываем приложение, а потом выясняется, что сортировка и до того занимала совсем незначительное количество времени, а основные тормоза, к примеру, создает вывод на печать. А с сортировкой вообще можно было не возиться.

Но на самом деле все не так просто. Например, если с самого начала архитектурно приложение было непродумано, то в конце его оптимизировать будет весьма сложно. Этот и подобные недостатки полного игнорирования вопроса оптимизации в начале разработки объясняются в статье The Fallacy of Premature Optimization.

Sergey Teplyakov комментирует...

Алена, здравствуйте. Много времени прошло с момента публикации Вашего сообщения, но меня вопрос авторства этой знаменитой цитаты также заинтересовал. Я могу сказать, что Тони Хоар НЕ является автором этого знаменитого высказывания и это является общепринятым заблуждением;) Существует электронное письмо Тони Хоара, в котором он явно говорит, что автором он не является (http://hans.gerwitz.com/2004/08/12/premature-optimization-is-the-root-of-all-evil.html).
Более подробно об этой цитате я написал здесь: http://sergeyteplyakov.blogspot.com/2009/12/blog-post_08.html
Если будет интересно - welcome:)