О цитате "Преждевременная оптимизация - корень всех зол"
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 14.01.10 07:54
Оценка: 3 (1)
Оригинал этого сообщения здесь.

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

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

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

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

Первый вариант:
Преждевременная оптимизация — корень всех зол в программировании
Оригинал:
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%

Re: О цитате "Преждевременная оптимизация - корень всех зол"
От: dynamic  
Дата: 14.01.10 12:26
Оценка:
О Преждевременной пессимизации
тоже не стоит забывать
Re: О цитате "Преждевременная оптимизация - корень всех зол"
От: FR  
Дата: 14.01.10 17:49
Оценка: :)
Здравствуйте, SergeyT., Вы писали:


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



Закон Арнольда: "если Теорема носит чьё-то имя, то этот человек скорее всего не является её создателем."


Re: О цитате "Преждевременная оптимизация - корень всех зол"
От: wallaby  
Дата: 14.01.10 18:09
Оценка:
Здравствуйте, SergeyT.,

С точки зрения человека "от сохи" смысл этой цитаты (вне зависимости от авторства) сводится к следующему:
сначала напишите юнит-тесты для работающего кода, потом начинайте оптимизировать.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re: Еще цитатки
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 15.01.10 14:21
Оценка: 93 (8) +2 :))) :))) :)

Some people, when confronted with a problem, think "I know, I’ll use regular expressions." Now they have two problems — Jamie Zawinski

Walking on water and developing software from a specification are easy if both are frozen. -Edward V Berard

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -Brian Kernighan

The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time. -Tom Cargill

Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.

It should be noted that no ethically-trained software engineer would ever consent to write a DestroyBaghdad procedure. Basic professional ethics would instead require him to write a DestroyCity procedure, to which Baghdad could be given as a parameter. -Nathaniel S Borenstein

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...' -Isaac Asimov

There are only 3 numbers of interest to a computer scientist: 1, 0 and infinity

If debugging is the process of removing software bugs, then programming must be the process of putting them in. -Edsger Dijkstra

Debuggers don't remove bugs. They only show them in slow motion.

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -Antoine de Saint Exupéry

Perl — The only language that looks the same before and after RSA encryption. -Keith Bostic


http://stackoverflow.com/questions/58640/great-programming-quotes/58796
http://www.hackification.com/2008/12/23/a-double-handful-of-programming-quotes/
Хорошо там, где мы есть! :)
Re: О цитате "Преждевременная оптимизация - корень всех зол"
От: Фанатик Ад http://vk.com/id10256428
Дата: 15.03.10 06:50
Оценка: +1
Здравствуйте, SergeyT., Вы писали:
@@@@Преждевременная оптимизация — корень всех зол

не так давно проектировал небольшую БД. Когда показал ER-диаграмму соратникам, произошёл спор на тему производительности,
заметьте код ещё не был написан, т.е. ни строчки вообще.
Короче, решили поставить эксперимент — загнали много тестовых данных, и замучили СУБД. (Ну и запросы у вас — сказала БД, медленно пережёвывая винт.)
Результаты эксперимента оказались неутешительными — пришлось делать денормализацию.
---------------
А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: skeptic  
Дата: 15.03.10 07:06
Оценка: :)
Здравствуйте, Фанатик, Вы писали:

Ф>Здравствуйте, SergeyT., Вы писали:

Ф>@@@@Преждевременная оптимизация — корень всех зол

Ф>не так давно проектировал небольшую БД. Когда показал ER-диаграмму соратникам, произошёл спор на тему производительности,

Ф>заметьте код ещё не был написан, т.е. ни строчки вообще.
Ф>Короче, решили поставить эксперимент — загнали много тестовых данных, и замучили СУБД. (Ну и запросы у вас — сказала БД, медленно пережёвывая винт.)
Ф>Результаты эксперимента оказались неутешительными — пришлось делать денормализацию.
Ф>---------------
Ф>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!

Скорей всего вы изначально излишне пессимизировали. Так что всё правильно.
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: anton_t Россия  
Дата: 16.03.10 19:39
Оценка:
Здравствуйте, Фанатик, Вы писали:

Ф>Здравствуйте, SergeyT., Вы писали:

