Читать книгу Дедукция по коду (Дмитрий Вектор) онлайн бесплатно на Bookz
bannerbanner
Дедукция по коду
Дедукция по коду
Оценить:

0

Полная версия:

Дедукция по коду

Дмитрий Вектор

Дедукция по коду

Глава 1: Сбой в системе.

Томас Мюллер смотрел на синий экран смерти уже третий раз за утро. Курсор мигал насмешливо, словно подмигивал ему из цифрового ада. В офисе берлинской IT-компании "DigiSoft Solutions" царила обычная суета пятничного утра, но для Томаса этот день обещал стать последним.

– Мюллер! – рявкнул директор Штефан Вебер, появившись за спиной программиста как кошмарный поп-ап. – Что там с критическим багом в системе клиентской базы?

Томас медленно повернулся в кресле, его очки сползли на кончик носа. Тридцать два года, из них восемь в программировании, и он все еще чувствовал себя самозванцем среди настоящих кодеров.

– Ну технически – начал он, поправляя очки, – проблема не в коде как таковом. Скорее, это особенность архитектуры, которая.

– Мне плевать на твою архитектуру! – Вебер стукнул ладонью по столу. – Из-за этого бага мы потеряли данные трех крупных клиентов. Финансовый отдел насчитал ущерб в полмиллиона евро.

Томас сглотнул. Полмиллиона евро. Эта сумма крутилась в его голове как бесконечный цикл without break.

– Я могу все исправить, – пробормотал он. – Нужно только время для отладки.

– Времени больше нет, – холодно произнес Вебер. – Ты уволен. Кадровик оформит документы к обеду.

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

– Но – попытался возразить Томас.

– Никаких "но", – отрезал Вебер. – Охрана проводит тебя к выходу через полчаса. Личные вещи можешь забрать.

Томас посмотрел на свой рабочий стол. Фигурка Дарта Вейдера из "Звездных войн", подаренная коллегами на день рождения. Кружка с надписью "World's Okayest Programmer" – ироничный подарок от бывшей девушки Сабины. Стопка технических книг, которые он так и не дочитал. Маленький кактус в горшке, единственное живое существо, которое не умерло под его присмотром.

Восемь лет жизни помещались в одну картонную коробку.

Охранник Клаус, с которым Томас иногда обсуждал футбол, избегал смотреть ему в глаза, когда провожал к выходу. Автоматические двери офиса захлопнулись за спиной с характерным шипением, словно система наконец-то избавилась от вируса.

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

– Что теперь? – пробормотал он вслух, обращаясь к кактусу в коробке.

Кактус молчал. Он всегда был плохим собеседником.

Томас достал телефон и открыл банковское приложение. Баланс показывал сумму, которой хватило бы на три месяца жизни при строгой экономии. Может быть, на четыре, если питаться одними макаронами быстрого приготовления.

Он зашел в ближайшее кафе "Zur Alten Eiche" – старое место с деревянными столами и запахом кофе, смешанным с ароматом сигарет прошлых десятилетий. Заказал большой латте и сел в угол, поставив коробку на соседний стул.

– Мир программирования больше меня не хочет, – сказал он кактусу и сделал глоток кофе.

За соседним столиком сидела пожилая женщина с вязанием. Она внимательно наблюдала за Томасом уже минут десять.

– Молодой человек, – наконец обратилась она к нему, – вы выглядите так, словно вас только что уволили.

Томас удивленно поднял глаза.

– Откуда вы знаете?

– Коробка с личными вещами, мятая одежда, растерянный взгляд, – перечислила женщина, не отрываясь от вязания. – Плюс вы разговариваете с растением. Классические признаки внезапной потери работы.

Томас рассмеялся впервые за весь день.

– Вы что, детектив?

– Нет, просто наблюдательна. Хотя детективом быть интересно. – Женщина отложила вязание. – Фрау Кляйн. А вы?

– Томас Мюллер. Бывший программист.

– Акцент на "бывший"?

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

Фрау Кляйн кивнула сочувственно.

– Знаете, мой внук постоянно смотрит детективные сериалы. "Шерлок", "Коломбо", все эти новомодные штуки на Нетфликсе. Говорит, что настоящие детективы очень редки, а частных и вовсе почти не осталось.

Томас задумался. Детектив. Это звучало интересно. Романтично. Совсем не похоже на отладку кода в четыре утра под проклятия системного администратора.

– А как становятся детективами? – спросил он.

