вторник, 8 декабря 2009 г.

О цитате “Преждевременная оптимизация – корень всех зол”

Многие специалисты компьютерной области знают (ну, или хотя бы слышали) следующее высказывание:

Преждевременная оптимизация - корень всех зол в программировании

Большая часть этих самых компьютерных специалистов склоняется к мысли, что автором этой цитаты является Дональд Кнут и хотя для многих программистов не важно, кто на самом деле является автором, у меня этот вопрос вызывал интерес и я решил заняться им более подробно.

Существует как минимум три разновидности этой фразы, которая встречается в различных трудах Дональда Кнута.

Первый вариант:
Преждевременная оптимизация - корень всех зол в программировании
Оригинал:
Premature optimization is the root of all evil
Источник:
1974 год, лекция, посвященная вручению премии Тьюринга, Computer Programming as an Art, Communications of the ACM, Volume 17, Issue 12, Dec. 1974 (see p.671)).
Полная версия оригинала:
The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.

Второй вариант:
Нам следует забывать о небольшой эффективности, например, в 97% случаев: преждевременная оптимизация - корень всех зол. Хотя мы не должны отказываться от своих возможностей в этих критических 3%
Оригинал:
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3.
Источник:
1974 год, статья Structured Programming with go to Statements, ACM Computing Surveys, Vol 6, No. 4, Dec. 1974 (see p.268)  (эта статья является критикой статьи Эдсгера Дейкстры Go To Sta­te­ment Con­si­de­red Harm­ful).

Третий вариант:
Я также знал, но забыл афоризм Хоара о том, что преждевременная оптимизация — корень всех зол в программировании
Оригинал:
But I also knew, and forgot, Hoare’s dictum that premature optimization is the root of all evil in programming.
Источник:
1989 год, статья The Errors of Tex, Software—Practice & Experience, Volume 19, Issue 7 (July 1989), pp. 607–685, а также в книге Literate Programming (p. 276)

Все три варианта появились в трудах Дональда Кнута, но судя по третьей цитате складывается впечатление, что изначальным автором фразы был другой знаменитый ученый в области компьютерной науки Тони Хоар (C.A.R. Hoare), также лауреат премии Тьюринга, автор быстрой сортировки, Логики Хоара и много чего другого.

С момента выхода в свет The Errors of Tex, прошло уже два десятка лет, но до сих пор нигде не удается найти информацию, подтверждающую слова Кнута о том, что автором этой фразы является именно Хоар. Более того, сам Хоар в 2004 году в личной переписке с Hans Genwits написал о том, что он НЕ является автором этой цитаты (оригинал здесь):

Dear Hans,
I’m sorry I have no reco­llec­tion how this quo­ta­tion came about.? I might have attri­bu­ted it to Eds­ger Dijkstra.
I think it would be fair for you assume it is com­mon cul­ture or folklore.
Tony.

На самом деле не так и важно, кто является автором этого высказывания, Дональд Кнут, Эдсгер Дейкстра, Тони Хоар, или кто-то не столь именитый в области компьютерных наук. Важно то, что эта фраза стала известной именно благодаря Дональду Кнуту.

Ну и последнее, помните, Дональд Кнут говорил о 97%, а не о 100%;)

5 комментариев:

  1. Интересно.
    Ужасно что об этом часто забывают. Забыли и в нашем проекте.

    ОтветитьУдалить
  2. Вообще весьма странно и печально, что в нашей профессии люди очень любят крайности. И это касается не только оптимизации, это касается практически любого вопроса. А вот разумное, "прагматичное" отношение к каким-то сложным вопросам встречается, к сожалению, редко.

    ОтветитьУдалить
  3. Со всем уважением к автору, но ... Как-то вот "криво", иногда пишите, например: как можно было перевести small effective - в русское небольшая эффективность.
    Лично мой мозг был искорёжен попытками понять русский текст, пока не посмотрел английский.
    Мои варианты: "маленькая/низкая эффективность" или, хотя бы, "небольшая неэффективность"

    ОтветитьУдалить
  4. @Миша: "Со всем уважением к автору", но фразы "small effective" просто нет в моем сообщении (и, соответственно, я никак не мог ее перевести), там есть "small efficiencies". Хочу заметить, что и вы и я пропустили множественное число;) Возможно, более правильный вариант - это "Нам следует забывать о небольших выгодах...".

    ОтветитьУдалить
  5. generic viagra
    Более того, я ни разу не встречал случая, когда просчет эффетивности до и после внедрения проводился по одной и той же неизменямой методике. Т.е. посчитали до, потом после, НЕ МЕНЯЯ ПРИ ЭТОМ МЕТОДИКУ, и сказали - вот получились сопоставимые цифры, погрешность - столько-то... Нет, обычно присутствует фраза "в процессе выснилось, что не были учтены такие-то и такие-то факторы, методика была скорректирована и теперь она будет давать результат", забывая при этом добавлять "...для данного конкретного внедрения"...
    Что более всего поражает, это то, что признавая, что точность оценки никак не 90 и даже не 80 и даже не 70, тем не менее, если вариант А превышает Б на 5-10%, то это повод для выбора...

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