Ф>@@@@Преждевременная оптимизация — корень всех зол

Ф>не так давно проектировал небольшую БД. Когда показал ER-диаграмму соратникам, произошёл спор на тему производительности,

Ф>заметьте код ещё не был написан, т.е. ни строчки вообще.
Ф>Короче, решили поставить эксперимент — загнали много тестовых данных, и замучили СУБД. (Ну и запросы у вас — сказала БД, медленно пережёвывая винт.)
Ф>Результаты эксперимента оказались неутешительными — пришлось делать денормализацию.
Ф>---------------
Ф>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!

Значит эта оптимизация не была преждевременной.
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: Кэр  
Дата: 17.03.10 09:49
Оценка: 1 (1) :)))
Здравствуйте, Фанатик, Вы писали:

Ф>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!


Сейчас, подождите, к такому вопрос надо хорошо подготовиться. Сейчас вот взъерошу волосы. Ага, так... выпучиваю глаза. Вдох. Выдох. Итак:
КАКОЙ ЖЕ ИЗ ЭТОГО СЛЕДУЕТ ВЫВОД?!?!?!?!?!!?!!11адын
Re[3]: О цитате "Преждевременная оптимизация - корень всех з
От: Фанатик Ад http://vk.com/id10256428
Дата: 17.03.10 14:51
Оценка: +1 :)
Здравствуйте, Кэр, Вы писали:

Ф>>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!

Кэр>КАКОЙ ЖЕ ИЗ ЭТОГО СЛЕДУЕТ ВЫВОД?!?!?!?!?!!?!!11адын

!) О том, что думать нужно прежде чем писать.
1) Первое решение, пришедшее в голову нуждается в ревьюинге.
2) О том, что на некотором этапе оптимизировать, возможно, придётся за свой счёт.

О "Преждевременной оптимизации" пусть думает Дональд Кнут, или такие, как он.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: fmiracle  
Дата: 17.03.10 16:43
Оценка: +2
Здравствуйте, Фанатик, Вы писали:

Ф>не так давно проектировал небольшую БД. Когда показал ER-диаграмму соратникам, произошёл спор на тему производительности,

Ф>заметьте код ещё не был написан, т.е. ни строчки вообще.
Ф>Короче, решили поставить эксперимент — загнали много тестовых данных, и замучили СУБД. (Ну и запросы у вас — сказала БД, медленно пережёвывая винт.)
Ф>Результаты эксперимента оказались неутешительными — пришлось делать денормализацию.
Ф>---------------
Ф>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!

Для полного понимания полезности данной (конкретной) истории не хватает результатов применения, которые показали, что :

1) при написании кода, работающего с денормализованной структурой (и, возможно, с дублированием информации — тоже для скорости ) — не наделали кучи глупых ошибок и не получили рассинхронизацию информации по разным таблицам.
2) данных в системе оказалось не меньше, чем залитой кучи тестовых
3) реальная работа пользователей в системе совпала с алгоритмом замучивания СУБД
4) все потребовавшиеся изменения и уточнения в системе, а так же реализация новых запросов пользователй по результатам работы с системой, прекрасно легли на получившуюся денормализованную версию.



А то у меня был случай, когда базу — до написания системы — денормализовали для скорости, написали код, а потом оказалось смертельно необходимо реализовать одну новую функциональность, которая в денормализованную структуру никак не ложилась. И пришлось структуру нормализовывать и код переписывать... Скорость работы при этом стала пониже, но это оказалось менее актуально, чем реализация того нового функционального требования.
Что обидно было в том случае — что идея нормализованной структуры рассматривалась изначально...
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: COFF  
Дата: 22.03.10 15:41
Оценка:
Здравствуйте, Фанатик, Вы писали:

Ф>Результаты эксперимента оказались неутешительными — пришлось делать денормализацию.

Ф>---------------
Ф>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!

Ты поступил совершенно нерационально. В таких ситуациях обычно рекомендуют купить более мощное железо :)
Re[3]: О цитате "Преждевременная оптимизация - корень всех з
От: Sinix  
Дата: 23.03.10 17:37
Оценка: :)
Здравствуйте, COFF, Вы писали:

COF>В таких ситуациях обычно рекомендуют купить более мощное железо

