Впрочем, Александра тоже не знала, куда деться. Тоскливо посмотрела на немытую чашку, спешно откручивая кран, насыпала Магнусу в тарелку еду, и только потом с извинением посмотрела на него, ибо кошачья посуда ничем не отличалась от человеческой и стояла на столе.

— Он не хочет есть с миски, — пояснила она, пока кот вставал на задние лапы и тянулся к тарелке, не запрыгивая при этом на стол. — Только вот так. Я понимаю, что это странно выглядит.

— Коты не могут выглядеть странно, — Игорь занял свободный стул и почти с завистью посмотрел на Магнуса. — Они прекрасны в любом своём проявлении, — он сделал несколько глотков воды и сонно зевнул. — Сколько ж он весит?

— Одиннадцать с половиной, — Саша остановилась за спиной у кота и заботливо почесала ему шею. Тот не отвлёкся от еды ни на секундочку, чтобы отогнать или поощрить действия хозяйки, но на её губах уже расцвела нежная, полная любви улыбка. — Если б не Магнус, я, наверное, одурела бы от одиночества…

Игорь поднялся на ноги, опасливо косясь на люстру. Кухонька была маленькой, потолки — низкими, да и квартира, хоть и опрятная и довольно чистая, казалась просто крохотной. Он искренне надеялся, что Саша не заметит этот его взгляд, что это не повлечёт за собою очередную волну извинений; в конце концов, ему не хотелось бы её обидеть. Жилищные условия далеко не всегда определяют человека, и это был как раз тот случай.

Но так они оказались ближе друг к другу, чем предполагалось. Где-то фоном чавкал кот, доедая свою вечернюю порцию, и эти звуки самым наглым образом заменяли положенную в подобных ситуациях романтическую мелодию.

Подсознание требовало обнять Сашу и попытаться её поцеловать, сознание — отступить на пару шагов и не пугать девушку своей настойчивостью. Да и она сама, кажется, не знала, что делать; на мгновение подалась было вперёд, а после отшатнулась к стенке и неопределённо как-то махнула рукой.

— Я на диване постелю, — она едва слышно запиналась, явно волнуясь и не зная, что правильно было бы сказать. — Только… Магнус… Он обычно там спит и может быть против, но…

— Иди отдыхай, я сам разберусь с Магнусом. Дашь какой-то плед, и мне хватит, — усмехнулся Игорь. — Хотя тут тепло.

— Он очень сильно царапается, — начала было Саша, но закусила губу, вынудив себя умолкнуть. — Мне следовало поехать домой одной, правда. Не было бы столько проблем.

— Он, — кивнул Игорь на кота, — стоит любого расстояния.

И Саша тоже.

…Несомненно, диван не был примером удобства. Он оказался не таким уж и коротким, как мог предположить Игорь, но при этом пружинистым. Сашу этот факт, правда, смущал едва ли не больше его самого, и единственной причиной, по которой она не извинялась каждые три минуты, было то, что и это оказалось бы крайне неловким. Сейчас, в темноте крохотной квартиры, кажется, превращённой в двухкомнатную путём манипуляций с новыми стенами, было слышно, как она ворочалась в кровати за закрытой дверью.

Магнус остался снаружи, хотя Игорь предполагал, что обычно он спал либо на диване, либо с хозяйкой в постели. Кот вообще не слишком обрадовался, когда какой-то посторонний мужчина явился к нему в квартиру, а сейчас, кажется, возмутился до глубины души и, решив занять-таки законное положение, запрыгнул на гостя и устроился у него на животе, возложив тяжеленные лапы и голову на Игорю на грудь.

Однако, с котом лежать было интереснее, чем просто коротать время на коротком диване. Игорь, правда, стянул его с себя, сел, освобождая Магнусу вторую половину, и кот устроился поудобнее, поджав под себя лапы и сверкая в темноте своими глазищами.

— Скажи-ка, — промолвил Игорь, чувствуя себя полным идиотом, но при этом всё равно обращаясь к коту, — есть кто-нибудь у твоей хозяйки?

— М-не, — Магнус, кажется, всё понял, посмотрел на дверь, а после встал и перебрался к Игорю на колени. Сталкивать его во второй раз было бы уже совершенно некультурно, и Ольшанский запустил в тёплую мягкую шерсть пальцы.

