Tuesday, January 18, 2011

Оптимизация может быть злом

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

Мне порой кажется, что существует определенная категория программистов, которые считают что самое главное в программе - это максимальная степень оптимизации. Склонен с этим мнением не согласится. Отвечая на вопрос, что самое главное, нужно смотреть с двух разных точек зрения и искать компромисс между ними. И во многих случаях получится так, что оптимизации места здесь не найдется. Две точки зрения - это прикладная программа с точки зрения конечного пользователя, и программный код с точки зрения разработчика(-ов).

Конечного пользователя интересует программный продукт, набор его функций и возможностей, ему все равно выполняется ли определенный участок кода за 1 мс или за 10 мс, если он все равно не заметит разницы. Но погоня за выйгрышем этих 9 мс может обойтись разработчику достаточно дорого. Вопрос - в чем смысл? Единственный возможный - это в целях самообразования, но не более. Поймите, что качество программы от этого не вырастет ни на йоту, а может даже и упадет.

Программный код же далеко не в последнюю очередь пишется для людей. И требования к нему - соответствующие. Он должен быть понятен, читаем, гибок и расширяем. Разработка почти никогда не заканчивается в момент выпуска первой версии программы, и очень важно чтобы усовершенствование программного продукта обходилась как можно дешевле. Оптимизация же может принести вред качеству кода с этой точки зрения (особенно низкоуровневая оптимизация) - мы пытаемся сделать код более оптимальным для машины, за счет уменьшения его оптимальности для человека. Выигрыш от ненужной оптимизации сомнителен, в то время как проигрыш - ощутим. ПРЕЖДЕВРЕМЕННАЯ ОПТИМИЗАЦИЯ - ЗЛО! Не чешите, пока не чешется. Но с другой стороны, обратное - преждевременная пессимизация - тоже зло. Ищите серединку опираясь на обозначенные приоритеты.

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

13 comments:

GunSmoker said...

Тоже на форумах встретился? :)

Ins said...

GunSmoker, мысли сходятся :)

Чорны кашак said...

"преждевременная оптимизация - зло" - это правильно. Но фразами "все равно выполняется ли определенный участок кода за 1 мс или за 10 " кидаться не надо, т.к. кто-нибудь выдернет фразу из контекста и возьмет ее на вооружение. Например, вы написали подобный метод: текст загляденье, протестировали - "компиляция прошла успешно, получены верные результаты". А другой программист создал ваш объект и вызывает "красивый по коду" метод в цикле. Юзер заметит тормоза и другому программисту придется переделывать вашу работу (если вас не окажется под рукой). А если у второго программиста не будет сорцов вашего объекта? Так, что не стоит жертвовать оптимальностью кода в пользу читабельности кода, должен быть разумный баланс ;-)

Unknown said...

Каждая компания стремится к успеху, стремится добиться его на рынке и превзойти конкурентов. Эти желания похвальны, определить их можно простым тезисом — каждый хочет стать лучшим. Мы, естественно, стремимся к тому же, это развивает нас, стимулирует к принятию за эталон лучших мировых аналогов, мы искренне рады, что достигли в своем стремлении существенных успехов, став значимой фигурой среди представителей строительной отрасли.
http://www.gazoblok-gazobeton.com.ua/
http://new.xn--80acerqftc.com.ua/
http://www.xn--80acerqftc.com.ua
http://pp-budpostach.com.ua

Igor Schevchenko said...

Люто, бешено плюсую :))

Anonymous said...

There were a few cases that were tainting the image of the entire force. Knowledge enlightens the desire among the individuals to make their country progressive enough to acquire a significant position on the globe., anonymous proxy server review. Best practices in the model focus on activities for initiating and managing the acquisition of products and services that meet the needs of the customer. virtual private network policy

Anonymous said...

Other women will not get a positive result until after they miss their period. Since you had deposited only $1,000 in your account, your account would have went into debit, except for your nodebit guarantee., mobile network architecture. Does it affect half of your brain, full of it, forehead, near the eyebrows etc? access atc

Anonymous said...

Inquiries about your credit stays on the report for two years while late payments, defaults appear in the report for seven years from the month the late payment was made. file backup server

Anonymous said...

Choose your favorite cast stone fountain by comparing all the cast stone fountains available. Materials like aluminum that provides a lightweight and durable frame to mount the solar cells and protect them from the elements has allowed these newer panels to far outlast the older versions., ios network. The toxins in the cells are stressed and the toxins built up cannot be expelled properly. vpn issues airport

Anonymous said...

И сколько желание мы делали без вашей отличной идеи [url=http://profvesti.ru/o-tekhnologiyakh-stroitelstva/63-monolitnoye-stroitelstvo-tekhnologiya.html]строительный портал тюмень[/url]

Anonymous said...

http://clemokfevi.tk/sado/anketa55394.htm Садо-мазо Госпожа КИРА, не доступен
http://www.rewtggs.tk/comments/anketa/72690 Отзывы о девушке Белла, Нижний Новгород, (950)6155722
http://nemoroomar.tk/ind/anketa87367.htm Проститутки M. Текстильщики - Индивидуалка Юля, Район Текстильщики, +7 (906) 095-70-08
http://flicwindecos.tk/mass/anketa74373.htm Массажистка Алиса, M. Белорусская - Район САО, +7 (495) 518-14-56
http://saywtenasun1972.tk/comments/anketa/17186 Отзывы о девушке KELLY, Москва, (903)7426181

Anonymous said...

http://saywtenasun1972.tk/checked/anketa/89013 Оценки Лена, Москва, (906)0492954
http://congbachessne.tk/checked/anketa/73642 Оценки Ирина, Москва, (916)9281882
http://krawindaibull.tk/ind/anketa78139.htm Проститутки M. Киевская - Индивидуалка Кира, +7 (903) 679-98-84
http://fracenberri1975.tk/comments/anketa/73628 Отзывы о девушке Ирэн, Москва, (916)9496817
http://saywtenasun1972.tk/comments/anketa/46189 Отзывы о девушке Настя, Москва, (926)0279733

праститутки после сорока москва

macauleyracanelli said...

titanium jewelry piercing - Titanium Art
T-Shirt. T-Shirt black titanium rings is a unique babyliss titanium flat iron design that will help titanium white rocket league create unique jewelry that is titanium a metal is custom designed is titanium a conductor and crafted to suit all sizes and sizes available