С миру по нитке

Последним местом моей работы был банк. Я занимался программированием софта - в разное время от трёх до пяти программ, используемых этим банком. По причинам, которые вскоре станут вам понятны, банк этот я вам называть не буду.

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

Программа затем обрабатывает полученную информацию и строит графики - один для банка и один для сотрудника, и, сопоставляя графики, выявляет тенденцию. Чтобы быть уверенным, что программа не врёт и не барахлит были наложены некоторые условия, которых не может быть, чтобы, если программа вдруг столкнётся с одним из таких условий - мы, программисты, проверим что не так и внесём требуемые коррективы. Условий таких было немало и одним из них было то, что амплитуды графиков показателей работы банка и показателей благосостояния его сотрудников не могут совпадать: совершенно очевидно, что работа банка состоит из большего количества микро-успехов и микро-неудач в единицу времени, в то время как на счета сотрудников деньги приходят и снимаются лишь несколько раз в месяц. Каково же было моё удивление, когда в отношении одного из сотрудников, едва программа включалась, она тут же натыкалась именно на наличие этого условия! Я проверил всё что мог - казалось, ошибок не было, и всё же это невероятное условие выполнялось! Т.е. банк, с его тысячами транзакций в день и некий сотрудник Б. пусть и не на всех, но на некоторых достаточно продолжительных стадиях работали в одной и той же амплитуде!

Разумеется, я начал копать, кем же именно был этот конкретный сотрудник Б. А надо сказать, что объектом нашего исследования были не только сотрудники работавшие в банке прямо сейчас, но и те, кто уже уволился или же ушёл на пенсию - до 5 лет. Так вот - сотрудник Б. был пенсионером уже 3 года, а до этого, как и я, работал программистом тут же у нас и я его, разумеется, хорошо знал лично.
Единственным разумным объяснением того, что показатели этого моего коллеги по амплитуде совпадали с эффективностью работы банка было то, что он каким-то невероятным способом крал деньги из банка. Причём ему это удавалось делать даже прямо сейчас - будучи уже 3 года на пенсии! Но красть у банка, так, чтоб банк об этом и не догадывался - дело совершенно невероятное. Если ему и удалось дойти до чего-либо такого своим умом единственное как он мог это сделать - это заложить в программу нечто такое, что делало кражу денег возможным. Но проверить как программа написана - это совершенно не реально, в каждой из программ сотни тысяч строк, тысячи ссылок и т.п. Как же выявить что именно вписал в программу этот прохвост? И тут меня осенило - раз банк понятия не имеет о пропаже денег речь скорее всего идёт об очень незначительных суммах, скорее всего до доллара, не больше. Если через банк проходит транзакция в тысячи долларов, а порой - и в десятки и сотни тысяч, центами попросту пренебрегают. Однако при сотнях тысяч транзакций в день из этих центов могут набегать очень и очень солидные суммы денег! Всё, что сотруднику Б., как программисту, осталось сделать, это направлять эти центы, которыми пренебрегли во время транзакции, себе на счёт! Причём тут и волки сыты - банки ничего как бы и не потеряли, и овцы целы - а сотрудник Б. в качестве такой вот конкретной овцы, как я только что понял, не только уцелел, но и перевёл к себе на счёт миллионы долларов сложенных из крохотных центов! Вот уж воистину - с миру по нитке голому рубашка! и телевизор! и домик с пальмами в тропиках!..

Ну, это ему, разумеется, так не пройдёт! Красть - это преступление, а преступник должен быть наказан! Я не сторонник теребить правоохранительные органы из-за всякой чепухи, особенно в связи с вопросами, в которых я вполне способен навести порядок и восстановить справедливость самостоятельно. В каждой программе миллионы ссылок на транзакции, и выявить именно ту, которая переводит деньги на его личный счёт было бы делом нереальным, если бы не то, что все транзакции идущие на этот его счёт на суммы меньше одного доллара. Мне потребовалось лишь несколько минут - сделать поиск транзакций на сумму меньше одного доллара, и детали счёта сотрудника Б. прекрасно нашлись! В тот же миг сотрудник Б. и понёс справедливое наказание - номер его счёта я из программы вытер! Теперь, чтобы программа в этом месте не сбивалась, осталось лишь вписать какой-нибудь другой, альтернативный номер счёта...

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


Рецензии