и наконец проставить индексы
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: TimurSPB Интернет  
Дата: 23.03.10 18:29
Оценка:
Ф>Результаты эксперимента оказались неутешительными — пришлось делать денормализацию.
Ф>---------------
Ф>А ЕСЛИ БЫ КОД БЫЛ УЖЕ НАПИСАН?????!!!!!

Так а чем все закончилось?
Make flame.politics Great Again!
Re: О цитате "Преждевременная оптимизация - корень всех зол"
От: TimurSPB Интернет  
Дата: 23.03.10 18:32
Оценка:
Получается так:
"Преждевременная оптимизация — корень всех зол в программировании" ( народн. программис. )
Make flame.politics Great Again!
Re[2]: О цитате "Преждевременная оптимизация - корень всех з
От: Воронков Василий Россия  
Дата: 23.03.10 22:14
Оценка:
Здравствуйте, FR, Вы писали:

FR>

FR>Закон Арнольда: "если Теорема носит чьё-то имя, то этот человек скорее всего не является её создателем."


А кто является автором закона Арнольда?
Re[3]: О цитате "Преждевременная оптимизация - корень всех з
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.03.10 23:01
Оценка: 14 (2)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, FR, Вы писали:


FR>>

FR>>Закон Арнольда: "если Теорема носит чьё-то имя, то этот человек скорее всего не является её создателем."


ВВ>А кто является автором закона Арнольда?


В своей книге "Математическое понимание природы" В.И. Арнольд пишет:

Английский физик М. Берри назвал этот эпонимический принцип "принципом Арнольда", добавив к нему ещё и второй: "принцип Берри".
Этот эпонимический принцип Берри гласит: "принцип Арнольда применим к самому себе" (т.е. не Арнольдом изобретён).

Re[4]: О цитате "Преждевременная оптимизация - корень всех з
От: Фанатик Ад http://vk.com/id10256428
Дата: 24.03.10 06:20
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, COFF, Вы писали:


COF>>В таких ситуациях обычно рекомендуют купить более мощное железо

S>и наконец проставить индексы

Я пытался ставить индексы, это помогает, но проблемы не снимает.
Структура данных в софтине очень напоминает форум — есть топики, есть ответы.
В каждом топике от двухсот записей.
При этом необходимо было ответить на 3 вопроса:
1) когда пришёл первый и последний ответ на топик,
2) кто первый, а кто последний ответивший
3) сколько ответов, и какова суммарная оценка топика

Всё это нужно было показывать каждому пользователю, притом с хорошим откликом. Тормозили естественно расчёт количества и суммы, и именно для них пришлось делать денормализацию.

Соответственно задача была решена со: запись, обновление и удаление в БД были организованы через ХП, и при записи пересчитывались суммы и количества, поэтому наиболее частая и ресурсоёмкая операция — чтение не тормозила.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: О цитате "Преждевременная оптимизация - корень всех з
От: Sinix  
Дата: 24.03.10 06:52
Оценка:
Здравствуйте, Фанатик, Вы писали:

Ф>Структура данных в софтине очень напоминает форум — есть топики, есть ответы.

...
Ф>Соответственно задача была решена со: запись, обновление и удаление в БД были организованы через ХП, и при записи пересчитывались суммы и количества, поэтому наиболее частая и ресурсоёмкая операция — чтение не тормозила.

Дык это ещё не денормализация — обычное кэширование (и делается обычно триггером с хранением превычисленных значений в отдельной таблице. но это оффтоп и сильно зависит от субд.).

Корень зла — это добавить хранимку RecalcValues и заставить клиента дёргать её перед началом сеанса. Выбирать данные из временной таблицы. Перетюнить запросы.
Затем обнаружить, что данные могут устареть и придумать механизм проверок на времени последнего изменения. Перетюнить запросы. Затем поменять на таймштампы. Перетюнить запросы. Добавить job пересчитывающий все значения чтобы хоть что-то работало. Обнаружить что в tempdb конкретный затык с местом/производительностью и сваять нулевой рейд из древних в хлам убитых винтов. Найти утилиту для смарт-мониторинга и полдня заставлять её отправлять отчёты на жаббер. Порадоваться достигнутым результатам и перейти к следующей оптимизации.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.