Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #108


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 108.  8 января 2011 г.

Здравствуйте, уважаемые читатели!

Сегодня предлагаем вам к ознакомненнию фрагмент перевода статьи «Оптимизация: ваш злейший враг». Автор статьи — Joseph M. Newcomer, автор перевода — Dale. Рекомендуем к прочтению всем программистам — возможно это сэкономит ваше время и силы.


Приятного чтения!




Предисловие переводчика


Ссылку на эту статью я обнаружил в книге: James W. Grenning. Test Driven Development for Embedded C. Поскольку рекомендациями таких людей, как Джеймс Греннинг, пренебрегать не следует, я отложил на время книгу и последовал по ссылке; а дочитав статью до конца, понял, что она должна быть интересна многим.

Оптимальность — очень ценная характеристика вообще и для программного обеспечения в частности. Когда мы говорим, что программа написана оптимально, мы обычно подразумеваем, что она не содержит ничего явно лишнего и рационально расходует ресурсы компьютера. Очень многие стремятся оптимизировать свои программы. Но многие ли действительно знают, как достигается оптимальность?

Прогресс в области вычислительной техники (отдельное спасибо Гордону Муру за его столь любимый нами закон) привел к тому, что напряженность борьбы за оптимальность ПО существенно снизилась в последнее время. Мощность современных персональных компьютеров настолько выросла, что мы может позволить себе транжирить некогда столь драгоценные гигагерцы и гигабайты на фантастические анимированные меню, реалистично выглядящие кнопки с тенями и прочие элементы дружественного интерфейса. Немногочисленные уцелевшие староверы гнут свою линию, что программирование на языках высокого уровня, особенно объектно-ориентированных — зло и сила в ассемблере, что использование разных оболочек (особенно .NET) — для убогих и выбор гуру — программирование на API, и т.д. Однако когда доходит до дела, обычно оказывается, что результат их воистину титанических усилий настолько незначителен, что не они сегодня определяют погоду на рынке ПО. Побеждают те, кто первым реагирует на потребность пользователя, а лишние мегабайты — кто их считает, когда гигабайтная планка памяти стоит чуть больше десяти долларов?

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

Впрочем, и здесь очень многие понимают оптимальность встроенного ПО довольно своеобразно. Отчасти это своеобразие объясняется бедностью инструментальных средств для разработки встроенных систем, отчасти тем, что многие разработчики систем на основе микроконтроллеров владеют паяльником гораздо увереннее, чем языками программирования, и не имеют професиональных навыков в области программной инженерии. Как известно, природа не терпит пустоты — там, где нет знаний, их заменяют предрассудки, а там, где нет уверенности, ее успешно заменяет упертость. Один из наиболее живучих предрасудков — встроенное ПО следует разрабатывать только на ассемблере; код, написанный на языках высокого уровня (в частности, на C) заведомо ущербен и неоптимален. При этом, чем меньше навыков программирования, тем крепче упертость сторонника мифа. (Есть, конечно, и другие суеверия, но они лежат за рамками данной статьи).

Итак, представляю перевод замечательной статьи, написанной человеком с огромным многолетним опытом. Он прекрасно знает предмет, о котором говорит.




Этот кричащий заголовок просто обязан привлечь ваше внимание, ибо речь пойдет о серьезных вещах.

Для начала несколько слов обо мне. Моя диссертация была одной из первых, посвященных автоматическому созданию оптимизирующих компиляторов по формальному описанию машины («Machine-Independent Generation of Optimal Local Code», CMU Computer Science Department, 1975). После защиты я провел три года в стенах CMU в качестве старшего исследователя на многопроцессорной вычислительной системе C.mmp, которая работала под управлением нашей доморощенной операционной системы Hydra, мощной и надежной. Затем я вновь вернулся к исследованиям компиляторов в рамках проекта PQCC (Production Quality Compiler-Compiler), непосредственным результатом которого стало образование Tartan Laboratories (впоследствии — просто фирма Tartan, ныне поглощенная Texas Instruments), компании по разработке компиляторов, в которой я работал в составе группы инструментальных средств. Я посвятил полтора десятка лет написанию и использованию инструментария для измерения производительности.

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


Оптимизация: что и когда


Достаточно квалифицированный программист не станет писать чересчур неэффективную программу. Во всяком случае, намеренно. Оптимизация — это то, чем вы занимаетесь, когда производительность оказывается недостаточной. Иногда оптимизировать легко, иногда — трудно. Иногда оптимизация прекрасно вписывается в вашу первоначальную разработку, а иногда требует полностью разрушить вашу прекрасную абстрактную систему классов. Но всегда, я повторяю: всегда на практике оказывалось, что ни один программист не был способен предсказать или проанализировать, где окажется узкое место в части производительности, не располагая реальными данными. Совершенно неважно, какие предположения вы строите по поводу утечки времени: в конце концов вы с изумлением обнаружите, что истинная причина кроется совсем в другом месте.

...


Целиком можно прочитать у нас на сайте.

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное