Вся наша жизнь — это борьба с тормозами и нехваткой времени. Каждый день мы тратим по несколько часов на оптимизацию. Каждый из нас старается оптимизировать все, что попадает под руку. А вы уверены, что вы это делаете правильно? Может быть, есть возможность что-то сделать еще лучше? Я понимаю, что все сейчас разленились и выполняют свои обязанности спустя рукава. Лично я до такой степени привык, что за меня все делает компьютер, что даже забыл, как выглядит шариковая ручка. Недавно мне пришлось писать заявление на отпуск на простой бумаге, так я забыл, как пишется буква "ю". Пришлось подглядывать, как она выглядит на клавиатуре. Это не шутка. Это прогресс, благодаря которому я все делаю на компьютере. Даже для того, чтобы написать текст из двух строк, мы включаем свой компьютер и загружаем MS Word, тратя на это драгоценное время. А может, легче было бы написать этот текст вручную? Я вас понимаю — несолидно!!! Программисты — так это вообще "полное бесстыдство", как говорил один из моих преподавателей: "Тра-та-та". Если они считают, что их творение (в виде исходного кода) никто не увидит, и можно писать что угодно, так это они ошибаются. С этой точки зрения программы с открытым исходным кодом в большом преимуществе, потому что они намного чище и быстрей. Создавая код, мы ленимся его оптимизировать не только с точки зрения размера, но и с точки зрения скорости. Глядя на такие творения, хочется ругаться матом, только программа от этого лучше не станет. Хакеры далеко не ушли. Если раньше, глядя на программиста или хакера, создавался образ прокуренного, заросшего и немытого молодого человека, то сейчас это цифровое существо, залитое пивом "Балтика" по самые уши, за которое все выполняют машины. Вам медсестра в поликлинике не говорила, что у вас вместо крови одно только пиво льется? Не, я ничего против пива не имею, я и сам его люблю, но надо же и меру знать. Все это — деградация по методу MS!!! Мы берем в руки мышку и начинаем тыкать ей где попало, забывая про клавиатуру и горячие клавиши. Я считаю, что надо бороться с этим. В последнее время меня самого посещает такая лень, что я убираю клавиатуру, запускаю экранную клавиатуру и начинаю работать только мышкой. Осталось только покрыть мое тело шерстью и по- садить в клетку к таким же ленивым шимпанзе. Не надо тратить большие деньги на модернизацию компьютера!!! Начните лучше улучшения с себя. Давайте оптимизируем свою работу и то, что мы делаем, и тогда компьютер заработает намного быстрее. Изначально эта часть книги задумывалась как рассказ об оптимизации кода программ, но впоследствии я перенес в нее свой "труд", который можно найти и в Интернете на моем сайте, потому что оптимизировать надо все. Я буду говорить про теорию оптимизации, а ее законы действуют везде. По тем же законам вы можете оптимизировать свой распорядок дня, чтобы успевать все сделать, и свою ОС, чтобы она работала быстрей. Но основа все же будет относиться к коду программ. Здесь будет описано немного больше информации, чем в статье, которую можно увидеть на сайте, или в одноименной главе моей книги "Библия Delphi ". Как всегда я постараюсь давать как можно больше реальных примеров, чтобы вы смогли убедится в том, что вам не вешают очередную лапшу на уши, и смогли применить все сказанное на практике. Начну с законов, которые работают не только в программировании, но и в реальной жизни. Ну а напоследок я оставлю только то, что может пригодиться при оптимизации кода.
ЗАКОН № 1 Оптимизировать можно все. Даже там, где вам кажется, что все и так работает быстро, можно сделать еще быстрее. Это действительно так. И этот закон очень сильно проявляется в программировании. Идеального кода не существует. Даже простую операцию сло- жения 2 + 2 тоже можно оптимизировать. Чтобы достичь максимального результата, нужно действовать последовательно и желательно в том порядке, в котором описано ниже. Помните, что любую задачу можно решить хотя бы двумя способами (или больше), и ваша задача — выбрать наилучший метод, который обеспечит желаемую производительность и универсальность.
ЗАКОН № 2 Первое, с чего нужно начинать, — это с поиска самых слабых и медленных мест. Зачем начинать оптимизацию с того, что и так работает достаточно быстро/ Если вы будете оптимизировать сильные места, то можете нарваться на неожиданные конфликты. Да и эффект будет минимален. Тут же я вспоминаю пример из своей собственной жизни. Где-то в 1995 году меня посетила одна невероятная идея — написать собственную игру в стиле Doom. Я не собирался ее делать коммерческой, а хотел только потренировать свои мозги на сообразительность. Четыре месяца невероятного труда, и нечто похожее на движок уже было готово. Я создал один голый уровень, по которому можно было перемещаться, и с чувством гордости побежал по коридорам. Никаких монстров, дверей и атрибутики на нем не было, а тормоза ощущались достаточно значительные. Тут я представил себе, что будет, если доба- вить монстров и атрибуты, да еще и наделить все это AI.... Вот тут чувство собственного достоинства поникло. Кому нужен движок, который при разрешении 320x200 (тогда это было круто!) в голом виде тормозит со страшной силой? Вот именно.... Понятное дело, что мой виртуальный мир нужно было оптимизировать. Целый месяц я бился над кодом и вылизывал каждый оператор моего движка. Результат — мир стал прорисовываться на 10% быстрей, но тормозить не перестал. И тут я увидел самое слабое место — вывод на экран. Мой движок просчитывал сцены достаточно быстро, а пробоиной был именно вывод изображения. Тогда еще не было шины AGP, и я использовал простую PCI-видеокарту от S3 с 1 Мбайтом памяти. Пара часов колдовства, и я выжал из PCI все возможное. Откомпилировав движок, я снова загру- зился в свой виртуальный мир. Одно нажатие клавиши "вперед", и я очутился у противоположной стены. Никаких тормозов, сумасшедшая скорость просчета и моментальный вывод на экран. Как видите, моя ошибка была в том, что вначале я неправильно определил слабое место своего движка. Я месяц потратил месяц на оптимизацию математики, и что в результате? Мизерные 10% прироста в производительности. Но когда я реально нашел слабое звено, то смог повысить производительность в несколько раз. Именно поэтому я говорю, что надо начинать оптимизировать только со слабых мест. Если вы ускорите работу самого слабого звена вашей программы, то, может быть, и не понадобится ускорять другие места. Вы можете потратить дни на оптимизацию сильных сторон и увеличить производительность только на 10% (что может оказаться недостаточным), или несколько часов на улучшение слабой части, и получить улучшение в 10 раз!..
|