Александр Петрович - Записки программиста А.
— Вот ведь бл [email protected]#&во… — говорил программист А. в таких случаях и допивал очередную бутылку SamAdams.
1010001— Ерунда все эти ваши органические продукты, — зло ворчал себе под нос программист А., морщась от головной боли и стараясь лишний раз не двигаться телом, чтобы не усугублять мучительный беспорядок в желудке. Он сидел на работе, и пытался набирать PL/SQL-код, но в глазах двоилось, и поэтому вместо SELECT…AS каждый раз упорно печаталось SELECT…ASS.
— Только одно название, что органические, а все одно — та же химия. Общество потребления, чтоб им пусто было. Whole Foods, Trader Joe's, Planet Organics Fresh Market my ass… Все, все — с одной и той же грядки! На чем надо было выращивать арбуз, чтобы им можно было так отравиться! Хорошо еще, хоть арбуз был маленький…
Он уронил голову на клавиатуру и попал на клавишу DEL. Так как рукой он при этом держал CTRL-ALT, компьютер перезагрузился. Программист А. не обратил на это внимания.
— …а бутылка большая, — продолжал размышлять он. — Если бы водкой не запивал, вообще бы окочурился. Вот ведь бл [email protected]#&во!
1010010Программист А. оторвал уставший взгляд от монитора, потер кулаком покрасневшие глаза и встал. На кухне он обмотал бутылку пива, которую держал в руках, салфеткой, вышел на крыльцо и сел на верхнюю ступеньку. Мыслей в голове уже не было, вернее, они были, но словно неподвижно валялись в углу, как скомканные бумажные листы с бесполезным кодом. Алгоритм не выстраивался.
Солнце садилось прямо за дом напротив, заливая улицу розовым светом. Сосед справа возился с граблями во дворе. Он приветливо помахал А. рукой, А. кивнул в ответ.
— Сейчас приедет машина из Domino, — подумал почему-то А., и машина действительно появилась и остановилась у дома слева. Сосед слева всегда заказывал пиццу в это время в воскресенье. В общем, все было как обычно. Все было одно и то же изо дня в день. Все повторялось и повторялось, как код, вошедший в бесконечный цикл. В этом было что-то необычное, какая-то идея, которую усталый мозг не хотел схватывать. Программист А. сидел на крыльце и смотрел, как диск солнца скрывается за черным краем крыши.
— Вот уж действительно, — подумал он. — Восходит солнце, и заходит солнце…
— …и спешит к месту своему, где оно восходит… — послышался тихий голос непонятно откуда.
Программист А. оглянулся. Поблизости никого не было.
— Надо меньше работать, — проворчал А. и отхлебнул пива из бутылки.
Все повторялось и повторялось, изо дня в день. Различия присутствовали, но были несущественны, существенным было повторение. Это выглядело примерно как вызывать одну и ту же функцию с разными параметрами — значения локальных переменных внутри функции могут изменяться в зависимости от значений параметров, но код функции — код, который исполняется — он всегда один и тот же. Но кто вызывает эту функцию?
Темнело. Мягкий ветерок прокатился по траве.
— Идет ветер к югу, и переходит к северу, кружится, кружится на ходу своем… — подумал опять программист А., и на мгновение ему показалось, что ветер подхватил скомканные листы мыслей в его голове и сложил из них в воздухе некое подобие идеи.
— … и возвращается ветер на круги своя… — с готовностью откликнулся тот же самый голос.
— Возвращается, говоришь?.. — программиста А. внезапно осенило и алгоритм решения задачи, над которым он ломал голову все выходные, вдруг выстроился в его голове до последнего квадрата блок-схемы.
— …что было, то и будет; и что делалось, то и будет делаться… — монотонно продолжал внутренний голос, но А. его уже не слушал.
Он все понял. Функция вызывала саму себя! Поэтому все и повторялось. Поэтому и не было ничего нового под солнцем. Он бросился в дом, к компьютеру, и, сделав огромный глоток пива, принялся с пулеметной скоростью стучать по клавишам.
— Ну конечно! — приговаривал он. — Рекурсия! Суета сует! Блоковая структура с лексическим именованием — и рекурсия, рекурсия! Вот ведь бл [email protected]#&во!
1010011— Вот здесь я аккуратно проверяю входной параметр на соответствие типу данных, и выдаю сообщение об ошибке, если необходимо, — с энтузиазмом рассказывал молодой индийский программист, указывая на соответствующие строки кода на экране монитора.
Программист А., расположившийся рядом в кресле, кивнул.
— Далее, и это очень интересно, обратите внимание, я использую алгоритм быстрой сортировки по имени, чтобы избежать упорядочивания во время запроса к базе данных! Неплохая идея, а?
Программист А. кивнул. Ободренный начинающий программист возбужденно продолжал:
— Затем я использую хэш-таблицу для учета регистров, что позволяет мне быстро и эффективно считывать информацию.
Программист А. кивнул.
— Здесь я не уверен, однако, что ключ оптимален, — говорил индийский программист. — Так как разные узлы могут иметь одинаковый тип данных, добавление его к ключу может снизить количество обращений к базе. Что бы Вы посоветовали?
Программист А. кивнул. Молодой индийский программист некоторое время помолчал и тихо вышел из комнаты. Программист А. кивнул еще раз. Ему снился остров Кауаи и он сам, скользящий на серфинговой доске по теплой зеленой волне.
1010100Программист А. сидел в Starbucks с компьютером и большим стаканом caffè latte. Звучала тихая музыка, уютно светился изнутри большой серый камин, непринужденно болтали за стойкой официанты в черных-зеленых фартуках, скрашивая друг для друга безлюдный вечерний час. Программист А. ничего этого не замечал. Ссутулившись над столом, он не первый час безуспешно пытался найти нужный алгоритм, и ему уже начинало казаться, что это невозможно.
Отчаявшись, А. поднял голову от экрана и огляделся. Словно впервые, он с удивлением заметил странные картины на стене, причудливые лампы под потолком, диски Эллы Фитцджералд и The Police у кассового аппарата. Внезапно его осенило.
— Подождите! — воскликнул он. — Но ведь это же все совершенно неправильно! Это делается совсем не так!
Он вскочил, быстро собрал вещи и выбежал на улицу. Перейдя через дорогу, он вошел в О'Клири и сел за стойку. Здесь громко играла музыка, по телевизору показывали бейсбол, Red Sox выигрывали у канадцев. А. кивнул соседу за стойкой, сосед весело показал ему шаку. Бармен деловито поставил перед ним кружку Сибирской Короны и сгреб пятерку и доллар.
— Вот теперь все как надо, — удовлетворенно сказал А. и, снова ссутулившись над экраном, продолжил свой безнадежный труд.
1010101Программист А. сидел в темной комнате у камина, пил виски “Канадский туман” и смотрел в огонь. Неожиданно огонь скукожился и погас.
— Интересно, — подумал программист А. — Куда делся огонь? Только что он был здесь, в этой комнате, и теперь его нет… Ничто не девается в никуда. Значит, огонь ушел…
Вывод показался вполне логичным, и А. отметил это большим глотком виски.
— Однако, если огонь ушел, — продолжал рассуждать он. — То куда он ушел? В каком направлении? На север? На юг?
Этот вопрос был сложнее предыдущего, пришлось выйти на кухню и наполнить бокал новой порцией виски. Когда А. вернулся в комнату, в камине опять горел огонь.
— Хм…, - подумал А., усаживаясь в кресло. — Интересно, это какой-то другой огонь, или это тот же огонь, что был здесь до этого? Может быть, он просто выходил на кухню налить себе виски?
Программист А. сделал большой глоток. В окна второй день, не переставая, стучал холодный декабрьский дождь. Больше ничего не происходило.
1010110— Вы, программисты старшего поколения, совершенно отстали от жизни, — говорил молодой программист пристыженно молчащему программисту А. — Вы не понимаете, что времена изменились, приходят новые технологии, вы же пытаетесь их игнорировать, засовывая головы в песок, как страусы, отказываетесь признать свою углубляющуюся некомпетентность и продолжаете применять отжившие себя методы, стараясь уместить задачи новой эпохи в прокрустово ложе своих навыков, сформированных в прошлом веке. Посмотрите вокруг. Как долго еще вы сможете использовать старые инструменты там, где всё с надеждой взывает к перемене? Да, это правда — в прошлом веке без этих инструментов не встала бы ни одна операционная система, не начал бы печатать ни один сетевой принтер, не заработал бы ни один драйвер устройства… Но теперь время перемен! Ваши инструменты больше не помогают, вы должны это признать.
Программисту А. нечего было возразить — он действительно уже два дня безуспешно пытался заставить базу данных Oracle работать в системе Linux той же компании Oracle. Пиво действительно больше не помогало.
— А может быть, молодняк прав? — подумал программист А. — Может быть, все так и есть, и наше время ушло? Может быть, нам и вправду пора поучиться у молодых? Вот ведь бл [email protected]#&во…