– Понятия не имею, – призналась фрау Кляйн. – Но уверена, что в интернете есть вся необходимая информация. Разве не так работает ваше поколение?

После разговора с фрау Кляйн Томас провел остаток дня дома, в своей однокомнатной квартире в районе Фридрихсхайн. Квартира напоминала гнездо интроверта: множество мониторов, стеллажи с техническими книгами, коллекция фигурок из видеоигр и полное отсутствие каких-либо признаков социальной жизни.

Он открыл ноутбук и начал гуглить информацию о частных детективах в Германии.

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

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

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

– "Ты относишься ко мне как к базе данных", – сказала она тогда. – "Романтика – это не алгоритм, Томас!"

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

На следующий день Томас записался на онлайн-курс "Основы частного сыска" от Берлинской академии детективных наук. Название звучало солидно, хотя вся "академия" оказалась одним человеком по имени Ганс Крюгер, бывшим полицейским на пенсии, который вел занятия из своей квартиры через Zoom.

– Первое правило детективной работы, – объявил Крюгер на первом занятии, его лысая голова блестела в свете веб-камеры, – наблюдать и анализировать. Второе правило – никому не доверять полностью. Третье – всегда иметь план Б.

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

– Кто-нибудь из вас имел дело с компьютерами? – спросил Крюгер.

Томас поднял руку.

– Отлично! Современный детектив без компьютерной грамотности – как слепой в лабиринте. Интернет, социальные сети, цифровые следы – все это важные инструменты.

После недели занятий Томас почувствовал себя увереннее. Он изучил основы наблюдения, методы сбора информации, правовые аспекты частного сыска. Оказалось, что многие принципы программирования применимы и в детективной работе: разбить большую задачу на маленькие, систематически проверять каждую гипотезу, документировать все процессы.

– Кажется, у меня получается, – сказал он кактусу, рассматривая свой первый сертификат частного детектива.

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

Теперь оставалось самое сложное – найти первого клиента.

Томас решил устроить свой "офис" в том же кафе "Zur Alten Eiche", где встретил фрау Кляйн. Это было логично: публичное место, Wi-Fi, кофе и потенциальные клиенты. Он купил небольшую табличку "Частный детектив Томас Мюллер" и поставил ее на свой обычный столик в углу.

Владелец кафе, пожилой турок Мехмет, отнесся к этой идее с пониманием.

– Пока покупаешь кофе и не мешаешь другим клиентам, можешь хоть президентом себя назвать, – сказал он, протирая барную стойку.

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

– Фрау Кляйн! – обрадовался он.

Пожилая женщина подошла к его столику и внимательно изучила табличку.

– Так вы действительно стали детективом?

– Можно сказать и так. Правда, клиентов пока нет.

– А вот и неправда, – улыбнулась фрау Кляйн и села напротив. – У меня есть дело для вас.

Сердце Томаса учащенно забилось. Первое дело! Может быть, это будет убийство? Или кража драгоценностей? Шантаж с компроматом?

– Пропал мой кот, – сказала фрау Кляйн.

– Кот? – переспросил Томас, пытаясь скрыть разочарование.

– Да, кот. Зовут Шрёдингер. Рыжий, пушистый, очень умный. Исчез три дня назад. Полиция говорит, что не занимается поиском домашних животных, а частные агентства просят слишком много денег.

Томас открыл новый документ на ноутбуке и начал печатать.

– Расскажите подробнее. Когда вы видели Шрёдингера в последний раз?

– Во вторник утром. Он вышел во двор, как обычно, но домой не вернулся. Это странно – он никогда не уходил далеко от дома.

– Опишите его поведение в последние дни. Что-то необычное?

Фрау Кляйн задумалась.

– Теперь, когда вы спрашиваете Да, он стал более беспокойным. Часто сидел у окна, наблюдал за чем-то на улице. И еще он перестал есть свой любимый корм.

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

– Какова ваша оценка вероятности того, что кот ушел сам?

– Простите?

– То есть думаете ли вы, что он мог уйти по собственному желанию?

Фрау Кляйн рассмеялась.

– Молодой человек, вы говорите о коте, как о программе с искусственным интеллектом.

– Извините, профессиональная деформация. Я имею в виду: мог ли он найти другой дом, другую семью?

– Исключено. Шрёдингер очень привязан ко мне. Мы вместе уже пять лет.

Томас сохранил файл под названием "Дело №1: Кот Шрёдингер" и посмотрел на клиентку.

– Хорошо. Я берусь за это дело. Мой гонорар – пятьдесят евро в день плюс расходы.

