Петрович Александр
Шрифт:
— Вот ведь бл$@#&во… — говорил программист А. в таких случаях и допивал очередную бутылку SamAdams.
— Ерунда все эти ваши органические продукты, — зло ворчал себе под нос программист А., морщась от головной боли и стараясь лишний раз не двигаться телом, чтобы не усугублять мучительный беспорядок в желудке. Он сидел на работе, и пытался набирать PL/SQL-код, но в глазах двоилось, и поэтому вместо SELECT…AS каждый раз упорно печаталось SELECT…ASS.
— Только одно название, что органические, а все одно — та же химия. Общество потребления, чтоб им пусто было. Whole Foods, Trader Joe's, Planet Organics Fresh Market my ass… Все, все — с одной и той же грядки! На чем надо было выращивать арбуз, чтобы им можно было так отравиться! Хорошо еще, хоть арбуз был маленький…
Он уронил голову на клавиатуру и попал на клавишу DEL. Так как рукой он при этом держал CTRL-ALT, компьютер перезагрузился. Программист А. не обратил на это внимания.
— …а бутылка большая, — продолжал размышлять он. — Если бы водкой не запивал, вообще бы окочурился. Вот ведь бл$@#&во!
Программист А. оторвал уставший взгляд от монитора, потер кулаком покрасневшие глаза и встал. На кухне он обмотал бутылку пива, которую держал в руках, салфеткой, вышел на крыльцо и сел на верхнюю ступеньку. Мыслей в голове уже не было, вернее, они были, но словно неподвижно валялись в углу, как скомканные бумажные листы с бесполезным кодом. Алгоритм не выстраивался.
Солнце садилось прямо за дом напротив, заливая улицу розовым светом. Сосед справа возился с граблями во дворе. Он приветливо помахал А. рукой, А. кивнул в ответ.
— Сейчас приедет машина из Domino, — подумал почему-то А., и машина действительно появилась и остановилась у дома слева. Сосед слева всегда заказывал пиццу в это время в воскресенье. В общем, все было как обычно. Все было одно и то же изо дня в день. Все повторялось и повторялось, как код, вошедший в бесконечный цикл. В этом было что-то необычное, какая-то идея, которую усталый мозг не хотел схватывать. Программист А. сидел на крыльце и смотрел, как диск солнца скрывается за черным краем крыши.
— Вот уж действительно, — подумал он. — Восходит солнце, и заходит солнце…
— …и спешит к месту своему, где оно восходит… — послышался тихий голос непонятно откуда.
Программист А. оглянулся. Поблизости никого не было.
— Надо меньше работать, — проворчал А. и отхлебнул пива из бутылки.
Все повторялось и повторялось, изо дня в день. Различия присутствовали, но были несущественны, существенным было повторение. Это выглядело примерно как вызывать одну и ту же функцию с разными параметрами — значения локальных переменных внутри функции могут изменяться в зависимости от значений параметров, но код функции — код, который исполняется — он всегда один и тот же. Но кто вызывает эту функцию?
Темнело. Мягкий ветерок прокатился по траве.
— Идет ветер к югу, и переходит к северу, кружится, кружится на ходу своем… — подумал опять программист А., и на мгновение ему показалось, что ветер подхватил скомканные листы мыслей в его голове и сложил из них в воздухе некое подобие идеи.
— … и возвращается ветер на круги своя… — с готовностью откликнулся тот же самый голос.
— Возвращается, говоришь?.. — программиста А. внезапно осенило и алгоритм решения задачи, над которым он ломал голову все выходные, вдруг выстроился в его голове до последнего квадрата блок-схемы.
— …что было, то и будет; и что делалось, то и будет делаться… — монотонно продолжал внутренний голос, но А. его уже не слушал.
Он все понял. Функция вызывала саму себя! Поэтому все и повторялось. Поэтому и не было ничего нового под солнцем. Он бросился в дом, к компьютеру, и, сделав огромный глоток пива, принялся с пулеметной скоростью стучать по клавишам.
— Ну конечно! — приговаривал он. — Рекурсия! Суета сует! Блоковая структура с лексическим именованием — и рекурсия, рекурсия! Вот ведь бл$@#&во!
— Вот здесь я аккуратно проверяю входной параметр на соответствие типу данных, и выдаю сообщение об ошибке, если необходимо, — с энтузиазмом рассказывал молодой индийский программист, указывая на соответствующие строки кода на экране монитора.
Программист А., расположившийся рядом в кресле, кивнул.
— Далее, и это очень интересно, обратите внимание, я использую алгоритм быстрой сортировки по имени, чтобы избежать упорядочивания во время запроса к базе данных! Неплохая идея, а?