Помимо обыденных баз данных Sybase, Oracle и языков программирования С++, Java, Clojure, Scala, Python в банках и других финансовых учреждениях можно встретить и весьма экзотические технологии. Многие из этих технологий созданы много лет назад для решения каких-то специфических задач в области финансов и биржевой торговли. Так как замена этих технологий на что-то новое обойдется дороже поддержки, эти технологии продолжают жить в своей нише. И лишь некоторые из них выходят за рамки своей узкой специализации.
Многие наверное слышали о страшных миллионах строк кода написанных в 70-ых на Cobol, которые сейчас никто не может понять, но которые работают по сей день. Я уже упоминал о «страшном» языке RPG, который до сих пор используется на мейнфреймах System i (бывш. AS/400) в back office. Но в данной статье пойдет о чем-то еще более экзотичном.
Во всех организациях — и банки здесь не исключение — выбор языков программирования, с помощью которых строятся внутренние системы, находится в компетенции специального технического отдела. Разработчики могут предложить со своей стороны что-то экзотическое и особенное, если это требуется для какой-то особой задачи, но решение всегда остается за руководителями. Объяснение этому факту простое: построенную систему надо будет поддерживать на протяжение длительного периода, от нее будут зависеть многие бизнес-процессы. Если в системе используются экзотические решения, как и где найти специалистов для её поддержки и развития, если исходные авторы системы покинут организацию?
Выбор весьма традиционен: Java (Scala/Clojure), C#, C/C++, Python. В каких-то организациях делается акцент на C++, в каких-то — на Java, где-то существует смесь Java и C++ в разных пропорциях. Например, создатель языка С++ Бьёрн Страуструп работает в инвестиционном банке Morgan Stanley, и потому не удивительно, что многие системы в Morgan Stanley построены на С++, и у этого банка большой спрос на С++ программистов.
OCaml
В свете вышесказанного весьма необычен выбор HFT-компании Jane Street, которая выбрала в качестве основного языка разработки экзотический язык программирования OCaml. Jane Street — не единственная компания, обратившаяся к OCaml. Список организаций, использующих OCaml, внушителен. Из финансовых организаций помимо Jane Street там даже присутствует Bloomberg.
Jane Street не просто использует этот язык, но и развивает его, выкладывая в open source свои реализации стандартных библиотек для него. При этом Jane Street при найме разработчиков не требует знания этого языка, обещая научить всему в рабочем порядке.
Язык Slang и SecDB
В Goldman Sachs был изобретен и до сих пор используется свой собственный язык Slang. Он используется в сопряжении с внутренней базой данных SecDB. SecDB это платформа для вычисления цен и рисков по всем биржевым позициям, которые имеются на счетах Goldman Sachs. В некотором роде это своеобразный «невидимый» Excel в памяти компьютера только без ячеек и полос прокрутки. Язык Slang, чем-то похож на Python, используется для манипуляции данными и вычислениями в этой базе данных.
По этому языку вы не найдете никакой документации в общем доступе. По этому языку нет книг и сайтов. Этот язык может знать только тот, кто с ним работал в Goldman Sachs. И этот язык нигде, кроме Goldman Sachs, не используется и востребован. В результате программисты, работающие с этим языком, приобретают опыт, который, увы, востребован только в Goldman Sachs. И если кроме этого языка, они больше ничего не знают, это значит, что они на всю свою карьеру привязаны к Goldman Sachs и больше никуда уйти не могут. Как вам такие перспективы?
Eclipse Collections
Как сказано выше, Java и вся экосистема Java (Spring / Hibernate / Apache Commons / и т.д.) широко используется в банках. Банки, разумеется, также и пишут свои библиотеки и утилиты, предназначенные для каких-то своих внутренних приложений. Бывает, что такие утилиты и библиотеки не выходят за стены банка. Но есть исключения. Одно из таких ярких исключений — библиотека Eclipse Collections.
Библиотека была написана в Goldman Sachs в 2004-2008 году. Она расширяла и дополняла библиотеку классов Collections, которая шла вместе с JDK. Большое внимание при разработке уделялось производительности и скорости работы библиотеки. Над библиотекой за всю ее историю попеременно работало около 40 разработчиков Goldman Sachs.
Мне довелось работать с этой библиотекой в 2008-2009 году, когда я работал как контрактник в GS над их внутренним проектом, который мы писали на Java 6. В то время библиотека еще называлась Caramel, а ее поддержкой занимался ее изначальный автор, чьё имя, увы, моя память не сохранила. Потом библиотеку переименовали в GS Collections и открыли исходники для публики в январе 2012 года. В декабре 2015 исходники переданы в фонд Eclipse, и сейчас фреймворк называется Eclipse Collections. В интернете представлен обширный материал по Eclipse Collections. Может быть позднее напишу отдельную статью об этой библиотеке.
Менеджер сообщений TibcoRV
В 1986 году американец индийского происхождения Вивек Ранавиде (Vivek Ranadivé) в бизнес-инкубаторе Teknekron Corporation открыл стартап Teknekron Software Systems (TSS). В том же году новорожденная компания заключила свой первый контракт с Goldman Sachs на переоборудование торгового зала. Для передачи данных между различными приложениями в зале был применен подход «Информационной шины» (The Information Bus). От этого словосочетания образовался акроним TIB.
В 1993 году компания была продана Reuters за 125 миллионов долларов. На эти деньги Вивек в 1997 году основал компанию TIBCO Software Inc. Название образовано от того самого акронима TIB. Главный продукт компании — Tibco Rendezvous завоевал прочные позиции в банках, где использовалась для интеграции в масштабах предприятия, передачи данных между приложениями и их компонентами еще до того, как появились стандарт JMS. Сейчас компания Tibco предлагает множество других продуктов, но в банках эту компанию помнят до сих пор именно по этому продукту, а реализация стандарта JMS — Tibco EMS — используется в многих банках до сих пор.
Язык A+
Язык программирования A+ был разработан в 1988 году программистом Артуром Уитни (Arthur Whitney), работавшем в инвестиционном банке Morgan Stanley. Язык был создан как замена языку APL, тоже весьма популярному языку при работе со статистическими данными и математическими формулами. APL был настолько «экзотичным», что для написания программ на нем требовалась специальная клавиатура с особыми символами.