– Договорились, – кивнула фрау Кляйн и протянула ему фотографию кота. – Это Шрёдингер.

На фотографии был действительно красивый рыжий кот с умными зелеными глазами и пушистым хвостом.

– Я найду его, – пообещал Томас.

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

Томас открыл Google Maps и начал изучать окрестности дома фрау Кляйн в районе Пренцлауэр-Берг. Старые пятиэтажки, множество дворов, парк в двух кварталах. Классическая среда обитания городских котов.

Он составил список возможных причин исчезновения:

1. Кот заблудился.

2. Кот застрял где-то (подвал, чердак, дерево).

3. Кота забрал кто-то посторонний.

4. Кот пострадал от несчастного случая.

5. Кот нашел другой дом.

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

На следующее утро Томас отправился в Пренцлауэр-Берг с распечатанными листовками, на которых была фотография Шрёдингера и его контактные данные. Он расклеил их на столбах, в подъездах, на досках объявлений в магазинах.

Дом фрау Кляйн оказался типичным берлинским альтбау – красивым старым зданием с высокими потолками и множеством укромных уголков во дворе. Томас методично обошел все возможные места, где мог спрятаться или застрять кот: подвалы, чердаки, технические помещения.

– Шрёдингер! – звал он, чувствуя себя немного глупо.

Никакого ответа.

Он опросил соседей. Большинство помнили рыжего кота, но никто не видел его в последние дни. Пожилой мужчина из соседнего дома сказал, что видел странную женщину во дворе во вторник утром – она кормила бездомных котов.

– Может, ваш котик к ней пристал? – предположил он.

Томас записал эту информацию. Новая гипотеза: кот ушел за едой и заблудился.

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

В кафе "Zur Alten Eiche" его ждал сюрприз. За его обычным столиком сидел молодой мужчина в дорогом костюме, нервно теребящий телефон.

– Вы Томас Мюллер? Частный детектив? – спросил он, когда Томас подошел.

– Да, это я.

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

Томас сел напротив и достал ноутбук.

– Расскажите подробнее.

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

– Сначала небольшие суммы – по двести, триста евро. Я думал, ошибки в системе. Но на прошлой неделе исчезло пять тысяч евро.

– Обращались в банк?

– Конечно. Они говорят, что все операции проводились с правильными паролями и цифровыми подписями. Технически кражи нет.

Томас заинтересовался. Это уже было больше похоже на настоящее дело.

– У кого есть доступ к корпоративным счетам?

– У меня, у финансового директора Клауса и у моего партнера Стефана.

– Мне нужно будет изучить финансовые операции. Можете предоставить доступ к банковским выписками?

– Да, без проблем. Только найдите, кто крадет мои деньги.

После разговора с Лукасом Томас понял, что теперь у него два дела. Пропавший кот и исчезающие деньги. Он чувствовал себя настоящим детективом.

Поздно вечером, сидя дома перед компьютером, он анализировал банковские выписки Лукаса. Паттерн операций был интересным: деньги снимались небольшими суммами, всегда в разное время, всегда с разных карт. Но было что-то знакомое в этой схеме.

– Кажется, кто-то пытается замаскировать кражу под естественные расходы, – сказал он кактусу. – Но делает это по алгоритму.

Кактус молчал, но Томас был уверен, что тот его понимает.

Завтра будет интересный день. Нужно продолжить поиск Шрёдингера и глубже вникнуть в финансовые проблемы Лукаса. Жизнь частного детектива оказалась намного сложнее, чем показывали в фильмах, но определенно интереснее программирования.

Томас сохранил все файлы, выключил компьютер и лег спать, мечтая о том, что завтра он, возможно, раскроет свое первое настоящее дело.

За окном шумел ночной Берлин, полный тайн и загадок, которые ждали своего детектива.

Глава 2: Лицензия на глупость.

На следующее утро Томас проснулся с ощущением, что его жизнь наконец-то обрела смысл. Впервые за много лет он не тянул с подъемом, не проклинал будильник и не мечтал остаться в постели еще на пять минут. У него было два дела, два клиента и растущая уверенность в том, что программистская логика может творить чудеса в реальном мире.

Он заварил кофе в своей любимой кружке – той самой, с надписью "World's Okayest Programmer", – и открыл ноутбук. Время приступить к работе.

– Доброе утро, коллега, – обратился он к кактусу. – Сегодня мы раскрываем наши первые дела.

План дня выглядел логично:

1. Продолжить поиск кота Шрёдингер.

