— Ой, — каже вона, — це мій автобус. — Я проклинаю міський громадський транспорт за його випадкову пунктуальність. — Я можу показати вам ті штуки з часовою динамікою, — продовжує дівчина. — Може, якось зустрінемось?
Чом би й ні, залюбки. Може, я наберуся сміливості й куплю їй книжку Тафті. Принесу її, загорнену в коричневий папір. Заждіть — а це не виглядатиме трохи дивно? Книжка все-таки дорога. Можливо, є дешевший примірник, у м’якій обкладинці? Я міг би замовити її на Amazon. Безглуздя якесь, я ж працюю в книгарні. (Чи зможе Amazon доставити її вчасно?)
Кет усе ще чекає моєї відповіді.
— Звісно, — лепечу я.
Вона записує свою електронну адресу на одній із листівок Пенумбри: katpotente@, звичайно ж, gmail.com.
— Скористаюся купоном іншим разом. — Вона махає своїм телефоном. — До зустрічі.
За нею ще не встигли зачинитися двері, а я вже відкриваю сторінку своєї суперцільової рекламної кампанії. Невже я випадково поставив галочку в графі «красуня»? (А як же графа «незаміжня»?) Чи можу я дозволити собі такі характеристики? З маркетингової точки зору моя рекламна кампанія з тріском провалилася: я не продав жодної книжки, ані дорогої, ані дешевої. Насправді я ще й влетів на долар через пописану листівку. Та хвилюватися не варто: з мого початкового бюджету в одинадцять доларів Google стягнув тільки сімнадцять центів. Натомість я отримав один-єдиний відгук на свою рекламу — один-єдиний бездоганний відгук, що трапився мені рівно двадцять три хвилини тому.
Пізніше, коли година опівнічної самотності й вдихання лігніну трохи мене протвережують, я роблю дві справи.
Перше: пишу повідомлення Кет і питаю, чи не хотіла б вона завтра, тобто в суботу, зі мною пообідати. Іноді я буваю лякливий, але цього разу вирішив кувати залізо, доки воно ще гаряче.
Друге: я набираю в пошуковику «візуалізація з часовою динамікою» й беруся до роботи над новою версією своєї моделі — може, цим прототипом мені вдасться справити враження на Кет. Мені направду подобаються дівчата, на яких можна справити враження прототипом.
Весь задум полягає в тому, щоб не просто показати всі книжки, які є в книгарні, а за допомогою анімації визначати, коли брали книжки і які саме. Для початку я переношу додаткову порцію імен, назв і дат зі свого журналу в комп’ютер. Тоді пишу коди.
Програмування буває різним. Звичайна мова має різну ритмічність і містить усілякі фразеологізми, еге ж? Те саме й у мові програмування. Мова, що називається C, — суцільний грубий наказовий спосіб і майже голий машинний код. Мова під назвою Lisp являє собою довгі закручені речення, та ще й із купою підпунктів, тому частенько трапляється так, що в кінці вже годі пригадати, що там було на початку. Мова програмування Erlang — це той варіант, коли назва говорить сама за себе: ексцентрична й скандинавська. Я не вмію кодувати жодною із цих мов, бо вони заскладні для мене.
А от Ruby, яку я обрав ще тоді, коли створював сайт для «Нового бейґла», розробив життєрадісний японський програміст, і вона читається, як легкі, мелодійні вірші. Біллі Коллінз[21] у ролі Білла Ґейтса.
Та, певна річ, суть мови програмування не в тому, щоб її читали. Вона створена для того, щоб нею писати, примушувати її виконувати ваші команди. І в цьому, як на мене, Ruby не має рівних.
Уявіть, що ви куховарите й замість того, щоб невідступно дотримуватись рецепта з надією на краще, можете виймати інгредієнти з каструлі чи додавати їх, коли вам заманеться. Можете додати солі, спробувати ваше вариво, похитати головою й прибрати звідти сіль. Можете окремо спекти бездоганну хрустку скоринку й уже опісля додати до неї все, що забажаєте. Це більше не лінійний процес, який закінчується успіхом чи (зазвичай у моєму випадку) прикрою невдачею. Ні, це спіраль, завитушка або ж маленька закарлюка. Це гра.
Отож я додаю трохи солі, присмачую все маслом і близько другої ночі отримую прототип нової візуалізації. І тут помічаю щось дивне: вогники йдуть один за одним.
На екрані я бачу, що Тінделл візьме книжку з вершечка стелажа в другому ряду. Потому, десь за місяць, Лапін попросить книгу з тієї самої полиці. Через п’ять тижнів по книгу з тієї ж полиці прийде Імберт, а Тінделл тим часом уже візьме нову — з самого низу стелажа в першому ряду. Він на крок попереду.
Я не помічав цієї закономірності раніше, бо вона розтяглась у просторі й часі, як музичний твір, у якому інтервал між нотами становить три години, а всі ноти в різних октавах. Але тут, коли я стиснув і прискорив її на своєму екрані, закономірність стає очевидною. Усі вони грають ту саму мелодію, або танцюють той самий танець, або — так — розгадують ту саму загадку.