— Вы меня все еще не убедили.
— Позвольте привести пример. Вы ведь знаете, в чем разница между интерпретируемым и компилируемым языками.
— Конечно! Интерпретируемые языки медленнее, потому что каждая строка кода заново интерпретируется всякий раз, когда интерпретатор ее встречает. В компилируемых языках много времени уходит на предварительную обработку программы и ее перевод на машинный язык, зато потом она выполняется быстрее аналогичной интерпретируемой программы.
— Совершенно верно.
— Так вы хотите, чтобы я откомпилировал свою жизнь?
— Нет, хотя это был бы идеальный вариант. Впрочем, у компиляторов мы можем научиться главному — потратить немного времени сначала, чтобы много раз не тратить его потом. Например, на одном из предыдущих мест работы я должен был периодически заменять ленты для резервного копирования. Тогда еще не было недорогих кассетных магнитофонов, облегчающих эту работу. У нас было три главных сервера в машинном зале и восемь серверов поменьше в разных концах здания. Можно было не менять ленту, на которой еще достаточно свободного места, но мне всегда было трудно принять решение, могу ли я не менять ленту на конкретном сервере. Если я ошибался в оценке свободного места на ленте, то операция резервного копирования на нее могла сорваться. Естественно, я хотел избежать подобных сбоев! Эта ситуация держала меня в состоянии постоянного стресса. В один прекрасный день я осознал, что действую как интерпретатор, ежедневно повторяя каждый свой шаг и обдумывая каждую деталь. Мне понадобилось проанализировать процесс всего один раз и затем всегда придерживаться принятых решений.
Первое решение, которое я принял, звучало так: «Лента гораздо дешевле моего времени». Поэтому вместо экономии каждого бита я стал жертвовать местом на ленте ради выигрыша во времени.
Следующее решение: «Не нужно напрягаться по поводу несущественных данных». Данные на восьми малых серверах, установленных в других частях здания, были гораздо менее важными, чем данные на главных серверах в машинном зале. Тем не менее я беспокоился и об этих не столь важных данных. Я должен был перестать волноваться (и испытывать стресс) по поводу несущественной информации. Сисадмины не всегда правильно расставляют приоритеты.
Я решил, что должен провести анализ один раз и пользоваться его результатами каждый день. Я должен был из интерпретатора превратиться в компилятор: один раз откомпилировать решение, а затем применять его снова и снова. Мой анализ показал, что ленты для серверов в машинном зале нужно менять почти ежедневно. Следовательно, я должен был менять их каждый день независимо от того, сколько на них остается свободного места.