Выбрать главу

Солнце садилось прямо за дом напротив, заливая улицу розовым светом. Сосед справа возился с граблями во дворе. Он приветливо помахал А. рукой, А. кивнул в ответ.

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

— Вот уж действительно, — подумал он. — Восходит солнце, и заходит солнце…

— …и спешит к месту своему, где оно восходит… — послышался тихий голос непонятно откуда.

Программист А. оглянулся. Поблизости никого не было.

— Надо меньше работать, — проворчал А. и отхлебнул пива из бутылки.

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

Темнело. Мягкий ветерок прокатился по траве.

— Идет ветер к югу, и переходит к северу, кружится, кружится на ходу своем… — подумал опять программист А., и на мгновение ему показалось, что ветер подхватил скомканные листы мыслей в его голове и сложил из них в воздухе некое подобие идеи.

— … и возвращается ветер на круги своя… — с готовностью откликнулся тот же самый голос.

— Возвращается, говоришь?.. — программиста А. внезапно осенило и алгоритм решения задачи, над которым он ломал голову все выходные, вдруг выстроился в его голове до последнего квадрата блок-схемы.

— …что было, то и будет; и что делалось, то и будет делаться… — монотонно продолжал внутренний голос, но А. его уже не слушал.

Он все понял. Функция вызывала саму себя! Поэтому все и повторялось. Поэтому и не было ничего нового под солнцем. Он бросился в дом, к компьютеру, и, сделав огромный глоток пива, принялся с пулеметной скоростью стучать по клавишам.

— Ну конечно! — приговаривал он. — Рекурсия! Суета сует! Блоковая структура с лексическим именованием — и рекурсия, рекурсия! Вот ведь бл$@#&во!

1010011

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

Программист А., расположившийся рядом в кресле, кивнул.

— Далее, и это очень интересно, обратите внимание, я использую алгоритм быстрой сортировки по имени, чтобы избежать упорядочивания во время запроса к базе данных! Неплохая идея, а?

Программист А. кивнул. Ободренный начинающий программист возбужденно продолжал:

— Затем я использую хэш-таблицу для учета регистров, что позволяет мне быстро и эффективно считывать информацию.

Программист А. кивнул.

— Здесь я не уверен, однако, что ключ оптимален, — говорил индийский программист. — Так как разные узлы могут иметь одинаковый тип данных, добавление его к ключу может снизить количество обращений к базе. Что бы Вы посоветовали?

Программист А. кивнул. Молодой индийский программист некоторое время помолчал и тихо вышел из комнаты. Программист А. кивнул еще раз. Ему снился остров Кауаи и он сам, скользящий на серфинговой доске по теплой зеленой волне.

1010100

Программист А. сидел в Starbucks с компьютером и большим стаканом caffè latte. Звучала тихая музыка, уютно светился изнутри большой серый камин, непринужденно болтали за стойкой официанты в черных-зеленых фартуках, скрашивая друг для друга безлюдный вечерний час. Программист А. ничего этого не замечал. Ссутулившись над столом, он не первый час безуспешно пытался найти нужный алгоритм, и ему уже начинало казаться, что это невозможно.

Отчаявшись, А. поднял голову от экрана и огляделся. Словно впервые, он с удивлением заметил странные картины на стене, причудливые лампы под потолком, диски Эллы Фитцджералд и The Police у кассового аппарата. Внезапно его осенило.

— Подождите! — воскликнул он. — Но ведь это же все совершенно неправильно! Это делается совсем не так!