2. Углубиться в анализ финансовых операций Лукаса.

3. Составить профили подозреваемых.

4. Найти связь между фактами.

Томас открыл карту Берлина и отметил все места, где вчера искал кота. Сегодня нужно расширить радиус поиска. Он составил маршрут, оптимизированный по времени и расстоянию – в духе алгоритмов доставки.

Первая остановка – ветеринарная клиника доктора Шульца в двух кварталах от дома фрау Кляйн. Если кот пострадал, его могли туда принести.

– Рыжего кота? – переспросила администратор, молодая девушка с множеством пирсинга. – Да, приносили во вторник вечером. Но это был не ваш котик.

– Откуда вы знаете?

– А у вашего есть микрочип?

Томас растерялся. О микрочипах он как-то не подумал.

– Не знаю. А как это проверить?

– Нужно привести кота и просканировать. Но если вы не знаете про чип, значит, его точно нет. Ответственные хозяева всегда в курсе.

Томас почувствовал укол совести. Может быть, он недооценил сложность отношений между людьми и их питомцами. Для фрау Кляйн Шрёдингер был не просто животным – он был членом семьи.

– А того рыжего кота, которого приносили, вы не запомнили?

– Конечно помню. У него была травма лапы, но оказался ничей. Мы передали его в приют.

– Можно адрес приюта?

Приют для бездомных животных "Tierheim Berlin" находился в получасе езды на метро. Томас решил проверить эту версию, хотя интуитивно понимал: если бы Шрёдингер попал в приют, его микрочип быстро выдал бы принадлежность фрау Кляйн.

В приюте ему показали того самого рыжего кота – худого, напуганного, с забинтованной лапой. Определенно не тот ухоженный красавец с фотографии.

– Жалко, – вздохнул Томас. – А часто к вам попадают домашние коты?

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

– А что обычно с ними происходит?

– По-разному. Иногда находят дорогу домой через несколько дней. Иногда приживаются в новом месте. А иногда – она грустно покачала головой.

Томас записал все в свой блокнот. Консерватизм котов, стресс от перемен. Было ли что-то стрессовое в жизни фрау Кляйн в последнее время?

Следующая остановка – дом фрау Кляйн. Нужно было задать более детальные вопросы.

Фрау Кляйн встретила его с надеждой в глазах.

– Есть новости о Шрёдингере?

– Пока нет, но я работаю над несколькими версиями. Можно задать вам еще несколько вопросов?

– Конечно, проходите.

Квартира фрау Кляйн была уютной и немного старомодной. Везде стояли фотографии – семья, друзья, и множество снимков рыжего кота в разных ракурсах и возрастах.

– Происходило ли что-то необычное в вашей жизни в последние недели? Ремонт, гости, изменения в распорядке дня?

Фрау Кляйн задумалась.

– Ничего особенного Хотя, подождите. Три недели назад умер мой сосед герр Мюллер. Очень печальная история. Шрёдингер его любил – тот всегда угощал его колбаской.

– А что случилось с квартирой соседа?

– Наследники продали ее быстро. Новые жильцы въехали на прошлой неделе. Молодая пара с ребенком.

Томас записал эту информацию. Изменения в привычной среде, смерть знакомого человека, новые соседи – для консервативного кота это мог быть серьезный стресс.

– А эти новые соседи вы с ними общались?

– Только поздоровались. Они кажутся милыми. У них маленький мальчик, лет пяти.

– Можно с ними поговорить?

– Конечно. Квартира 12, этажом выше.

Томас поднялся наверх и позвонил в дверь. Открыла молодая женщина с ребенком на руках.

– Гутен таг. Меня зовут Томас Мюллер, я частный детектив. Расследую исчезновение кота из соседней квартиры.

Женщина – представилась Анной Хоффман – пригласила его войти. Квартира была завалена коробками, повсюду валялись детские игрушки.

– Рыжий кот? – переспросила она. – А, да! Лукас его видел!

– Лукас?

– Мой сын. Лукас, иди сюда!

Появился мальчик лет пяти с любопытными глазами.

– Лукас, помнишь рыжего котика, которого ты видел во дворе?

Мальчик кивнул.

– Он приходил к нашему окну! Каждый день! А потом я дал ему молочка.

Томас почувствовал, как в голове загорается лампочка – почти как в IDE, когда находишь решение сложной задачи.

– А что было потом?

– Потом котик ушел с тетей.

– С какой тетей?

– С тетей в синем платье. Она сказала, что котик потерялся, и взяла его.

