Возникла мысль что некоторые учасники дискусии не вполне разделяют понимание что такое оптимизация.
Попробую привести пример из реальной жизни.
Кратко , есть в сжатии MP3 такой алгоритм , когда надо запихнуть сжатые данные в лимитированный объем(битрейт).
алгоритм
1. Бинарным делением мы находим величину квантизатора дающего ближайший по размеру результат.
2. находим самые искаженные частотные полосы , и для них конкретно уменьшаем величину квантизации.
3. После каждого изменения опять персчитываем сколько же места займет полученная информация.
(не будем заострять внимание что этот подход не эфективен в целом , можно лучше)
Так вот после замеров производительности , стало ясно что самым критичным является непосредственно нелинейная квантизация.
Анализ кода показал , что его разработчики знали об этой проблеме и уже постарались выжать из этого все что можно .
Что делать ? переписать на асемблере ? КОНЕЧНО ! Мне такое предлагали, даже настаивали . Но это ПОСЛЕДНЕЕ что я стал бы делать .
Первое правило оптимизатора какое ?
"Самый быстрый код — это тот который не выполняется"
И я подумал а можно ли сократить количество вызовов квантизатора ? И конечно , сразу понял что в большинстве случаев мы на каждой итерации квантизуем одни и теже данные с тем же самым шагом.
И тут добавление информации что на предыдущам шаге у нас была подобная квантизация и пересчитывать ее не надо дало прирост на порядок (этого шага)!!! И функция квантизации престала быть бутылочным горлышаком.
После этого было пару эвристик чтобы ускорить спуск бинарным поиском и т.д.
Так вот мысль , если бы я пытался оптимизировать квантизатор и переписывать на асемблере это дало бы минимальный прирост . А немного подумав , представив процес в целом пришло замечательное и во многом очевидное решение .
По жизни уже давным давно повторяю как мантру
"оптимизируйте алгоритмы а не код" нет неправильно , правильно так "ОПТИМИЗИРУЙТЕ АЛГОРИТМЫ А НЕ КОД !!!!!!"
Мне кажется что и Максим , когда говорит про "оптимизацию" совсем не имеет ввиду причесывание кода.
К сожалению в приведенном примере , для нахождения такого очевидного решения , пришлось ПОНЯТЬ что именно делает весь код в целом, а для этого надо знать и предметную область и многое другое.