На языке APL была написана в 1986 году первая система торговли с использованием стратегии статистического арбитража. Её написала группа программистов под руководством докторов наук Nunzio Tartaglia и David E. Shaw. Почему был выбран именно язык APL? Потому что APL очень хорошо подходил для манипуляций большими массивами чисел.
Программа, как и многие другие APL-системы в Morgan Stanley, работала на мейнфрейме IBM, но потом было решено перенести ее на UNIX, в частности на SunOS. Только два вендора предлагали APL-системы под UNIX, и обе эти системы не удовлетворяли требованиям бизнеса. Артур Уитни предложил написать свою реализацию, которую он назвал A. Язык A стал реализацией языка APL на всех UNIX-платформах, а затем был портирован даже на Linux. Язык A стал позднее называться A+, когда к нему был добавлен графический интерфейс.
A+ стал в Morgan Stanley популярным языком программирования при создании приложений для торговли облигациями. Он был понятен программистам, знакомым с APL, был интерпретируемым, быстро работал за счет реализации лишь главных функций языка APL, быстро работал с большими объемами данных и прекрасно работал с вещественными числами, что особенно важно при вычислениях процентных ставок. В Morgan Stanley язык пользовался широкой поддержкой. По мощности и гибкости его сравнивают с Python и Scala. В 2001 году язык A+ был открыт публике под лицензией GPL. Язык до сих пор используется в Morgan Stanley, например, в их системе торговли свопами — Swaps Trading System (STS), но новые проекты на нем уже не пишутся. Последний стабильный релиз языка был 13 лет назад — в 2008 году.
База данных Kdb+/Q
В 1993 году Артур Уитни покинул Morgan Stanley и основал компанию Kx Systems, где он решил капитализировать свои знания APL и навыки написания финансовых приложений. Он создал более простой язык под названием K, который во многом еще сохранял влияние языка APL, но не требовал специальных символов и клавиатуры. Язык K получился проще, компактнее, и оказался отлично приспособлен к сфере баз данных. Компания Kx Systems заключила контракт с инвестиционным банком UBS, для которого разрабатывала различные финансовые и торговые приложения с использованием языка К.
После окончания контракта в 1997 году, Kx Systems выпустила на рынок новый продукт — колоночную базу данных kdb+, которая до сих пор широко используется во многих финансовых организациях для хранения, быстрой обработки и анализа временных рядов — в первую очередь рыночных данных (market data). Данные — до нескольких миллиардов записей — kdb+ хранит в памяти, поэтому доступ к данным в ней осуществляется быстрее, чем если б они хранились на диске. Это особенно важно в компаниях, связанных с высокочастотной торговлей, где анализ рыночных данных осуществляется в реальном времени для выставления и отмены ордеров. Как встроенный язык в базе данных используется язык q, с помощью которого осуществляется выборка и обработка как исторических данных, так и потоков данных поступающих в реальном времени.
Знание kdb+ до сих пор очень ценится и встречается в описаниях вакансий на позиции программистов в банках. Подробнее о kdb+ и языке Q можно почитать в двух статьях от Дойчебанка: Возможности языка Q и KDB+ на примере сервиса реального времени и База данных KDB+: от финансов до «Формулы 1». Kdb+ сейчас пытается проникнуть и в другие сферы деятельности, например, в анализ больших данных и машинное обучение.
Библиотека Disruptor
Disruptor — пожалуй, одна из самых нашумевших в 2011 году библиотек-фреймворков. Она была создана британским программистом Мартином Томпсоном для новой биржи LMAX, чей биржевой движок был полностью написана на Java. Фурор заключался в том, что Disruptor наглядно доказал — на Java можно писать скоростные, low-latency приложения. Надо только хорошо знать, как это делать и не забывать некоторые аппаратные моменты. Этот пример заставил умолкнуть всех, говоривших «Java медленная», «Java тормозит».
Disruptor — это всего лишь библиотека, не биржевой движок. Как она работает изнутри например рассказывает Руслан Черёмин в своей лекции «Расчленяя Disruptor«. На основе этой библиотеки можно построить и другие приложения. Например, с помощью Disruptor известная библиотека log4j2 обогащается высокоскоростным логгированием без производства лишнего мусора.