Анна нахмурилась.

– Лукас, ты мне об этом не рассказывал.

– А ты не спрашивала, – пожал плечами мальчик с неопровержимой детской логикой.

– Когда это было? – спросил Томас.

– Вчера. Или позавчера. Не помню.

– А тетю ты раньше видел?

– Нет. Но она была добрая. Сказала, что отнесет котика домой.

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

– Можете описать эту женщину? – обратился он к Анне.

– Я ее не видела. Была на работе.

– А соседи? Кто-то мог ее заметить?

– Можно спросить у фрау Петрова из первой квартиры. Она всегда дома и наблюдает за двором.

Фрау Петрова оказалась именно такой, как описала Анна – пожилой женщиной, которая проводила большую часть времени у окна, наблюдая за жизнью двора.

– Женщина в синем платье? – переспросила она. – Да, видела. Странная была.

– В каком смысле странная?

– Ну, она же явно кота крала! Подошла, взяла и ушла. Как будто это нормально.

– А почему вы не вмешались?

– А кто знает, может, это ее кот? Мало ли что бывает.

Томас вздохнул. Свидетели – это не логи системы, которые точно фиксируют каждое действие. Люди видят одно, интерпретируют по-другому, а запоминают третье.

– Можете описать эту женщину?

– Среднего роста, средних лет. Темные волосы. Синее платье, как я уже сказала. Ничего особенного.

– А в какую сторону она ушла?

– К автобусной остановке.

Томас поблагодарил всех свидетелей и вернулся к фрау Кляйн.

– У меня есть зацепка, – сообщил он. – Вашего кота взяла незнакомая женщина. Возможно, она подумала, что он бездомный.

– Но как ее найти?

– Работаю над этим. А пока расклейте объявления в районе автобусной остановки. С просьбой вернуть кота и указанием вознаграждения.

После разговора с фрау Кляйн Томас отправился в кафе "Zur Alten Eiche" анализировать финансовые операции Лукаса. Второе дело требовало совсем другого подхода – не физического поиска, а работы с данными.

Он разложил банковские выписки на столе и открыл Excel. Каждая подозрительная операция была занесена в таблицу с указанием даты, времени, суммы и типа транзакции.

Паттерн стал очевиден после построения графика: суммы списывались в определенные дни недели, преимущественно во второй половине дня. Это не случайные кражи – это системная деятельность.

– Интересно, – пробормотал Томас. – Кто-то работает по расписанию.

Он создал сводную таблицу по дням недели и времени операций. Большинство списаний происходило во вторник и четверг между 15:00 и 17:00. В это время в офисе Лукаса обычно находились все трое: сам Лукас, финансовый директор Клаус и партнер Стефан.

Нужно было больше информации о каждом из них.

Томас открыл LinkedIn и начал изучать профили.

Глава 3: Алгоритм поиска кота.

Томас открыл LinkedIn и начал изучать профили подозреваемых. Лукас Вагнер – двадцать восемь лет, выпускник Технического университета Берлина, предприниматель с амбициями и относительно чистой онлайн-репутацией. Клаус Беккер – тридцать пять лет, финансист с опытом работы в крупных корпорациях, выглядел солидно и консервативно. Стефан Майер – ровесник Лукаса, соучредитель компании, судя по фотографиям, любитель дорогих машин и ночной жизни.

– Интересно, – пробормотал Томас, делая заметки. – У каждого есть мотив и возможности.

Его размышления прервал знакомый голос:

– Молодой человек, как дела с поиском моего кота?

Фрау Кляйн подошла к его столику с выражением надежды и беспокойства на лице.

– Работаю над этим, – ответил Томас, быстро закрывая банковские документы. – У меня есть важная зацепка.

– Какая?

– Вашего Шрёдингера взяла женщина в синем платье. Возможно, она подумала, что он бездомный.

Фрау Кляйн села напротив, на ее лице отразилась смесь облегчения и новой тревоги.

– Значит, он жив?

– Очень вероятно. Но теперь нужно найти эту женщину.

– А как?

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

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

– Простите? – переспросила фрау Кляйн.

– Извините, думаю вслух. Скажите, где в вашем районе обычно собираются любители кошек?

– Ну в парке есть группа женщин, которые кормят бездомных животных. Еще есть ветеринарная клиника, зоомагазин.

Томас быстро записывал, составляя список возможных мест.

– А женщина в синем платье – местная жительница или приезжая?

– Откуда мне знать?

bannerbanner