Основы объектно-ориентированного программирования | страница 7
Все это, однако, не умаляет важности эффективности. Никому не нравится, когда приходится ждать ответа от интерактивной системы или покупать дополнительную память для работы программы. Поэтому необдуманное отношение к производительности неприемлемо. Если конечная система медленно работает или громоздка, то начинают жаловаться и те, кто заявлял, что "скорость не так уж важна".
В этом вопросе отражается то, что я считаю главной характеристикой создания ПО. Построение ПО трудно именно потому, что оно требует принятия во внимание многих различных требований, часть из которых, например корректность, абстрактны и концептуальны, в то время как другие, например эффективность, конкретны и связаны со свойствами компьютерного оборудования.
Некоторые ученые считают разработку ПО отраслью математики, для некоторых инженеров - это отрасль прикладной технологии. На самом деле это и то, и другое. Разработчик ПО должен соединить абстрактные понятия с их конкретными реализациями, математику корректных вычислений с временными и пространственными ограничениями, возникающими из физических законов и ограниченности оборудования. Необходимость ублажать и ангелов, и чудищ - центральная проблема создания ПО.
Постоянное увеличение компьютерной мощи, каким бы оно ни было впечатляющим, не может заменить эффективность, по крайней мере, по трем причинам:
[x]. Тот, кто покупает больший и более быстрый компьютер, хочет видеть действительные выгоды от дополнительной мощности - решать новые задачи, более быстро работать со старыми задачами, решать более важные версии старых задач за то же время. Если новый компьютер решает старые задачи за то же самое время - это нехорошо!
[x]. Явный эффект повышения мощности компьютера сказывается тогда, когда велика доля "хороших" алгоритмов по отношению к плохим. Предположим, что новая машина работает в два раза быстрее, чем старая. Пусть n - размер решаемой задачи, а N - максимальный размер, при котором удается решить задачу на старом компьютере за приемлемое время. Если используется линейный алгоритм, временная сложность которого O(n) , то новый компьютер даст возможность решить задачу вдвое большего размера - 2*N. Для квадратичного алгоритма со сложностью O(n>2) увеличение N составит только 41%. Переборный алгоритм со сложностью O(2>n) добавит к N только единицу - небольшое улучшение за такие деньги.
[x]. В некоторых случаях эффективность может влиять на корректность. Спецификация может устанавливать, что ответ компьютера на определенное событие должен произойти не позже, чем за определенное время, например, бортовой компьютер должен быть готов определить и обработать сообщение с сенсора рычага управления двигателя достаточно быстро, чтобы сработало корректирующее действие. Эта связь между эффективностью и корректностью не ограничивается приложениями, работающими "в реальном времени"; немногие люди заинтересуются моделью предсказания погоды, которой требуется 24 часа, чтобы предсказать погоду на завтра.