пятница, августа 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 комментария:

  1. Анонимный4/8/06 19:24

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

    ОтветитьУдалить
  2. Анонимный4/8/06 21:18

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

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

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

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

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

    ОтветитьУдалить
  4. Алена, здравствуйте. Много времени прошло с момента публикации Вашего сообщения, но меня вопрос авторства этой знаменитой цитаты также заинтересовал. Я могу сказать, что Тони Хоар НЕ является автором этого знаменитого высказывания и это является общепринятым заблуждением;) Существует электронное письмо Тони Хоара, в котором он явно говорит, что автором он не является (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:)

    ОтветитьУдалить