Фото из Гугла, это не мама автора Моя мама начала работать в одном из крупнейших банков ЕС ещё до моего рождения, а я всегда был неравнодушен к её специальности, особенно в последние годы, поскольку сам стал программистом. Меня много раз просили взять у нее интервью, и я, наконец, решил это сделать. Мир банковского программного обеспечения — это другая вселенная. Она сильно отличается от той, к которой привыкло большинство из нас. Я публикую этот пост на HN и на Reddit. Публикую интервью не в виде вопросов-ответов, а в виде рассказа. Я добавил некоторые вопросы и ответы в нижнюю часть поста. Год, когда она начала внутреннее обучение в банке Nordea, который тогда назывался Nordbanken (Северный банк). В 2001 году его переименовали в Nordea. Во время обучения она должна была проходить различные тесты, в первую очередь тест IQ, чтобы показать, что она обладает интеллектом, достаточным для работы в этой области. Тест на психологическую устойчивость — что у неё достаточно нервов для этой специфической работы и тест на многозадачность, который она завалила с оценкой 22/100. Остальные тесты она прошла успешно и заняла одну из 16 доступных позиций. Должность звучала «как программист мэйнфреймов IBM на языке COBOL», и до сих пор, уже 25 лет, моя мама работает на этой должности в том же банке. Эта позиция в банке самая важная, по крайней мере, с технической точки зрения. Если, скажем, мама и члены её команды одновременно бросят работу, банк разорится в лучшем случае в течение нескольких недель. Её коллектив работает посменно с круглосуточной доступностью. Помню, когда я был младше, она брала такси и ехала на работу посредине ночи, в воскресенье, чтобы исправить взаимную блокировку. 
Мой брат (ему 1 год, он слева), моя мама и я (справа) … это не такой крутой язык программирования как функциональный Haskell или Golang для параллельных вычислений. COBOL — это императивный, процедурный язык, а с 2002 года — объектно-ориентированный. В самом языке ничего плохого нет, проблема в том, что его почти никто не знает, как минимум в контексте программирования мэйнфреймов. Моя мать — вторая из самых молодых членов команды, а она родилась в 1964 году. У самого молодого из персонала разница с ней в два года. Это глобальная проблема, поскольку почти все крупнейшие банки в мире работают с мэйнфреймами IBM и COBOL у них — основной язык программирования. У банков помельче ситуация лучше, они обычно работают, например, на Java, без мэйнфреймов. Мама раньше спрашивала меня, не хочу ли я изучить этот язык, но я тогда уже работал с более продвинутыми технологиями вроде Postgres, Redis, Node, Crystal, PHP и всегда отвечал «Да ни за что!». Мне до сих пор интересно то, что она делает, но такие типы систем вызывают, кажется, самое плохое ощущение корпоративщины, которое только можно представить и которого мне хотелось бы избежать. Правда, я могу только представить жирную зарплату 20-летнего программиста старого мэйнфрейма, потому что возраст в этом случае бесценен. Их основная база данных называется IMS. Это иерархическая база данных, созданная IBM для программы Apollo. Между собой они называют её DL/1, Язык Базы данных 1 (Database Language One). Они пытаются мигрировать на DB2, реляционную базу данных, которая понимает нормальный SQL. Но, учитывая огромный объем данных, которые хранит банк Nordea, такая задача займёт несколько лет. Нужно не просто переместить данные из IMS в DB2, в дополнение надо обновить модули для загрузки и сохранения данных из DB2 вместо IMS, а модулей тысячи, многие из них были разработаны программистами, которые либо умерли, либо вышли на пенсию. Каждая транзакция хранится в DB2. Они избегают записей в IMS насколько это возможно, и только считывают из неё данные, пока их новая купленная система не интегрируется полностью, и они не смогут хранить данные там. IMS — чрезвычайно старая и очень медленная (для некоторых задач).
Поиск данных может занять несколько часов. Ха, а мы тут спорим о том, что у MySQL скорость выполнения запросов на две миллисекунды выше, чем у Postgres. Немного иронично. Они также используют плоскую файловую структуру для целого ряда задач, которые сами по себе делятся на несколько подвидов, поддерживаемых IMS. Один из примеров — GSAM, из-за которого маме не раз приходилось мчаться на работу на такси. И всё из-за модулей, работающих с одним и тем же GSAM-файлом одновременно, создавая взаимные блокировки. Давайте поговорим о размере их баз данных. DB2 хранит данные только о транзакциях, и транзакции отличаются по размеру, в зависимости от типа счетов, между которыми протекает транзакция. Частные счета, как мой личный банковский счет, на порядок проще, чем корпоративные счета. Каждая транзакция весит где-то от 500б до 2Кб, в среднем примерно 1Кб. Сейчас их база данных DB2 хранит 11 миллиардов транзакций, а закон требует хранить каждую транзакцию в течение 10 лет, а по факту — 11 лет. На данный момент транзакциям только 7 лет, а их количество, предположительно, растёт на 5-8% каждый год, и так, пока они не дождутся 11 лет, когда можно будет уничтожить записи старше 11 лет. Получается, сегодня DB2 хранит около 10Тб данных, и это только транзакции. Через четыре года это превратится приблизительно в 13-14Тб. Большая часть оставшейся информации хранится в IMS. Эти данные сильно отличаются по объёму, так что трудно оценить размер, но я предполагаю, что их намного больше, чем в DB2. Ещё они хранят некоторые данные на лентах, а их программы указывают машине загрузить или сохранить данные с конкретной ленты. Это довольно круто! У всех есть что-то вроде IDE или текстового редактора, правда? У них, вот, есть. Их IDE называется ISPF и напоминает операционную систему. ISPF можно расширять, и часть, которую можно назвать IDE — это расширение ISPF под названием Endevor. ISPF напрямую связана с мэйнфреймом, и у них нет такого понятия, как локальная среда разработки. 
Интерфейс ISPF, найденный в интернете Примерно 80% их систем — пакетная обработка. Это задачи, которые запускаются в определенное время или интервал времени, выполняя какую-нибудь обработку данных или отправляя данные в другие банки, агентства или ещё куда-то. Например, когда я покупаю банку кока-колы, деньги снимаются с моего счета, но фактически деньги никуда не поступают, пока одно из их пакетных заданий не проведёт эту операцию. Эти задания, как правило, выполняются в ночные часы, поэтому обычно требуется день, чтобы операции между банками завершились. Транзакции внутри банка обычно мгновенные, поскольку выполняются сразу. Пакетные задания работают с гигабайтами, иногда терабайтами данных, и в некоторых случаях могут занять несколько часов. Хотелось бы посмотреть, как мэйнфреймы IBM внезапно переходят на полную мощность в их датацентрах в ту секунду, когда на часах 00:00. Это было бы офигенно! У банков, которые работают на мэйнфреймах, множество проблем, которые они должны решать, но времени на это, к сожалению, не хватает. Программисты становятся старше, не многие хотят учиться, а время, через которое новый сотрудник сможет уверенно выполнять свои функции, составляет 2-3 года, и даже после этого он может попасть в нетипичную ситуацию. Есть программы, которым десятки лет: никто не понимает, как они работают, а человека, который их писал, уже давно нет. Многие банки хотят приобрести новые крутые системы, чтобы заменить старые, а все их программисты в один голос заявляют: «это не сработает, нашего монстра нельзя ничем заменить». Отчасти, причина огромного размера их систем в том, что они изначально допустили ошибку и начали подстраивать свою систему под другие системы. Хороший пример: мы создаём RESTful-сервисы, в которых программы, которым нужно получить от нас данные, подстраивают свои системы под нашу. В некоторых банках всё не так, и они посылают данные другим системам, например, налоговым службам, а налоговые службы могут в любой момент обновить свои системы, которые, в свою очередь, сломают те, что банки используют для отправки данных. Банковские системы также чрезвычайно продвинутые. Личный банковский счет сильно отличается от корпоративного банковского счета. В дополнение существует как минимум 50 различных видов банковских счетов для каждого из типов. А в случае с Nordea, есть ещё и шведские правительственные счета, которые отличаются от личных и корпоративных. Думаю, что существуют финские правительственные счета и, возможно, часть датских, которые тоже чем-то отличаются. Будет очень интересно послушать, что банк Nordea и другие банки собираются делать в ближайшие годы, и какие новые технологии они собираются реализовывать. Почему ты решила программировать на мэйнфрейме IBM на COBOL?
— Я всегда хотела «работать с компьютерами», но не искала эту конкретную работу. Я увидела объявление в газете, подала резюме и получила работу. Правда, на тот момент у меня уже было немного опыта в сфере компьютерных систем. Что тебя больше всего шокировало?
— Мой коллега однажды забыл добавить точку в конце инструкции для программного модуля в самой важной части нашей системы, которую мы называем «кассой». Она отвечает за обработку всех денег. В результате на 16 часов остановилась работа всего банка, исключительно из-за модуля, который продолжал выполняться, хотя должен был остановиться после той инструкции. Это буквально повесило нашу систему, устроив, можно сказать, DoS-атаку самой себя. Как ты думаешь, какое будущее ждёт банки, работающие в той же инфраструктуре, как Nordea?
— Большинство банков признало, что нужно заменить старые мэйнфреймы на более современные. Nordea купил новую систему, которой обещал заменить текущую в течение 4-х лет, но банк обслуживает несколько стран, и в реальности 4 года уйдёт только на одну страну, так что в общей сложности — 16 лет. Банки и финансовые системы, которые не поняли этого, окажутся в очень сложной ситуации. Хотя мне до сих пор кажется, что мы будем использовать инфраструктуру IBM. С какими проблемами тебе пришлось столкнуться как женщине-программисту, которая начала работать в 90-х?
— Совершенно никаких проблем не было. В моём коллективе есть несколько женщин, но мужчин больше. Меня это не особо беспокоит. Ты работаешь над одним модулем и, возможно, над одной кодовой базой больше 20 лет. Это вообще надоедает?
— Да, определенно, как и в других сферах деятельности. Но за время работы здесь я создала множество абсолютно новых систем по разным финансовым направлениям, и это всегда было интересно. К сожалению, с этого момента мы уже никогда не создадим ничего нового, только будем поддерживать текущее и ждать новую систему, которую купили для замены. Насколько страшно писать код для банка?
— Очень страшно, особенно, когда мы делаем изменения на главном сервере по воскресеньям. Когда мы что-то там меняем, крупные блоки системы нужно переводить в оффлайн. Один из этих блоков — вся IMS. В этот промежуток времени может случиться что угодно, но у нас очень надежная тестовая система, так что, как правило, всё проходит без проблем. Ты когда-нибудь допускала серьёзные ошибки в работе?
— Определенно, одну довольно серьёзную ошибку я сделала еще в 1997 году, когда мой младший сын (это я, автор) только пошёл в детский сад и кончился мой декретный отпуск. У нас есть накопительная пенсионная система. Этот тип банковских счетов в то время был не закрытым, а по закону нельзя было снимать деньги с этого счета пока не исполнится 55 лет. Поскольку счета не были закрытыми, при наличии номера банковского счета деньги можно было снимать. Поэтому решение было простым — не давать клиентам номера их банковских счетов. Я ухитрилась облажаться и изменила модуль, который стал добавлять номер счета в письмо, отсылаемое клиенту по почте. Клиенты начали снимать деньги (с которых еще не списали налоги!) со своих пенсионных счетов раньше, чем им полагалось по закону. Это повлекло за собой огромное внутреннее расследование. Вмешалось шведское правительство, нас атаковали финансовая инспекция и СМИ. Это всё — я. Какая у тебя рабочая атмосфера?
— Мы недавно переехали в более «модное» место. Раньше у нас были личные столы, а теперь «выбирай любое доступное место» — открытое пространство. Мне это совсем не нравится. (Перевод Наталии Басс)