Участники биржевой торговли все больше используют компьютеры для автоматизации своей деятельности. Этот процесс необратим. Возврат к торговле вручную уже невозможен. А это значит спрос на квалифицированных IT-специалистов в этой области будет расти даже в периоды экономического спада.
Но давайте обсудим скиллы и знания, на которые делается особый акцент.
Технологические компетенции
Технологические компетенции очень сильно зависят от отдела, в котором работает программист, разработчик, тех.специалист. От программистов в сфере финансов вообще требуются все те же знания, что и в других областях программирования: язык или языки программирования, знакомство с БД, основными принципами разработки ПО. Конкретные же знания всегда перечислены в описании конкретной вакансии. Здесь я лишь упомяну общие технические скиллы, которые очень сильно пригодятся в работе помимо знания определенного языка программирования, технологии, инструментов, фреймворков, и всего того, что нужно для выполнения конкретной работы. Эти требования встречаются в описании любой технологической вакансии.
Стек сетевых технологий
Торговая система в целом это сложная система взаимосвязанных систем (system of systems), которые общаются друг с другом через сеть. Поэтому знание того, как работают локальные сети просто обязательно. Требование к глубине этих знаний зависит от конкретной вакансии.
- TCP/IP и UDP/IP;
- Ethernet;
- базовые сетевые утилиты Linux.
Протоколы уровня приложения
Базы данных
- SQL основы и какая-нибудь реляционная база данных, Oracle требуется чаще всего. Все базы данных в банке обслуживаются специальной командой администраторов DBA (DBA team), так что, если вы не претендуете на роль администратора БД, вам просто надо быть знакомым с тем, как работают реляционные базы данных вообще и как с ними программно общаться;
- работа с базами данных через интерфейс конкретного языка: Java (JDBC), C++/C# (ODBC).
Инструменты
- инструменты командной строки Linux / UNIX (если вам вдруг придется работать с OS Solaris, что вряд ли). Нужны для того, чтобы на QA или PROD быстро найти самостоятельно нужную информацию в случае аварии или ошибки. Все PROD системы в банках обслуживаются отдельными командами. Вам же, как разработчику, не надо будет лично обновлять ПО, ставить патчи или перезагружать сервера, да вам и не даст никто это делать. Но вы должны быть способны по логам и поведению системы определить причины ошибки на PROD;
- все инструменты цикла разработки программ: JIRA, Jenkins/TeamCity, Wiki/Confluence, BitBucket;
- системы управления исходным кодом: Git, уже реже требуется SVN, и уж совсем нигде — CVS;
- IDE: Eclipse, Visual Studio, IntelliJ;
- системы сборки и управления зависимостями: Maven, Gradle. Ant уже вообще не используется, но очень-очень редко встречается в legacy-проектах.
Системы жизненного цикла обычно также поддерживаются и настраиваются отдельными командами. Вам лично придется настраивать только свое dev окружение на рабочем компьютере. Старайтесь научиться делать это делать самостоятельно с нуля, без чьей-либо помощи.
Внимание к деталям
«Attention to details» требование особенно важное в финансовой сфере. Невнимательное и «абыкаковое» отношение может привести любой банк к катастрофическим последствиям. Внимательность требуется, например:
- при ревизии кода — требуется не только понять, работает ли сделанное другим разработчиком изменение или нет, но и то, не вызывает ли оно регрессиий и изменений поведения в других частях системы;
- при чтении спецификаций. В спецификациях неявно могут быть указаны какие-то нюансы, которые при небрежном чтении могут быть упущены или не так поняты;
- при просмотре логов. В логах может содержаться очень много информации, которая «заслоняет» какие-то важные детали поведения системы
- при сборе требований перед созданием очередного функционала или исправлением бага.
Знание предметной области
Когда брокер нанимает программиста со стороны, скорей всего всегда известно заранее в какой команде открыта вакансия и каким классом ценных бумаг он будет заниматься. Следовательно, понятно и какие бизнес-знания требуются от кандидата. Тот, кто владеет предметной областью, имеет преимущества перед другими кандидатами. Тот, кто владеет знаниями именно о данном конкретном виде ценных бумаг, имеет еще большие преимущества перед другими кандидатами.
Благодаря internal mobility программисты могут переходить из отдела в отдел и развивать свои знания, получая более широкое представления обо всех рынках, которые обслуживает данный банк/брокер.
Опыт работы
Из-за этого наблюдается феномен, когда программисты финансовых компаний переходят из одной финансовой компании в другую просто потому, что уже владеет всей суммой знаний предметной области. Другой банк предпочитает нанимать того, кто уже имеет опыт работы в банке в данной конкретной области. У него уйдет меньше времени на обучение, он быстрее разберется во всей запутанной инфраструктуре и заодно «поделится», как там у конкурентов все устроено.
Порог вхождения в профессию очень высок. Не получится так, что сегодня вы программируете алгоритмический движок, а завтра вы будете клепать CRUD формы для какого-то магазина. Время затраченное на овладение предметной областью настолько велико, что знания эти выбрасывать очень жалко, и получается что все, кто вошел в область программирования в финансах уже остаются в ней надолго и только переходят из одного банка в другой, а обращаются к другой деятельности только как к выходу на пенсию.
Предыдущий опыт работы ценится высоко, ведь проще нанять специалиста, уже разбирающегося в области финансов, чем обучать человека с нуля, доверяя ему код, в котором он не понимает многих особенностей бизнеса. Цена ошибки очень высока и измеряется конкретными суммами убытков, а может быть даже и штрафов. Это примерно как в «1С:Бухгалтерии». Нужен не просто программист, а программист, разбирающийся в бухгалтерии и всех налоговых закорючках. Для которого «дебет», «кредит», «баланс счетов», «выписка» и «авизо» — не просто слова, а понимание.
Способность к переключению между задачами
Это то, что называется «Multi-tasking«. Исследования показывают на деградацию продуктивности программиста, если его постоянно отвлекают или ему нужно быстро переключаться между задачами. Но характер работы в сфере финансов неизбежно сам по себе требует этого. Если вы работаете на передней линии бизнеса (front office), у вас редко будет возможность целый день провести без того, чтобы вас не отвлекли на «летучку», или на срочное решение какой-то проблемы, возникшей у трейдеров, или у других команд, с которыми взаимодействует ваша система. Конечно, большую часть проблем решает специальная команда — First Line Support, но бывают ситуации, где Support без помощи разработчика обойтись не может, просто в силу того, что разработчик лучше знает поведение системы.
Часто вы будете обнаруживать себя в ситуации, когда вам приходится работать над несколькими задачами одновременно: фиксить баг, отвечать на емейл, чатиться с support-ом и с коллегами, читать какой-то документ-спецификацию, делать ревью изменений.
Коммуникативные качества
В банках очень чувствительно относятся к общению — в банках не так свободно с тоном и эмоциями, как в стартапах или мелких компаниях. Общаться приходится очень много, с людьми разного склада ума, характера, мотивации, мнения о себе, культуры, расы и степени владения английским языком. Короче на высоте должны быть Soft skills. Очень ценится умение:
- Работать в команде
- Не робеть перед людьми
- Не стесняться задавать вопросы и докапываться до сути
- Понимать иерархию организации и ориентироваться в ней
- Знать, когда и к кому обратиться за помощью в случае возникновения затруднений в решении какой-то задачи или возникновения проблемы
Устойчивость к стрессам
Люди теряют голову, особенно когда теряют деньги. Трудно не потерять голову, если по твоей ошибке в коде клиент банка понес убыток или банку регулятор выкатил штраф.
Особый стресс — PROD issues, когда все на нервах ищут причину падения системы или ошибки в исполнении ордера. В этой ситуации помогают очень крепкие нервы и ясная голова, методичный подход исключения возможных причин и последовательный поиск реальной причины, четкое понимание всех составляющих системы и их поведения в разной ситуации, так называемая situational awareness.
Ситуация может быть повторением уже старой ситуации. Тут помогает опыт и память, было ли что-то подобное ранее и как тогда решили проблему. Как и в любом программном проекте PROD вылезают Heisenbug-и, которые не отловить на QA или в разработке. Случается всё, поэтому и готовым надо быть ко всем. Собранность, устойчивость к стрессам, трезвый ум и спокойствие в критических ситуациях неоценимы.
Самообучаться и делиться знаниями
Очень ценится в банке умение мыслить и работать самостоятельно без ежедневного указания, т.е. Self-management. Эти навыки самостоятельности появляются со временем, с накоплением опыта работы с проектом. Наступает определенный момент, когда вы уже начинаете сами без дополнительных подсказок понимать, что надо делать в каком порядке, и кто и как должен быть поставлен в известность, если требуется помощь.
Это же касается и самообучения. Вы не только должны постоянно расширять и освежать свои знания, но и делиться ими с членами вашей команды. От уровня компетентности всей вашей команды зависит то, сколько времени вам надо будет тратить на поиск и исправление ошибок ваших коллег, допущенных по незнанию или по непониманию или даже по незнанию того, что они не знают.