Кот не вырывался. Это было по меньшей мере странно — коты редко положительно реагировали на посторонних. Но, очевидно, он искренне понравился Магнусу — иначе с чего бы оказывать подобную высокую честь и допускать до его пушистого высочества? Или, может быть, пушистый зверь и вправду что-то чувствовал.

…Игорь не помнил, когда уснул, но утром шея не болела — Магнус, свернувшись вокруг его плеч пушистой подушкой, обеспечил идеальный комфорт.


350


18 мая 2017 года

Четверг

Впервые за долгие годы работы Игорь второй раз подряд приходил первым на работу. То, что он заменял Регину, давало право требовать у охраны открыть офис пораньше; впервые причиной для этого было то, что они с Сашей приехали слишком рано — чтобы не выслушивать болтовню и дурацкие сплетни, во второй раз он был гоним уже жаждой разобраться с реализационными трудностями, с которыми они столкнулись, работая над проектом.

Структура наследования напоминала дерево — и какая-то из его ветвей вела не туда, куда следовало. Впервые за последние две недели он взялся за работу действительно серьёзно, ни на что не отвлекаясь; оно того стоило — запереться в кабинете, изолировавшись от постороннего шума, и отвлечься от всех жизненных неприятностей работой.

Что-то упорно не складывалось. Игорь смотрел на тонкую линию связи между старыми, уже существующими блоками закрытого кода и новыми планируемыми функциями и понимал, что этого будет мало. Даже если они реализуют всё а таком виде без фатальных ошибок, то рано или поздно неработоспособность будущего приложения даст о себе знать.

К сожалению, рано.

Он перевёл взгляд на тяжеленую структуру. Даже после того, как они вышвырнули оттуда целый кусок ежедневного обновления, а видоизменения вместо даты привязали к рандомайзеру и сошлись на комбинации из элементов — теперь это была уже проблема дизайнеров, как толково всё собрать, — всё равно оставалась целая куча звеньев, которые следовало выбросить к чертям собачьим.

Игорь раздражённо зашипел, глядя на строки бесполезного труда. Ему казалось, что элементы будут составлять ещё много-много недель, а когда придёт время всё соединять воедино, он уже сумеет найти какое-то красивое решение, но это изначально было очень наивно. Если не выдать результат до следующей пятницы, то он так и останется в этой точке — сдвигаться было некуда. Соединять элементы по блокам?

Не подойдёт.

Если бы они работали по старому доброму вотерфолу, то он бы оттянул это ещё дальше. Но сейчас, когда тестировщики уже висели на голове и интересовались, когда поток работы доберётся и до них, когда кто-то уже вздумал запилить юнит-тестирование, а у них не было цельной структуры…

Может быть, следовало заняться этой проблемой чуть раньше. Но когда? Игорь и так понимал, что выделяемого им года слишком мало для того, чтобы оправдать ожидания.

Зато как красиво сначала предлагали забрать в главный офис, туда, дать возможность карьерного роста… Согласились на свою голову.

Где-то здесь, в бесконечных перечнях блоков, было что-то, что он не дописал. Красивая связка, промежуточный контейнер, который теперь будет некому дать.

Игорь прежде не особенно уважал карандаши да бумагу — он предпочитал всё сразу переводить в код. Но с каждым днём проекты становились всё сложнее, и так просто воплотить свои идеи без предварительного плана больше не удавалось. Наверное, именно в тот момент он понял, насколько удобно иногда бывало накидать предварительную структуру.

И очень зря он раздал задания до того, как придумал это связующее. Теперь столько всего следовало подкручивать под уже готовые части…

Это должен быть аккуратный кусочек кода, несколько классов (абы не несколько десятков), которые потом станут расширяться и вылезут в полноценную систему… Более продуманный рандомайзер, возможно, часть, что будет продумывать сборку…

Он застыл с карандашом в руках, поймав наконец-то столь желанную идею за хвост.

Сочетаемость элементов. Не надо никакого дополнительного связующего звена; им нужно что-то вроде базы данных и блока по принятию решения. Не ежедневно новая линия взаимодействия с пользователем, не триста шестьдесят пять вариантов поведения, а крохотная сеть связей с нечёткой логикой, что поможет по подлавливаемым параметрам определить-таки, что нужно пользователю!

В дверь тихонько постучали. Он не поднял головы, не отреагировал даже, когда кто-то вошёл в кабинет.

На столе внезапно оказались стакан с водой и какие-то бутерброды.

