- Никогда, - чеканит Пенумбра, качая головой. - Он не был в Сан-Франциско много лет… больше десяти. Нет, у него есть другие заботы. И слава богу, что так.
Пенумбра поднимает ладони и машет на меня, выгоняя из-за стойки.
- Ступайте, мальчик мой. Вы видели редкое событие, и более значительное, чем вам кажется. Считайте, что вам повезло. И пейте свой виски, юноша! Пейте!
Я вскидываю сумку на плечо и осушаю свой стакан в два крупных глотка.
- Это, - говорит Пенумбра, - за Эвелин Эрдёш.
Он поднимает искристо-серую книгу вверх и, будто обращаясь к ней, восклицает: "Добро пожаловать, друг мой, и отличная работа! Отличная работа!"
Прототип
На следующий день я, как обычно, вхожу и приветственно машу Оливеру Гроуну. Мне хочется спросить его об Эрике, но я не могу найти нужные слова. Мы с Оливером никогда напрямую не обсуждали странности нашей работы. Потому я захожу с такой стороны:
- Оливер, я хочу спросить. Ты видел, сколько здесь бывает нормальных покупателей?
- Немного.
- Ага. Плюс члены клуба, которые берут книги почитать.
- Как Морис Тиндэлл.
- Ага.
Не знал, что его зовут Морис.
- А ты видел, чтобы кто-нибудь приносил новую книгу?
Он молчит, задумывается. Потом говорит просто:
- Не-а.
Едва он уходит, у меня появляется целая куча новых теорий. Может, Оливер тоже в деле. Может, он шпион Корвины? Глазастый тихоня. Шикарно. А может, он участвует в еще более обширном заговоре. Может, я вскрыл лишь верхний слой. Я знаю, что есть еще книжные магазины - или библиотеки? - вроде этого, но я до сих пор не знаю, что означает "вроде этого". Я не знаю, для чего нужны Дальнеполочники.
Я пролистываю журнал от начала до конца, пытаясь обнаружить что-нибудь, хоть что-то. Может, послание из прошлого: "Берегись, честный продавец, гнева Корвины". Но нет. Мои предшественники писали так же бесхитростно, как и я.
Их записи незамысловаты и документальны, не более чем описания членов клуба, захаживающих в магазин. Кто-то мне знаком: тут Тиндэлл, Лапен и остальные. Другие для меня загадка: приходящие только днем или уже давно не появлявшиеся. Судя по датам, рассеянным по страницам журнала, он охватывает чуть больше пяти лет. А заполнен лишь наполовину. Буду ли я заполнять его следующие пять? Год за годом добросовестно строчить, понятия не имея, о чем пишу?
Я понял, что у меня мозг потечет из ушей, если я буду думать об этом всю ночь. Нужно переключиться - отвлечься на что-нибудь важное и увлекательное. Я открываю ноут и возвращаюсь к работе над 3D-книжным.
То и дело я поднимаю глаза на улицу за стеклом. Высматриваю тени, край серого пиджака или блеск темного глаза. Но там пустота. Работа мало-помалу развеивает мою оторопь, и я наконец вхожу в ритм.
Если трехмерная модель этого магазина предполагает какую-то пользу, то, наверное, она должна показывать не только где какая книга стоит, но и какие в данный момент на руках, и у кого. Для этого я наскоро запрограммировал журнальные записи последних недель и научил модель исчислять время.
Теперь книжки светятся на массивных 3D-полках, будто лампочки, а их цвета - это код: те, что брал Тиндэлл, светятся синим, зеленые - это Лапен, желтые - Федоров, и так далее. Довольно клево. Но тут же вылез баг: теперь, если раскрутить магазин вокруг оси, все полки гаснут и пропадают.
Я сижу, согнувшись над кодом и тщетно пытаясь найти ошибку, и вдруг весело звякает колокольчик.
От неожиданности я невольно всхрюкиваю. Не Эрик ли, случаем, вернулся снова орать на меня? А то, может, сам генеральный, Корвина, наконец явился, чтобы обрушить свой гнев на…
Это девушка. Она заглядывает в магазин от порога, она смотрит на меня и спрашивает:
- Вы открыты?
Ой, да, девушка с каштановыми волосами до подбородка и в красной футболке с оттиснутым на ней горчично-желтым словом "Шмяк", да, вообще-то мы открыты.
- Безусловно, - говорю я. - Можете войти. Мы открыты всегда.
- Я тут ждала автобус, и мне пришло сообщение - кажется, я получила купон?
Она проходит прямиком к стойке, протягивая мне телефон, и там на экранчике моя гугловская реклама. Супертаргетированная рекламная кампания для местных - я забыл о ней, а она все идет, и вот кого-то нашла. И цифровой купон, нарисованный мной, вот он, поглядывает с поцарапанного экрана ее смартфона. У нее шикарные ногти.
- Да! - подтверждаю я. - И отличный купон. Самый лучший!
Я говорю слишком громко. Она сейчас развернется и уйдет. Непостижимые рекламные алгоритмы Гугла привели ко мне девчонку-суперочаровашку, а я понятия не имею, что мне с ней делать. Она крутит головой, оглядывая магазин. Как будто с недоверием.
От таких мелочей зависит история. Разница в тридцать градусов, и моя история окончилась бы прямо здесь. Но угол наклона моего ноута ровно таков, а на экране трехмерная модель магазина бешено вращается в двух плоскостях, как звездолет, кувыркающийся в пустыне космоса, и девушка бросает на него взгляд, и…
- Что это? - спрашивает она, подняв бровь.
Прекрасную темную бровь.
Ага, теперь я должен все сделать как надо. Не показаться конченным ботаном.
- Ну, это модель вот этого магазина, и тут видно, какие книги можно…
У девушки загораются глаза:
- Визуализация данных!
Недоверия как не бывало. Она чем-то внезапно довольна.
- Точно, - подтверждаю я. - Именно она. Вот, глядите.
Двинувшись навстречу друг другу, мы встречаемся на торце стойки, и я показываю 3D-книжный, который по-прежнему исчезает, если слишком раскрутится. Она наклоняется к экрану.
- Можно посмотреть исходный код?
Если злоба Эрика удивляла, то любопытство этой гостьи просто изумляет.
- Конечно, - отвечаю я и тасую темные окошки, пока экран не заполняется чистым Ruby, пестрящим красными, золотыми и зелеными фразами.
- Этим я занимаюсь на работе, - говорит девушка, нависая над экраном и вглядываясь в код. - Визуалом. Не против?
Она показывает на клавиатуру. Ха, нет, прекрасная ночная хакерша, я не против.
Моя лимбическая система настроена на определенный (очень низкий) уровень контактов с людьми (женщинами). И оттого что она стоит рядом и слегка касается меня локтем, я чувствую себя практически пьяным. Я пытаюсь продумать дальнейшие действия. Я посоветую ей "Визуальное отображение количественных характеристик" Эдварда Тафти - я ее видел на полке.
Здоровенная.
Девица быстро прокручивает мой код, а мне немного неловко, поскольку там внутри масса комментов типа "Вот так, блин!" или "давай, железяка, делай что велено".
- Великолепно, - говорит она, улыбаясь. - А вы, должно быть, Клэй?
Она это увидела в коде - там есть алгоритм под названием "клэй_молодчина". Наверное, такие бывают у каждого программиста.
- А я Кэт, - представляется она. - Кажется, я нашла, где сбой. Хотите, покажу?
Я колупался не один час, а эта девчушка - Кэт - нашла баг в моей модели за пять минут. Она гений. Объясняя мне процесс отладки, показывает ход своих рассуждений, быстрых и уверенных. И потом - цок, цок - глюк исправлен.
- Прости, я захапала, - говорит она, поворачивая ноут ко мне.
Убирает прядь волос за ухо, выпрямляется и заявляет с оперетточной серьезностью:
- Ну, Клэй, и зачем же ты ваяешь модель этого магазина?
На этих словах ее взгляд убегает по стеллажам к самому потолку.
Я не знаю, стоит ли быть с ней откровенным насчет полнейшей странности этого заведения. "Привет, рад познакомиться, я продаю старым чудакам книги, которые невозможно прочесть - не хотите со мной поужинать?" (Внезапно меня пронизывает уверенность, что один из этих чудаков вот-вот ввалится в двери. Прошу вас, Тиндэлл, Федоров, все остальные: сегодня не выходите из дому. Не бросайте чтения.)
Я захожу с другой стороны:
- Это своего рода исторический сюжет, - говорю я. - Этот магазин работает уже почти сто лет. Думаю, он старейший в городе - а то и на всем Западном побережье.
- Занятно, - говорит она. - Гугл по сравнению с этим просто дитя.
Вот и объяснение: девчушка из Гугла. Так что она и взаправду гений. А еще у нее мило обколот край зуба.
- Люблю данные такого типа, - она показывает подбородком в сторону ноута. - Данные о реальном мире. Старые данные.
В этой девчонке есть искра жизни. Это мой главный критерий отсева для новых знакомцев (девушек и не только) и самый лучший комплимент, какой я только могу сказать. Я много раз пробовал вычислить, что зажигает эту искру - какой букет условий должен сложиться в холодном черном космосе, чтобы возникла звезда. Я знаю, что дело главным образом в лице - и это не только глаза, но и брови, щеки, рот и микромышцы, соединяющие это все вместе.
У Кэт они такие симпатичные.
Она спрашивает:
- А ты пробовал написать визуализацию с повременной динамикой?
- Нет пока, не совсем, нет.
На самом деле я даже не знаю, что это такое.
- Мы в Гугле пишем ее для поисковых логов, - продолжает Кэт. - Это клево: ты видишь, как новые идеи вспыхивают и разбегаются по миру, будто маленькие эпидемии. А потом все выгорает за неделю.
Все это кажется мне очень интересным, но прежде всего потому, что мне очень интересна эта девушка.
Телефон Кэт бодро пикает, и она смотрит на экран.
- Ой, - говорит она. - Мой автобус.
Я проклинаю городской транспорт Сан-Франциско за внезапную пунктуальность.
- Я могу показать тебе эти штуки с временной визуализацией, - предлагает Кэт. - Хочешь, увидимся как-нибудь?
Ой, вообще-то да, хочу. Может быть, я осмелею и куплю ей Тафти. Я принесу его завернутым в коричневую бумагу. Погодите - а это не подозрительно? Книжка-то дорогая. Может, есть издание попроще, в мягкой обложке. Можно глянуть на Амазоне. Вот нелепость, я ведь в книжном работаю. (Может ли Амазон срочно доставить заказ?)
Кэт ждет моего ответа.
- Конечно, - скриплю я.
Она пишет свой мейл на одной из открыток Пенумбры: katpotente@, естественно, gmail.com.
- Купон сэкономлю до другого раза, - она машет телефоном.
- Пока.
Едва она исчезает, я лезу в настройки своей супертаргетированной кампании. Не выставил ли я там нечаянно галочку в графе "красавица"? (А что насчет графы "не замужем"?) Могу ли я позволить себе такие запросы? В чисто маркетинговом смысле моя кампания провалилась: я не продал ни одной книги: ни дорогой, ни вообще какой-либо. Более того, я влетел на доллар, из-за подписанной открытки. Но тревожиться не о чем: из моего исходного бюджета в одиннадцать баксов Гугл удержал только семнадцать центов. Взамен я получил единственный показ - единственный идеальный показ, - случившийся ровно двадцать три минуты назад.
Позже, когда час ночного одиночества и вдыхания лигнина меня немного отрезвляет, я совершаю два действия.
Первое: я пишу Кэт и спрашиваю, как она насчет пообедать завтра, то есть в субботу. Может, я немного трусоват, но ковать я стараюсь, пока горячо.
Второе: я гуглю повременную динамику и начинаю работать над новой версией модели, надеясь, что, может быть, прототип впечатлит Кэт. Меня не на шутку увлекает тот тип девушек, которых можно впечатлить прототипом.
Идея в том, чтобы не просто показать, какие книги взяты сейчас, а анимацией изобразить, какие и когда вообще брались. Сначала я перекидываю дополнительные имена, названия и даты из моего журнала в ноут. Затем приступаю к работе.
Программирование программированию рознь. У обычных письменных языков разные ритмы и идиомы, так? Ну вот, и в языках программирования то же самое. Язык под названием C весь состоит из жестких императивов, это практически голый машинный код. Язык под названием Lisp - это одно длинное, петляющее предложение, напичканное придаточными, такое бесконечное, что к концу обычно забываешь, о чем оно вообще-то было. Язык Erlang похож на свое название: эксцентричный и скандинавский. Ни на одном из этих языков я программировать не умею, они слишком трудные.
А вот Ruby, мой рабочий язык со времен "НовоБублика", разработал жизнерадостный японец, и он читается как звучные и понятные стихи. Билли Коллинз в роли Билла Гейтса.
Но, разумеется, смысл языка программирования в том, что ты его не просто читаешь: ты на нем еще и пишешь. Ты заставляешь его делать какие-то вещи. И вот тут-то, по-моему, Ruby восхитителен.
Представьте, что вы готовите еду. Но вам не нужно шаг за шагом следовать рецепту, уповая на лучшее, а можно добавлять и вынимать ингредиенты из котла в любой момент. Посолил, попробовал, покачал головой и достал соль обратно. Можно испечь идеальную хрустящую корку отдельно, а уж потом добавить внутрь что хочешь. Это уже не линейный процесс, оканчивающийся успехом или (в моем случае, как правило) обидным провалом. Нет, это цикл, или вензель, или легкая завитушка. Это игра.
Так что я добавляю немного соли, чуток сливочного масла и к двум часам ночи получаю рабочий прототип моей новой визуализации. И тут же замечаю кое-что странное: огоньки бегут друг за другом.
Вот у меня на экране Тиндэлл берет книгу с верхушки стеллажа во втором ряду. Затем, в следующем месяце, книгу с той же полки просит Лапен. Спустя пять недель за ними последует Имберт - опять та же самая полка, - но к этому времени Тиндэлл уже вернул свою книгу и взял другую с нижней полки в первом ряду. Он на шаг впереди.
Прежде я не замечал этого сценария, потому что он растянут во времени и пространстве, как музыкальная пьеса, в которой между нотами проходит по три часа, а все ноты в разных октавах. Но теперь, спрессованный и ускоренный на экране моего ноута, он стал очевиден. Они все играют одну и ту же мелодию, или танцуют один и тот же танец, или - да - разгадывают один и тот же ребус.
Звякает колокольчик. Это Имберт: невысокий и крепкий, в колючей черной бороде и обвисшей кепке-гавроше. Он водружает на стойку книгу (громадный том в красной обложке) и толкает ее ко мне. Я быстренько кликаю по своей модели, отыскивая место Имберта в общем узоре. По экрану скачет оранжевый огонек, и не успевает Имберт сказать и слова, а я уже знаю, что он попросит книгу из самой середины второго ряда. Это будет…
- Прохоров, - тяжело выдыхает Имберт. - Теперь мне Прохорова.
На полпути вверх по лесенке у меня вдруг начинает кружиться голова. Что происходит? В этот раз никаких лихих выкрутасов: вытягивая с полки тонкого Прохорова в черной обложке, я едва удерживаю равновесие.
Имберт подает карточку - 6MXH2I - и уносит книгу. Звук колокольчика, и я опять один.
В журнале я описываю совершенный обмен, отмечая кепку Имберта и запах чеснока у него изо рта. А потом приписываю, на пользу какому-нибудь будущему продавцу, и, возможно, чтобы доказать себе, что это все не понарошку:
"В круглосуточном книжном мистера Пенумбры творятся странные дела".
Величайшее вообразимое счастье
…Называются "сингулярными одиночками", - рассказывает Кэт Потенте.
На ней та же самая красно-желтая футболка со "шмяком" что и в тот раз, и из этого следует, что (а) она в ней спала, или (б) у нее несколько одинаковых маек, или (в) она персонаж комикса. Как по мне, так все эти варианты заманчивы.
Сингулярные одиночки. А ну, глянем. Я знаю (спасибо интернету), что сингулярность - это гипотетический момент в будущем, когда кривая развития технологий становится вертикальной и цивилизация как бы перезагружается. Компьютеры становятся умнее людей, так что мы передаем им бразды правления. Или, может, они сами их перехватывают… Кэт кивает.
- Более-менее.
- Но сингулярные одиночки?..
- Скоростные свидания для ботанов, - поясняет Кэт. - Раз в месяц устраиваются в Гугле. Соотношение мальчики-девочки просто отличное или ужасное. В зависимости, кто…
- …ты там есть.
- Ага. Я там познакомилась с парнем, который программировал ботов для хеджевого фонда. Мы встречались, недолго. Он всерьез увлекался скалолазанием. Плечи у него были красивые.
М-м-м.
- Но сердце жестокое.
Мы сидим в "Гурманском гроте", что в шестиэтажном глянцевом торговом комплексе. Это центр города, рядом с конечкой фуникулера, но не думаю, чтобы туристы понимали, что перед ними торговый пассаж: при нем нет парковки. "Гурманский грот" - это фудкорт, вероятно, лучший в мире: салаты из местного шпината, тако со свиной грудинкой и суши без ртути. А еще он расположен в подвале и связан переходом со станцией подземки, так что на улицу вообще выходить не надо. Оказавшись тут, я всякий раз воображаю, что живу в будущем, где атмосфера радиоактивна, а на пыльных равнинах бесчинствуют дикие банды байкеров на биодизеле. Эй, как в сингулярности, верно?
Кэт хмурится.
- Это будущее двадцатого века. С приходом сингулярности мы сможем решать такие проблемы.
Разломив надвое фалафель, она предлагает половинку мне.
- И мы будем жить вечно.
- Ну понеслась, - говорю я. - Все та же извечная мечта о бессмертии…
- Это и есть мечта о бессмертии. И что?
Она замолкает, жует.
- Давай объясню иначе. Прозвучит странно, тем более что мы только познакомились. Но я знаю, что я умная.
Это определенно так.
- И думаю, ты тоже умный. Ну и почему это должно заканчиваться? Мы бы столького добились, будь у нас побольше времени. Понимаешь?
Я жую фалафель и киваю. Интересная девица эта Кэт. Ее полнейшая прямота указывает на домашнее образование, а при этом она совершеннейшая очаровашка. Полагаю, тут дело еще и в том, что она красавица. Я бросаю взгляд на ее майку. Слушайте, я думаю, у нее все-таки куча одинаковых.
- Чтобы верить в сингулярность, нужно быть оптимистом, - говорит она. - А это труднее, чем кажется. Ты играл когда-нибудь в "Представь величайшее счастье"?
- По названию, какое-то японское телешоу.
Кэт расправляет плечи.
- Отлично, играем. Для начала представь будущее. Счастливое будущее. Без ядерных грибов. Ну, будто ты писатель-фантаст.
Ладно.
- Мировое правительство… рака нет… ховерборды.
- Дальше. Какое счастливое будущее наступит потом?
- Звездолеты. Экспедиция на Марс.
- Дальше.
- Звездный путь. Нуль-транспортировка. Переносишься куда хочешь.
- Дальше.
Я секунду молчу, потом понимаю.
- Не могу.
Кэт качает головой.
- Это правда трудно. И все это что, тысяча лет? А что наступит потом? Что вообще может после этого наступить? Воображения не хватает. Но это логично, правда? Вероятно, мы можем вообразить только то, что опирается на уже знакомые нам вещи, и к тридцать первому столетию аналогии у нас заканчиваются.
Я изо всех сил пытаюсь представить обычный день в 3012-ом году. И не могу увидеть даже хоть сколько-то убедительной картинки. Живут ли люди в зданиях? Носят ли одежду? Я ощущаю напряжение воображения почти физически. Мысли шарят, как пальцы между диванными подушками, в поисках завалявшихся идей, но ничего не находят.