0110111
Программист А. открыл окно Notepad, напечатал слово BEGIN и спросил начинающего индийского программиста:
— Что это?
— Это оператор BEGIN, означающий начало программы, — ответил начинающий программист.
— Хорошо, — сказал программист А. и стер слово BEGIN. — А что это теперь?
— Теперь там ничего нет, — ответил начинающий программист.
— Неверно, — сказал А. — Начало программы по-прежнему там. BEGIN — всего лишь слово на одном из языков программирования, оно и близко не может передать истинного значения “начала программы”. То, что ты хочешь написать, уже существует. Ты не должен писать ни строчки кода, пока не осознаешь эту истину. Понял?
— Понял, — ответил начинающий программист.
— Ничего он не понял, — ворчал программист А. вечером, пытаясь разобраться в 2000 строк кода, которые успел в первый же день работы наваять начинающий индийский программист.
0111000
Программиста А. спросили: What's the difference between love and sex?
— Love takes two, — ответил программист А.
0111001
Программист А. проснулся как-то осенью и огляделся. Он сидел на рабочем месте перед своим монитором с открытым на нем пустым окном редактора. Часы показывали 11:11 am, индийские программисты вокруг с энтузиазмом печатали новый код, QA захлебывался в нескончаемом потоке багов, менеджеры с озабоченными лицами расходились с очередного митинга. Deadline приближался, но проект был выполнен лишь наполовину.
В следующий раз программист А. проснулся в декабре. Он по-прежнему сидел на рабочем месте перед пустым окном редактора, часы по-прежнему показывали 11:11 am, индийские программисты все так же печатали новый код, QA захлебывался в нескончаемом потоке багов, а менеджеры с озабоченными лицами расходились с очередного митинга. Deadline приближался, но проект был выполнен лишь на четверть.
В следующий раз программист А. проснулся в марте. Часы показывали 11:11 pm, deadline был через неделю, и А. уже несколько дней сидел в офисе, практически не вылезая, пытаясь хоть как-то связать вместе куски кода.
— Что за хренотень! — ругался про себя А, в сотый раз добавляя явную инициализацию для переменной, которую начинающий индийский программист использовал в условном операторе. — Сон какой-то у меня стал прерывистый! К врачу, что ли, сходить…
0111010
Однажды утром программист А. наткнулся на работе у кофеварки на двух индийских коллег, которые о чем-то горячо спорили.
— О, вот ты рассуди нас, — сказал один из них. — Мы поспорили, когда лучше продавать акции, а когда лучше покупать.
— А? — сказал программист А.
— Я считаю, что акции нужно покупать, когда они падают, и продавать, когда растут. Когда акции падают, их можно купить дешевле, поэтому их нужно покупать. Когда акции растут, невозможно предсказать, когда рост остановится, поэтому их нужно продавать, пока они не упали.
— Я считаю, что акции нужно покупать, когда они растут, и продавать, когда они падают, — сказал второй индийский программист. — Когда акции растут, цена их увеличивается, поэтому их нужно покупать. Когда акции падают, невозможно предсказать, когда падение остановится, поэтому их нужно сразу же продавать. Кто из нас прав?
Программист А. подумал, но рассудить их не смог.
— Ну и какой же ты после этого программист! — пристыдили его индийские коллеги, и отвернувшись, продолжали свой спор.
0111011
Выпив как-то пива, программист А. пошел прогуляться ночью в парк. Свернув на одну из боковых дорожек, он неожиданно увидел человека, сидящего на скамейке у озера, в кругу лунного света. Человек был одет в длинное темное пальто, а на голове у него было что-то вроде военной фуражки. Приглядевшись получше, программист А. разглядел, что это женщина, и даже узнал ее по виденным в интернете фотографиям. Это была адмирал Грейс Хоппер, автор языка КОБОЛ и первого в мире компилятора. Кроме этого Грейс Хоппер нашла первый в истории компьютерный баг, оказавшийся молью, застрявшей в соленоидах гигантского калькулятора. Сейчас от нее исходило странное свечение, и она смотрела на программиста А., широко улыбаясь.
— Присаживайся, — сказала Грейс Хоппер. — Я тебя жду.
Программист А. присел на край скамейки.
— Как дела на работе? — спросила Грейс.
— Баги замучили, — пожаловался программист А. — Не видно им конца. Больше ни на что времени не остается.
— Хорошо, — сказала женщина-адмирал. — Я вижу ты понял первую истину — дуккху. Жизнь программиста — это непрерывная череда багов, страданий по их нахождению и суеты по их исправлению.
— Да уж, — сказал программист А. — Как может быть иначе, если каждый пишет код, как его левая нога захочет, и никто ничего не тестирует!
— Я вижу, что ты понял и вторую истину, самудаю, — сказала женщина. — Для непрерывной череды багов есть причина.
— И что дальше? — скептически спросил программист А.
— Дальше ты должен понять, что все это можно изменить.
— Как? — удивился программист А.
— Этого я тебе пока сказать не могу, — сказала Грейс. — Но уверяю тебя, даже просто понимание того, что это можно изменить, наполнит тебя неизбывной радостью и блаженством.
— Поэтому ты все время и улыбаешься? — спросил программист А.
— Что? — переспросила Грейс.
— Все время улыбаешься — от понимания? — уточнил А.
— А, это, — сказала Грейс. — Нет. Улыбаюсь я, потому что мне классный анекдот вчера рассказали. Приходит, значит, мужик в публичный дом, и…
Они посидели еще какое-то время, рассказывая друг другу анекдоты, потом Грейс Хоппер исчезла, растаяв в воздухе, а программист А. долго оставался на скамейке, глядя на блики лунного света в озере и вспоминая анекдоты, рассказанные Грейс. С лица его не сходила блаженная улыбка.
0111100
К программисту А. приставили в помощники начинающего молодого программиста для работы над проектом.
— Ну, и чего ты знаешь? — спросил программист А.
— Все знаю, — ответил помощник. — Знаю языки программирования — Java, C++, Delphi, NET. Базы данных знаю — Oracle, SQL Server, DB2, работал и с MySQL, и с PostgreSQL. Знаю Perl, PHP, и Python. Не попаду впросак и с Web-технологиями: ASP, JSP, SOAP, AJAX и Web-сервисы мне хорошо известны. Разбираюсь в вычислительных методах и теории алгоритмов, легко отличу машину Тьюринга от машины Поста. Знаю OOP, AOP, UML и модели программирования, extreme programming и TDD, да много чего еще. Какое дадите мне первое задание?
— Читай документацию, — сухо сказал А.
Через две недели программист А. вновь спросил начинающего программиста:
— Так чего же ты знаешь?
— Кое-чего знаю, — ответил тот. — Знаю, что есть языки программирования, и что есть у них общее и различия. Знаю про базы данных, работал с несколькими. Есть многочисленные языки и технологии в Web-программировании, знаю некоторые из них. В общих чертах с архитектурой программных приложений, вроде бы, знаком. Ну и еще теорию кое-какую припоминаю. Не дадите ли мне теперь задание?
— Читай пока документацию, — уже мягче сказал программист А.
Еще через две недели они снова встретились, и А спросил:
— Что ты теперь знаешь?
— Кажется, будто уже ничего не знаю, — ответил начинающий программист. — Все языки перемешались, не помню, в котором нужно писать try, в котором when, только знаю, что результат будет один и тот же. Базы данных для меня все на одно лицо, понимаю, как работают, а что с ними делать — не знаю. В интернете — куча технологий, протоколов один поверх другого, а делают все одно и то же, c одинаковым результатом. Теорий разных много, а говорят все одно. Все их знают, никто им не следует, а когда пытаются следовать, получается только хуже.
— Вот теперь ты готов к первому заданию! — обрадовался программист А.
— Ну тебя в ж…, сам делай свое задание, — сказал начинающий программист и, хлопнув дверью, ушел.
— Какая хорошая нынче молодежь пошла, — думал программист А., глядя ему вслед и смахивая навернувшуюся слезу. — Способные, не то, что мы! Все на лету схватывают. Молодцы!
И он, открыв бутылку Sam Adams, уселся за компьютер.
0111101
Программист А. сидел в ирландском пабе Hennessy 's в Бостоне. В окно был виден оживленный бульвар через дорогу, и за ним — ступени площади Говермент-центра. Мимо окна то и дело проходили веселые компании, в руках многие держали большие пластиковые стаканы с пивом. Незнакомая девушка помахала ему сквозь стекло. На столе перед программистом А. стояла полуторапинтовая кружка Гиннесса. Напротив А. сидел Святой Патрик, в накидном плаще, с длинным посохом в руках, и рассказывал свою историю.
— Ну и вот, выкрали меня, увезли в Ирландию и продали там в рабство, — говорил Патрик. — Хозяин сделал меня пастухом, и шесть лет я пас овец у подножий местных гор практически в одиночестве. Потом я услышал голос, который приказал мне убежать и вернуться домой. Я убежал, попал на корабль, плывущий в Англию, но на пол-пути был опять захвачен разбойниками, продан в рабство, а через два месяца снова убежал и семь лет скитался по Европе. Потом осел в одном из монастырей и начал учиться богословию.
Программист А. поднял было кружку, но Патрик жестом его остановил. Программист А., вздохнув, поставил кружку обратно на стол.
— Ну короче, — продолжал Патрик. — В конце концов монастырь послал меня в Ирландию для обращения ее в христианство. Чтобы привлечь внимание короля, я разжег огромный костер в ознаменование начала весны, что никто не имел права делать раньше короля. Был большой шум, но король неожиданно отнесся ко мне с пониманием, пригласил во дворец и вообще разрешил делать все, что я хочу.
За окном напротив паба кто-то упорно пытался запарковаться между двумя близко стоящими машинами. Ничего не получалось, бедолага немного отъезжал, и начинал все сначала. Несколько человек со стаканами в руках остановились и громко помогали советами.
— Такова моя история, — закончил Святой Патрик.
Они помолчали.
— Так подожди, — вдруг спросил программист А. — А пиво-то здесь причем?
— А я откуда знаю! — воскликнул Патрик. — Это вас надо спросить. Я вообще не пью, и пиво ненавижу. У меня, можно сказать, аллергия. Очень мне нелегко было с этими ирландцами работать. Поэтому, собственно, меня Святым и назвали…
— Так вот оно что… — сказал программист А. и неуверенно посмотрел на полную кружку Гиннесса в руке.
— Да ты пей, пей. Чего уж там, праздник все-таки! — сказал Святой Патрик, встал, махнул на прощание рукой, вышел на улицу прямо через стекло и растворился в толпе.
— Happy St. Patrick Day! — крикнули программисту А. из-за соседнего столика. Разгоралось веселье.
0111110
Как-то программист А. сидел за стойкой в баре, и знакомый бармен, желая над ним подшутить, поставил перед ним два бокала — пустой и полный — и спросил:
— Что лучше — пустой бокал пива или полный?
— Посмотрим, — сказал программист А. — Полный бокал пива подобен обещанию — играет и искрится, сулит хорошее, но не всегда выполняется, а если выполняется, результат может быть совсем не тем, что хотелось бы. Пустой бокал пива подобен сердцу мудреца — ничего в нем нет; нет желаний — нет и разочарования, нет побуждений — нет и ошибок, нет ожиданий — нет и обмана. Конечно, пустой бокал пива гораздо лучше.
И он потянулся рукой к полному бокалу.
— Ага! — воскликнул бармен, радуясь, что шутка удалась. — Почему же ты берешь полный бокал, а не пустой, ведь пустой лучше?
— Я говорил о пустом бокале пива, — ответил программист А. — А это просто пустой бокал. Не выпив пива, не увидишь разницы.
Бармен удивился.
0111111
— Решил купить себе мерседес, — рассказывал как-то за пивом приятель программисту А. — Пошел в салон, все как обычно, поторговался с дилером по имени Джим, обо всем договорились, только точно такой машины, как я хочу — CLK350 кабриолет цвета “иридиум силвер” — у них, естественно, не оказалось. Заказали машину из Германии, стал ждать. Через месяц звонит счастливый Джим и сообщает, что машина пришла, можно забирать. Приезжаю в салон, сияющий Джим выводит меня на парковку, показывает машину, и что ты думаешь?
— Что? — спросил А.
— Это не кабриолет, а роадстер, и цвета не “иридиум силвер”, а “капри блу”! Представляешь?!
— Да ты что?! — воскликнул программист А. — Не могу поверить!!
— Представляешь?! — возмущался приятель.
— Дай мне телефон этого Джима, — сказал А.
— Зачем? — не понял приятель.
— Следующую машину я буду покупать только у него, — сказал А.
— A? — переспросил приятель.
— Я даже уже и не надеялся, что есть такие дилеры, — сказал программист А. — Посуди сам, ему безразличны внешние признаки, и он не обращает внимания на незначительные детали, они не отвлекают его внутренний взгляд. Сквозь обманчивую мишуру цветов и моделей, он смотрит в суть и стремится к главному — продать хорошую машину по хорошей цене. Я уверен, что если бы ты сел в этот роадстер и проехался, ты бы уже с ним не расстался. Я тебе говорю, этот Джим — истинный мудрец!
— Да? — удивился приятель. — А я-то, дурак, решил, что он просто раздолбай.
1000000
Как-то к программисту А. подошел индийский программист и сказал:
— Я, вроде, уже не первый год занимаюсь программированием, работаю в большой компании, пишу качественный код, оптимизирую, применяю эффективные алгоритмы, тестирую то, что написал. Коллеги со мной считаются, начальство мною довольно. И все-таки — что-то не то… Не подскажешь, что я делаю не так? Может, научишь?
— А чего не научить, — ответил программист А.
Через какое-то время индийский программист вернулся в свой отдел. Работать начал лучше и эффективнее прежнего. Проектируя, был умен, как архитектор. Тестируя, становился наивен, как QA. Никто не мог найти в его коде баг, кроме него самого. Помогал менеджерам, подсказывал отделу маркетинга, разговаривал с клиентами. Вскоре получил повышение, потом стал начальником отдела.
Когда услышал об этом программист А., он очень расстроился.
— Ну надо же! — причитал он, разводя руками. — Учил я его, учил, а он так ничего и не понял! Все ведь сделал наоборот!
1000001
Программиста А. cпросили как-то за пивом:
— Ну, как оно все на самом деле?
— Знавал я одного умного человека, — ответил программист А. — Лучше его не было среди нас. Любая задача была ему по плечу. С алгоритмами обходился так, словно все четыре тома Кнута издательства Эдисон-Уэсли были отпечатаны в его памяти. Смотрел на предмет, видел свойства и методы, наследственность и полиморфизм. Объектные модели строил, словно слова складывал в стихи. Написать компилятор самокомпилирующегося языка и за работу не считал. И вот однажды решил он разобраться в том, как работает Windows XP. Две недели от компьютера не отходил, изучал код, наконец понял. После этого три дня ни слова не говорил, не спал и не ел. На четвертый день уволился с работы, и больше никогда к компьютеру не подходил. Слыхал я, работает с тех пор продавцом в супермаркете где-то в Неваде. Вот я и говорю, если умный человек, поняв такую малость как Windows XP, все забросил и исчез, то что будет со мной, глупцом, если я пойму все? Нет уж, лучше я об этом и думать не буду, как бы случайно чего не понять!
1000010
Как-то в баре, за кружкой Fisherman's Brew, приятель жаловался программисту А.:
— Что-то со мной происходит не то! Ничто мне не интересно, ничего не хочется делать. Кажется, что все уже делал, везде уже был, все уже знаю, хотя и понимаю, что это не так. Включаю телевизор — по всем каналам какая-то ерунда. Берусь за книгу — ничего такого, чего бы раньше не читал. С утра ни на что не надеюсь, вечером ничего не жду. Все вокруг суетятся, повторяя одни и те же действия, а мне ничего этого не нужно. Может быть, это психическая болезнь?
— Ты случайно головой не стукался в последнее время? — спросил программист А.
— Ты знаешь, действительно стукнулся не так давно о полку, три дня шишка не проходила, — ответил приятель.
— Ну вот тебе и ответ! — воскликнул программист А. — Поэтому ты и считаешь мудрость психической болезнью!
1000011
— Отчего все так хреново? — пожаловался как-то программист А. знакомой индийской девушке.
— Это у тебя конфликт души и сущности, — сказала девушка.
— Как это? — удивился А.
Тогда она рассказала ему, что душа и сущность — две части человека. Душа — это ‘живое’, душа есть у всего живого. У человека, кроме души, есть еще сущность, которая отличает человека от животных. Сущность у каждого человека своя, и у всех людей она разная. Душа тоже у каждого человека своя, но у всех людей она одинаковая, потому что это просто ‘живое’. Некоторые душу называют сознанием, а сущность — самосознанием. Сущность знает о душе, но душа ничего не знает о сущности, отсюда проистекают многие проблемы, потому что сущность может желать, но не может делать, а душа может делать, но ничего не желает.
— Еще у человека есть имя, — продолжала девушка. — Имя принадлежит сущности и выражает сущность, поэтому имя у каждого свое. Даже если два имени пишутся одинаково, это разные имена. Еще у человека есть тень, и тень противоположна имени, также, как душа противоположна сущности. Тень у всех одна и та же. Имя — это то, что предшествует человеку, а тень — это то, что следует за ним. Понял?
— Ну, понял, — сказал программист А. — Одно не ясно — отчего все хреново-то?
— Ну, представь, что ты — автомобиль, который ведут безрукий и безногий, — терпеливо объясняла девушка. — Безрукий нажимает на педали, а безногий управляет рулем. Пока они в согласии, они вполне могут добраться туда, куда хотят. Но если одному хочется, к примеру, в бар, а другому в музей — автомобиль останется на месте.
— Хм…, - сказал программист А. — И что же делать?
— Кто-то из них должен уступить, — ответила девушка.
— А ведь действительно! — подумал программист А. — Как все просто. Музей может и подождать.
1000100
— Ты кто? — с удивлением спросил программист А. человека, сидящего напротив него за столом. У этого человека были непропорционально большие глаза, как у Инуяши, в руке он держал дымящуюся сигарету, а на столе между ними стояла литровая бутылка Финляндии с черно-красным символом инь и янь вместо обычного красного диска.
— Я — бодхисаттва, — ответил человек.
— Интересное имя, — сказал программист А.
— Это не имя, это — работа, — сказал человек.
— Да? — удивился программист А. — И в чем же эта работа заключается?
— Помогаю тебе проснуться, — сказал человек.
— Ты хочешь сказать, что я сплю, и ты мне снишься? — спросил А.
— Это верно, но это только половина истины, — сказал человек. — Вторая половина истины в том, что я тоже сплю, и ты мне тоже снишься.
— Если ты тоже спишь, как ты можешь меня разбудить? — спросил программист А.
— Ну, я-то могу проснуться в любой момент, стоит только захотеть, — сказал человек. — Я специально не просыпаюсь, чтобы помогать другим. Вот тебе, например, помогаю…
— А-а, значит, это ты мне так сейчас помогаешь? — ехидно спросил А.
— Точно, — подтвердил бодхисаттва.
— А по-моему, ты со мной водку пьешь, — сказал А.
— Это только так кажется — оживился человек. — Видишь ли, мы так и работаем. Человек наиболее восприимчив к истине в привычном для него окружении, за своими обычными занятиями. А чем только люди не занимаются, я тебе скажу… Короче, приходится и пить, и курить, и… ну сам знаешь… все дела.
— Все дела? — переспросил А.
— Все сто восемь! — гордо подтвердил бодхисаттва.
— То есть твоя работа в том, чтобы заниматься с людьми, пить водку, курить, все дела? — спросил программист А.
— Ага, — сказал бодхисаттва.
— Знаешь, — подумав, сказал А. — Я тоже хочу быть бодхисаттвой, как ты. Когда поумнею…
— Ну вот видишь, моя методика уже работает! — обрадовался бодхисаттва. — Давай, что ли, накатим!
Они разлили, чокнулись и выпили. Программист А. опять отключился.
1000101
— Почему здесь время течет как-то странно, и его ни на что не хватает? — спросил программист А. своего приятеля за кружкой пива.
В ответ приятель рассказал ему старую индейскую легенду:
— Время — это огромное мягкое одеяло, сотворенное Великим Создателем Вещей Китчесманитуа. Оно было сплетено из волокон меха самых разных зверей с искусством и любовью, чтобы сделать жизнь людей под этим одеялом приятнее. На протяжении многих зим Китчесманитуа оберегал время от малейших повреждений. Но когда он увидел все то зло и несправедливость, которые принесли на эту землю белые завоеватели, сердце его наполнилось печалью и гневом, и он схватил одеяло и постирал его в воде горячего источника Магаехнак. И одеяло времени село.
— И что? — удивился А.
— Ну, во-первых, времени стало мало и его ни на что не хватает, — объяснил приятель. — А во-вторых, у тебя когда-нибудь было, чтобы твои любимые льняные брюки после стирки сели? Очень ведь обидно!
— Да, это действительно обидно, — согласился А.
1000110
Как-то программист А. прочитал, что Будда разделял все вопросы на четыре категории: 1) Вопросы, на которые нужно отвечать "да" или "нет"; 2) вопросы, на которые нужно отвечать аналитически; 3) вопросы, на которые нужно отвечать встречным вопросом; и 4) вопросы, на которые нужно отвечать молчанием, то есть, просто игнорировать.
Последняя категория вопросов показалась ему самой интересной. К ней относились такие вопросы, на которые, как ни ответь — лучше от этого никому не будет, а может быть только хуже, поэтому и отвечать на такие вопросы бессмысленно, и даже вредно — самым мудрым будет промолчать.
Когда подошло время очередного self-review, программист А. мудро ответил на все вопросы анкеты молчанием. По результатам полугодия его опять не повысили.
— Вот ведь бл$@#&во! — ругался программист А. — Все-таки слабовато у нас пока с буддистским мировозрением в рядах среднего менеджерского состава.
1000111
Программист А. сидел в баре Pizzeria Uno с кружечкой Uno Amber Ale и наблюдал за группой из трех человек справа от себя. Было очевидно, что это работники одной из маленьких программистских компаний, отмечающие прием нового сотрудника — скромной индийской девушки. Молодой человек в очках с видом школьного отличника рассказывал о web-приложениях и сервисах, java-платформе, сервис-ориентированной архитектуре, среднем слое и обо все остальном, слышанном уже тысячи раз. Старший, вероятно CEO, немного потрепанный, говорил что-то о рабочей атмосфере и коллективе. Перед обоими стояло по почти пустой кружке пива. Скромная девушка пила воду, внимательно слушала и понимающе кивала, к удовольствию CEO.
— Вот, на моих глазах начинается еще одна карьера в IT, — торжественно подумал программист А.
Он окунулся в воспоминания, как в теплый океан на восточном берегу Флориды. Ведь когда-то и он был начинающим программистом, получил свою первую работу, и начались незабываемые дни — энтузиазм, детское отсутствие опыта, жажда новых знаний, обещания и надежды, новое рабочее место, свежие впечатления, разговоры с коллегами в курилке, веселые митинги с сидящими на полу людьми, бонусы, премии, интересные проекты, нетривиальные задачи, растущие акции, конференции в Сан-Франциско, новые клиенты, увольнения, больше работы меньшими силами, исправление багов, недостаток времени, поздние вечера в офисе, падающие акции, склочные клиенты, ленивая служба поддержки, еженедельные тупые отчеты, невыполнимые сроки, бестолковые менеджеры, занудные коллеги, пустые формальности, неработающий код, бесконечные баги, и ничего, ничего нового!
Программист А. залпом допил свое пиво и ушел, стараясь не смотреть направо.
1001000
Как-то в баре, за кружкой Fisherman's Brew, приятель жаловался программисту А.:
— Что-то со мной происходит не то! Ничего мне не интересно, ничего не хочется делать. Кажется, что все уже делал, везде уже был, все уже знаю, хотя и понимаю, что это не так. Включаю телевизор — по всем каналам какая-то ерунда. Берусь за книгу — ничего такого, чего бы раньше не читал. С утра ни на что не надеюсь, вечером ничего не жду. Все вокруг суетятся, повторяя одни и те же действия, а мне ничего этого не нужно. Может быть, это психическая болезнь?
— Ты случайно головой не стукался в последнее время? — спросил программист А.
— Ты знаешь, действительно стукнулся не так давно о полку, три дня шишка не проходила, — ответил приятель.
— Ну вот тебе и ответ! — воскликнул программист А. — Поэтому ты и считаешь мудрость психической болезнью!
1001001
Слабый огонек костра тускло освещал сидевших вокруг него людей. Иногда резкий порыв холодного ветра почти полностью задувал пламя, и тогда становилось совсем темно, так что неясные пятна палаток на кромке леса растворялись в пугающей черноте. Рассказчик, освещая свое лицо снизу фонарем, как бы для нагнетания атмосферы, продолжал свою историю:
— И когда он вошел в эту комнату, экран компьютера автоматически загорелся, и на нем зловеще открылось окно SQL*PLus. Тогда он набрал SELECT * FROM customer_orders@ORDINST и нажал Enter. И, к его ужасу, запрос вернул 10 записей…
— И что? — напряженно спросил программист А.
— Но в базе данных не было линка с именем ORDINST! — резко закончил рассказчик.
— Аa! — вырвалось у кого-то от страха и неожиданности.
Пламя окончательно погасло, превратившись в тлеющие угольки. Некоторое время все так и сидели с открытыми ртами и испуганными лицами.
1001010
Выписывая очередной чек за услуги, программист А. написал в графе 'Сумма прописью':
SELECT
TO_CHAR(TO_DATE(TRUNC(68.18),'J'),'JSP')
||' DOLLARS AND
'||TO_CHAR(MOD(68.18,1)*100)||' CENTS'
FROM DUAL;
Банк вернул ему чек и оштрафовал на $20.
— Вот ведь бл$@#&во! — ругался программист А. — У них там что в банке, SQL Server, что ли?!
1001011
Программиста А. спросили:
— Как отличить обычного программиста от настоящего программиста?
— Легко, — ответил А. — Обычный программист тщательно изучает задачу. Пишет четкий и понятный технический дизайн. Советуется с архитекторами. Заранее продумывает, как он будет тестировать код. Тщательно комментирует. Следит за правильной инициализацией переменных. Никогда не забывает про производительность и масштабируемость. Укладывается в отведенные для проекта сроки.
— Разве настоящий программист не должен делать все то же самое? — удивились собеседники.
— Он бы рад! — ответил программист А. — Если бы его еще хоть раз назначили на проект, где для всего этого есть время!
1001100
Программист А. сидел на рабочем месте и мрачно смотрел в окно. Через дорогу, в белесом сгущающемся тумане, он видел строения мола и парковку, забитую машинами. Издалека многочисленные выпуклые крыши машин напоминали чешуйки змеиной кожи, распластанной по земле. У этой змеи был также и длинный извивающийся хвост из машин, пытающихся въехать на парковку с прилегающей улицы. Начинался день больших распродаж после рождества.
Программист А. пытался понять всех этих людей, и не мог. Насколько духовные ценности должны быть смещены в сторону материальных благ, чтобы на следующий день после праздника хотелось рано вставать, садиться в машину, ехать в мол, и толкаться там в толпе в поисках мистических скидок? И это вместо того, чтобы, перебрав накануне, сидеть на работе, мучаясь с похмелья от головной боли и тошноты, и пытаться вспомнить, где был вчера??? Куда катится мир?
1001101
Программист А. засиделся допоздна на работе. Когда он наконец вышел из здания, было темно и относительно тепло. В середине пустой парковки, в желтом расплывчатом круге света, одиноко сутулилась его машина. Очевидно, недавно прошел дождь, и на асфальте была большая лужа — это напомнило ему весну. Трава по краям парковки выглядела свежей и зеленой, и это напомнило ему лето. В одном из углов парковки лежала большая куча опавшей листвы грязно-коричневого цвета, что в свою очередь напомнило ему осень. В целом, картина напоминала что угодно, только не зиму. Программисту А. хотелось чего угодно, только не пива. Он сел в машину и поехал в ближайший бар. Все-таки, это была зима…
1001110
— Как ты пишешь программы? — спросили программиста А.
— Очень просто, — ответил он. — Беру ящик пива, сажусь за компьютер. Ящик — это класс, каждая бутылка — это метод, этикетка — это комментарий, пробка — это открывающая скобка, дно — закрывающая, пустая бутылка — это return…
— А головная боль наутро? — удивились собеседники.
— Релиз, — объяснил А.
1001111
Программист А. допил остаток пива в своем бокале и знаком заказал еще. Счет он потерял, голова болела и без пива.
— Проблемы? — поинтересовался бармен, бросая перед ним картонный кружочек с рекламой Короны и ставя на него полный бокал Sam Adams Octoberfest.
— А, работа! — буркнул А.
— Чем занимаешься? — спросил бармен.
— Программист я, компиляторы пишу, — вяло ответил А. и сделал большой глоток пива.
— Серьезно? — оживился бармен. — Ну и что используешь для выделения регистров? Окрашенные графы?
— Да, — ответил программист А. после некоторого замешательства и посмотрел на бармена. Бармен вопросительно смотрел на него, ожидая пояснений.
— С ними и проблема… — нерешительно продолжил А. — Алгоритм подразумевает равнозначные и независимые регистры…
— Регистры на классы разбивал? — перебил бармен.
— Разбивал, — ответил А. — Мне нужны пересекающиеся классы для оптимизации, но тогда приходится параллельно поддерживать неопределенное число хэш-отображений…
— Это потому, что ты внутри класса накладываешь условие независимости, — сказал бармен. — Регистры внутри класса должны быть равнозначными, но не независимыми. Эти зависимости и храни в хэше. Тогда число хэш-отображений просто равно числу классов…
Кто-то позвал бармена, и он, кивнув программисту А., отошел. Программист А. какое-то время смотрел в стакан, и ему становилось ясно, что по крайней мере ближайшая его проблема решена. Приободрившись, он оставил на стойке деньги и направился к выходу. Уже у двери до него донеслись слова бармена, обращенные к кому-то за стойкой:
— …ты не учитываешь, что при образовании ложного актанта часто возникает лексический супплетивизм…
— Ах, вот оно что!.. — радостно воскликнул собеседник.
— Вот ведь бл$@#&во! — сказал А. и вышел из бара. Он всегда хотел быть барменом.
1010000
Программиста А. замучила ностальгия. Стоило закрыть глаза, и из глубин сознания, словно на фотографической бумаге, опущенной в ванночку с раствором проявителя, проступали бескрайние поля, покрытые золотым ячменным колосом, глубокое голубое небо, добрый мужик Афанасий, идущий за трактором, старый мельник, везущий в город на подводе кучку запыленных серых мешков с мукою. Потом сознание переносило его в сам город, на холодные берега Балтики неподалеку от Адмиралтейства, где забавный толстяк кормил голубей, сидя на золотой бочке. Или перед его мысленным взором возникали образы родных московских улиц, окна старинного особняка в Хамовниках, замысловатые новостройки в Очаково, безумные огни и толчея Тверской, где на одни жигули приходится десять мерседесов. Словно в бредовой презентации Microsoft PowerPoint, сменяли друг друга картины арсенала на набережной в Ярославле, незнакомой церквушки в Клину, трех медведей на дереве посреди сибирской тайги. А иногда почему-то и вообще проявлялось видение загадочной украинской местности под названием Оболонь, хотя там программисту А. побывать пока не пришлось.
— Вот ведь бл$@#&во… — говорил программист А. в таких случаях и допивал очередную бутылку SamAdams.
1010001
— Ерунда все эти ваши органические продукты, — зло ворчал себе под нос программист А., морщась от головной боли и стараясь лишний раз не двигаться телом, чтобы не усугублять мучительный беспорядок в желудке. Он сидел на работе, и пытался набирать PL/SQL-код, но в глазах двоилось, и поэтому вместо SELECT…AS каждый раз упорно печаталось SELECT…ASS.
— Только одно название, что органические, а все одно — та же химия. Общество потребления, чтоб им пусто было. Whole Foods, Trader Joe's, Planet Organics Fresh Market my ass… Все, все — с одной и той же грядки! На чем надо было выращивать арбуз, чтобы им можно было так отравиться! Хорошо еще, хоть арбуз был маленький…
Он уронил голову на клавиатуру и попал на клавишу DEL. Так как рукой он при этом держал CTRL-ALT, компьютер перезагрузился. Программист А. не обратил на это внимания.
— …а бутылка большая, — продолжал размышлять он. — Если бы водкой не запивал, вообще бы окочурился. Вот ведь бл$@#&во!
1010010
Программист А. оторвал уставший взгляд от монитора, потер кулаком покрасневшие глаза и встал. На кухне он обмотал бутылку пива, которую держал в руках, салфеткой, вышел на крыльцо и сел на верхнюю ступеньку. Мыслей в голове уже не было, вернее, они были, но словно неподвижно валялись в углу, как скомканные бумажные листы с бесполезным кодом. Алгоритм не выстраивался.
Солнце садилось прямо за дом напротив, заливая улицу розовым светом. Сосед справа возился с граблями во дворе. Он приветливо помахал А. рукой, А. кивнул в ответ.
— Сейчас приедет машина из Domino, — подумал почему-то А., и машина действительно появилась и остановилась у дома слева. Сосед слева всегда заказывал пиццу в это время в воскресенье. В общем, все было как обычно. Все было одно и то же изо дня в день. Все повторялось и повторялось, как код, вошедший в бесконечный цикл. В этом было что-то необычное, какая-то идея, которую усталый мозг не хотел схватывать. Программист А. сидел на крыльце и смотрел, как диск солнца скрывается за черным краем крыши.
— Вот уж действительно, — подумал он. — Восходит солнце, и заходит солнце…
— …и спешит к месту своему, где оно восходит… — послышался тихий голос непонятно откуда.
Программист А. оглянулся. Поблизости никого не было.
— Надо меньше работать, — проворчал А. и отхлебнул пива из бутылки.
Все повторялось и повторялось, изо дня в день. Различия присутствовали, но были несущественны, существенным было повторение. Это выглядело примерно как вызывать одну и ту же функцию с разными параметрами — значения локальных переменных внутри функции могут изменяться в зависимости от значений параметров, но код функции — код, который исполняется — он всегда один и тот же. Но кто вызывает эту функцию?
Темнело. Мягкий ветерок прокатился по траве.
— Идет ветер к югу, и переходит к северу, кружится, кружится на ходу своем… — подумал опять программист А., и на мгновение ему показалось, что ветер подхватил скомканные листы мыслей в его голове и сложил из них в воздухе некое подобие идеи.
— … и возвращается ветер на круги своя… — с готовностью откликнулся тот же самый голос.
— Возвращается, говоришь?.. — программиста А. внезапно осенило и алгоритм решения задачи, над которым он ломал голову все выходные, вдруг выстроился в его голове до последнего квадрата блок-схемы.
— …что было, то и будет; и что делалось, то и будет делаться… — монотонно продолжал внутренний голос, но А. его уже не слушал.
Он все понял. Функция вызывала саму себя! Поэтому все и повторялось. Поэтому и не было ничего нового под солнцем. Он бросился в дом, к компьютеру, и, сделав огромный глоток пива, принялся с пулеметной скоростью стучать по клавишам.
— Ну конечно! — приговаривал он. — Рекурсия! Суета сует! Блоковая структура с лексическим именованием — и рекурсия, рекурсия! Вот ведь бл$@#&во!
1010011
— Вот здесь я аккуратно проверяю входной параметр на соответствие типу данных, и выдаю сообщение об ошибке, если необходимо, — с энтузиазмом рассказывал молодой индийский программист, указывая на соответствующие строки кода на экране монитора.
Программист А., расположившийся рядом в кресле, кивнул.
— Далее, и это очень интересно, обратите внимание, я использую алгоритм быстрой сортировки по имени, чтобы избежать упорядочивания во время запроса к базе данных! Неплохая идея, а?
Программист А. кивнул. Ободренный начинающий программист возбужденно продолжал:
— Затем я использую хэш-таблицу для учета регистров, что позволяет мне быстро и эффективно считывать информацию.
Программист А. кивнул.
— Здесь я не уверен, однако, что ключ оптимален, — говорил индийский программист. — Так как разные узлы могут иметь одинаковый тип данных, добавление его к ключу может снизить количество обращений к базе. Что бы Вы посоветовали?
Программист А. кивнул. Молодой индийский программист некоторое время помолчал и тихо вышел из комнаты. Программист А. кивнул еще раз. Ему снился остров Кауаи и он сам, скользящий на серфинговой доске по теплой зеленой волне.
1010100
Программист А. сидел в Starbucks с компьютером и большим стаканом caffè latte. Звучала тихая музыка, уютно светился изнутри большой серый камин, непринужденно болтали за стойкой официанты в черных-зеленых фартуках, скрашивая друг для друга безлюдный вечерний час. Программист А. ничего этого не замечал. Ссутулившись над столом, он не первый час безуспешно пытался найти нужный алгоритм, и ему уже начинало казаться, что это невозможно.
Отчаявшись, А. поднял голову от экрана и огляделся. Словно впервые, он с удивлением заметил странные картины на стене, причудливые лампы под потолком, диски Эллы Фитцджералд и The Police у кассового аппарата. Внезапно его осенило.
— Подождите! — воскликнул он. — Но ведь это же все совершенно неправильно! Это делается совсем не так!
Он вскочил, быстро собрал вещи и выбежал на улицу. Перейдя через дорогу, он вошел в О'Клири и сел за стойку. Здесь громко играла музыка, по телевизору показывали бейсбол, Red Sox выигрывали у канадцев. А. кивнул соседу за стойкой, сосед весело показал ему шаку. Бармен деловито поставил перед ним кружку Сибирской Короны и сгреб пятерку и доллар.
— Вот теперь все как надо, — удовлетворенно сказал А. и, снова ссутулившись над экраном, продолжил свой безнадежный труд.
1010101
Программист А. сидел в темной комнате у камина, пил виски “Канадский туман” и смотрел в огонь. Неожиданно огонь скукожился и погас.
— Интересно, — подумал программист А. — Куда делся огонь? Только что он был здесь, в этой комнате, и теперь его нет… Ничто не девается в никуда. Значит, огонь ушел…
Вывод показался вполне логичным, и А. отметил это большим глотком виски.
— Однако, если огонь ушел, — продолжал рассуждать он. — То куда он ушел? В каком направлении? На север? На юг?
Этот вопрос был сложнее предыдущего, пришлось выйти на кухню и наполнить бокал новой порцией виски. Когда А. вернулся в комнату, в камине опять горел огонь.
— Хм…, - подумал А., усаживаясь в кресло. — Интересно, это какой-то другой огонь, или это тот же огонь, что был здесь до этого? Может быть, он просто выходил на кухню налить себе виски?
Программист А. сделал большой глоток. В окна второй день, не переставая, стучал холодный декабрьский дождь. Больше ничего не происходило.
1010110
— Вы, программисты старшего поколения, совершенно отстали от жизни, — говорил молодой программист пристыженно молчащему программисту А. — Вы не понимаете, что времена изменились, приходят новые технологии, вы же пытаетесь их игнорировать, засовывая головы в песок, как страусы, отказываетесь признать свою углубляющуюся некомпетентность и продолжаете применять отжившие себя методы, стараясь уместить задачи новой эпохи в прокрустово ложе своих навыков, сформированных в прошлом веке. Посмотрите вокруг. Как долго еще вы сможете использовать старые инструменты там, где всё с надеждой взывает к перемене? Да, это правда — в прошлом веке без этих инструментов не встала бы ни одна операционная система, не начал бы печатать ни один сетевой принтер, не заработал бы ни один драйвер устройства… Но теперь время перемен! Ваши инструменты больше не помогают, вы должны это признать.
Программисту А. нечего было возразить — он действительно уже два дня безуспешно пытался заставить базу данных Oracle работать в системе Linux той же компании Oracle. Пиво действительно больше не помогало.
— А может быть, молодняк прав? — подумал программист А. — Может быть, все так и есть, и наше время ушло? Может быть, нам и вправду пора поучиться у молодых? Вот ведь бл$@#&во…
Программист А. посмотрел на экран монитора с сообщением ‘ORACLE not available’, потом на бутылку пива в руке, и решительно поставил ее под стол, в ящик вместе с другими пустыми бутылками.
— Ладно, убедил, — сказал он. — Давай, что там у тебя…
Молодой программист встрепенулся, подмигнул и достал из кармана целофановый пакетик и две пластмассовые палочки, похожие на сигаретные мундштуки. Через какое-то время работа закипела.
1010111
Программист А. бродил по моллу и увидел в витрине одного из магазинов большой яркий плакат. На нем было написано: "Уникальная программа похудения! Результат уже через две недели!". Под надписью располагалась фотография весьма упитанного мужика в какой-то бесцветной одежде и с недовольным лицом. "До", — гласили буквы под фотографией. Немного ниже находилась другая фотография, на ней весело улыбался тот же мужик, одетый в цветастую гавайскую рубашку. Он был в точности той же толщины, что и на первой фотографии."После!" — возвещала надпись. Это не могло не заинтересовать программиста А., и он вошел в магазин.
В магазине играла музыка, было тепло от ярких ламп, а на стенах висели плакаты, подобные уже виденному. За стойкой призывно улыбался клерк.
— Здравствуйте! — сказал программист А. — Хотелось бы узнать подробнее о вашей программе.
— Конечно! — обрадовался клерк. — Что вас интересует?
— Почему у вас на плакатах люди "после" ничуть не худее людей "до"? — спросил А.
— Отличный вопрос! — с готовностью отозвался клерк. — Видите ли, мы в нашей программе считаем, что люди должны быть счастливы такими, какие они есть.
— То есть, ваша программа похудения заключается в том, чтобы не худеть, правильно я понимаю? — уточнил А.
— Совершенно правильно! — с энтузиазмом подтвердил клерк.
— Ну хорошо, — подумав, сказал А. — Ну а что же надо делать в вашей программе?
— Все очень просто! — начал клерк. — Вы платите вступительный взнос в 20 долларов.
Он замолчал. Программист А. тоже молчал, ожидая продолжения.
— И? — не выдержал он наконец.
— Все. — сказал клерк. — Это оно и есть, больше ничего.
Они опять некоторое время помолчали. Программист А. обдумывал услышанное. Программа похудения, заключающаяся в том, чтобы не худеть посредством того, чтобы ничего для этого не делать. В этом определенно что-то было.
— Вы знаете, — сказал А. — Я никогда не участвую ни в каких подобных программах, считаю их обманом, если вы понимаете, о чем я, но сейчас у меня такое чувство, что ваша программа может быть именно то, что мне нужно.
— Замечательно! — сказал клерк. — Желаете вступить?
— Да, — твердо ответил А.
— 20 долларов, — сказал клерк.
Программист А. достал из кармана мятую двадцатку.
— Теперь вот что, — сказал клерк, нажимая на кнопки кассового аппарата. — В принципе сейчас мы бы с вами должны заполнить анкету с вашими данными, ну знаете, рост там, вес, чтобы, так сказать, можно было проследить ваши успехи в нашей программе. Но…
Он выжидательно посмотрел на А. Программист А. понимающе кивнул.
— Но это, конечно, не обязательно. — с облегчением продолжил клерк. — Ведь главное — это начать, а успех придет.
И они расстались довольные друг другом. Программиста А. долго не покидало приятное чувство гордости от того, что он наконец пересилил себя и вступил на новый здоровый путь.
1011000
Программист А. встретил на улице старого приятеля, и они разговорились.
— Ну что, как оно? — радостно воскликнул программист А.
— Нормально! — ответил приятель. — Можно долго рассказывать. Но чего зря говорить, собственно, почитай мой Facebook, там все написано, у тебя там эккаунт-то есть?
— Не-а, — ответил программист А. — Ну да хрен с ним, а жена-то как?
— Так нормально! — заверил приятель. — Я, кстати, о ней пишу в моем Wifebook — есть у тебя там эккаунт?
— Нет эккаунта… — сказал А. — Впрочем, ну его… Ну а дети-то, дети как?
— Растут! — оживился приятель. — Знаешь такой сервис — Kidsbook? Вот там я все о детях и пишу. Почитай, если есть эккаунт.
— Нет, — признался А. — А что с работой, где ты сейчас?
На Workbook у программиста А. эккаунта тоже не оказалось. Они поговорили еще немного и расстались. Приятель обещал написать об их встрече на Friendsbook.
— Жаль только, что я прочитать не смогу! — сетовал программист А. по дороге домой. — Ну нет у меня там эккаунта! Вот ведь бл$@#&во!
1011001
— Одну секунду, — остановил увлеченного докладчика программист А. — Позвольте, я повторю, чтобы убедиться, что я правильно понимаю. Значит, вы придумали специальную технологию и Java API для того, чтобы программист, не имеющий понятия об XML, мог работать с XML-документами?
Докладчик довольно кивнул.
— И потом вы написали автоматический генератор Java-программ, использующих эту новую технологию, для того, чтобы программист, не имеющий понятия о Java, мог работать с XML, о котором он не имеет понятия? Правильно я понимаю?
Он обвел взглядом комнату. Индийские программисты белозубо и радостно кивали ему в ответ.