— Ты безвылазно сидишь тут уже часов пять, — промолвил мягкий женский голос, и Игорь, посмотрев на часы, понял, что провалился слишком надолго. — Надеюсь, я не помешала.

— Как ты думаешь, — протянул он, — если отказаться от рандомизированных комбинаций и от подстройки соответствующих паттернов, а сойтись на маленькой сети, что будет провязывать элементы друг с другом и вызывать нужные в зависимости от соответствующей системы? И вшить эту систему таким образом, чтобы она основывалась на предпочтениях пользователя и менялась в зависимости от активности его взаимодействия с интерфейсом? Сначала что-то вроде демонстрации всех вариантов, сочетания элементов, а после анализ активности с ведением статистики и динамическая переработка индивидуально для пользователя, с помощью программы? Не искусственный интеллект, конечно, но действительно интерактивное взаимодействие, как от нас и хотели. Только не основанное на случайностях, а более продуманное.

— Да, но эту статистику придётся не только очень хорошо спрятать, а и ограничить в использовании ресурсов, чтобы она не была слишком трудоёмкой. И определить места, где логичнее всего было бы вести подсчёт. В таком случае, возможно, есть шанс определять всё без вреда для производительности, — кивнула Саша. — В целом, мне кажется, это очень хорошая идея. Возможно, она реализуется не так просто, как то, что мы думали раньше.

Игорь кивнул.

Он отлично знал, что его коллеги не согласятся на такой кусок дополнительной работы. Но красивое, аккуратное дополнение так и просилось на свободу, даже если ради него ему придётся вспомнить всё давно забытое и выходящее за пределы обыкновенных технологий, ставших на фирме уже привычными, прогнать Регину с её страстью к подстраховке, избавиться от всех программистских предрассудков и сидеть, крутить это весь год, день в день.

Об отпуске точно можно забыть.

— Я вряд ли уложусь в год в одни руки, — наконец-то признал он, поднимая взгляд на Сашу. — Ты что-нибудь в этом понимаешь, правда?

— Да, насколько это возможно, — пожала плечами она. — Хорошо. Давай займёмся этим.

— Ты должна осознавать, — отметил Игорь, — что эта работа потребует не день и не два. И о том, чтобы отдыхать, можно попросту забыть, наверное. Это куда сложнее, чем то, что мы планировали раньше, и я не могу дать гарантии, что всё получится.

— Но если получится — это ведь будет именно то, что просил заказчик? Не костыли? — Александра сама потянулась к стакану с водой. — В таком случае, я готова рискнуть. Я пришла сюда не для того, чтобы сидеть, сложа руки, или просто складывать кубики чужих кодов.

Игорь улыбнулся. Глаза у неё горели точно так же ярко, как и у него самого.

— Они меня прибьют, когда узнают об этой идее, — почти самодовольно произнёс он. — Но я не могу сказать, что чувствую себя очень огорчённым.

— Самое приятное в работе — это её сложность, — довольно флегматично отозвалась Саша. — Но, мне кажется, за это надо будет садиться уже сегодня?

— Завтра на митинге переопределю планы, — покачал головой Игорь. — И если придётся это дело выносить на голосование, я рассчитываю на твою поддержку.

Она кивнула, но не ушла. Игорь чувствовал какое-то лёгкое напряжение, хотя не мог понять, что именно было его причиной.

— Ты что-то хотела? — осторожно уточнил он. — А то я как влез вчера утром во всё это, так и забыл о существовании реального мира.

— Нет, всё в порядке, — Саша, кажется, растеряла все остатки собственной решимости. — Мне просто хотелось поблагодарить за то, что ты тогда меня подвёз.

— Да ладно, пустяки, — улыбнулся Игорь. — Ты же сейчас тоже поддерживаешь мою неадекватную идею. Как там Магнус? — последний вопрос сорвался с языка быстрее, чем Игорь успел подумать о том, как он вообще звучит со стороны.

— Скучает, — призналась Саша. — Ты ему, кажется, очень понравился. Даже неожиданно. Ему никогда не нравились гости, он прогонял их прямо с порога.

— Я обязуюсь подвести тебя и сегодня, — вскинулся Игорь. — Повидаю кота… Если ты не против, конечно.

— Нет, не против, — она легонько подвинула к нему стакан с водой. Игорь потянулся за ним — но, совершенно случайно, к слову, сжал скорее не ледяное стекло, а её ладонь. Саша не отпрянула, даже не отвернулась — какой, однако, хороший знак.